Простая овальная форма

Бывают различные ситуации, когда обычный вид формы не подходит для поставленных целей, так что смотрим на простом примере, как сделать овальную форму не используя WIN API.

Imports System.Drawing.Drawing2D
Public Class Form1
    Public Sub New()
        InitializeComponent()
        Me.FormBorderStyle = FormBorderStyle.None
        Me.BackColor = Color.Black
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim g As New GraphicsPath
        Dim gr As Graphics = Me.CreateGraphics()
        Dim Frm As Rectangle = Me.ClientRectangle
        Frm.Inflate(-1, -1)
        g.AddEllipse(Frm)
        Me.Region = New Region(g)
        gr.Dispose()
    End Sub
End Class

Снимок 23 11 12 54 12 300x242 Простая овальная форма

  Метки: ,
  Евгений
  Просмотров: 5 457
  Запись опубликована в 09:03

UAC: с чем едят?

Привет всем!

Здесь я хочу немного рассказать об UAC и о том как же взаимодействовать с ним в NET'е.

Для начала давайте вспомним что же такое этот UAC:

Контроль учётных записей пользователей (англ. User Account Control, UAC) — компонент операционных систем Microsoft Windows, впервые появившийся в Windows Vista. Этот компонент запрашивает подтверждение действий, требующих прав администратора, в целях защиты от несанкционированного использования компьютера.

Как видно из цитаты в Окнах без UAC никуда. И дабы не отставать от моды давайте рассмотрим пару примеров написанных на VB.NET.

Функция проверки на наличие прав Администратора у программы:

Private Function CheckAdmin() As Boolean
    Dim wp As New System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent())
    Return wp.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)
End Function

Запуск программы с правами Администратора (с UAC, то бишь вылетит вопрошающие окно):

Dim startInfo As New ProcessStartInfo(Application.ExecutablePath)
startInfo.UseShellExecute = True
startInfo.WorkingDirectory = Environment.CurrentDirectory
startInfo.Verb = "runas"

Try
    Process.Start(startInfo)
Catch ex As System.ComponentModel.Win32Exception
    MsgBox(ex.Message)
End Try

Добавить на Button красивый щит, как бы говоря конечному пользователю "У нас всё серьёзно!":

'Импорт:
Private Declare Auto Function SendMessage Lib "user32.dll" _
         (ByVal hwnd As IntPtr, _
          ByVal msg As UInteger, _
          ByVal wParam As UInteger, _
          ByVal lParam As UInteger) As UInteger

'В процедуру/функцию/куда угодно:
ИМЯ_КНОПКИ.FlatStyle = FlatStyle.System
SendMessage(ИМЯ_КНОПКИ.Handle, 5644, 0, &HFFFFFFFFUI)

Вот так это выглядит: 1920131433 UAC: с чем едят?

Статью и примеры для вас подготовил Gemorg. Прошу любить и жаловать)

P.S. Должно работать на Окнах старше XP (не включая).

P.P.S. Тестировалось только на Win 8.

  Метки: ,
  Gemorg
  Просмотров: 4 292
  Запись опубликована в 20:28

Ноя 17, 2013 - Разное    2 комментария

Методичка по Pascal

Вот уже идет третий месяц учебы.

На паре "Основы программирования и алгоритмизации" перешли к изучению паскаля по методичке самого преподавателя.

Не пожалел, что отдал за нее деньги, все описано на столько понятно, что даже далекие люди начинают втягиваться.

Кому интересно, пишите, поделюсь с вами.

20131117 131543 225x300 Методичка по Pascal

20131117 131607 225x300 Методичка по Pascal

  Метки: , , ,
  Евгений
  Просмотров: 5 754
  Запись опубликована в 09:28

Решение мат. выражений средствами .NET

Решение.NET  Решение мат. выражений средствами .NET

До этого мы разбирали пример, решения выражения с помощью метода Eval из VBS, а сегодня разберем, как средствами .NET вычислить результат строки (выражения)

Решение.NET.zip

Imports System.CodeDom.Compiler
Imports System.Reflection
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Label1.Text = "Ответ: " & Решить(TextBox1.Text)
    End Sub
    Public Function Решить(ByVal выражение As String) As String
        Dim myCode As CodeDomProvider = CodeDomProvider.CreateProvider("VB")
        Dim myPar As New CompilerParameters()
        'формируем виртуальный класс, в котором будет производиться расчет
        Dim myCodeBody As New System.Text.StringBuilder()
        myCodeBody.AppendLine("Public Class MyCalculator")
        myCodeBody.AppendLine("Public Function Calc() As Double")
        'TextBox1.Text.ToLower().Replace(«x», TextBox2.Text) — меняем икс в формуле (TextBox1) на число указанное в TextBox2
        '.Replace(«,», «.») — меняем запятые на точки, т.к. в VB в качестве десятичного разделителя используются точки
        myCodeBody.AppendLine(String.Format("Return {0}", выражение))
        myCodeBody.AppendLine("End Function")
        myCodeBody.AppendLine("End Class")
        'компилируем
        Dim myResult As CompilerResults = myCode.CompileAssemblyFromSource(myPar, myCodeBody.ToString())
        If myResult.Errors.HasErrors Then
            'какие-то ошибки
            For i As Integer = 0 To myResult.Errors.Count - 1
                If myResult.Errors(i).ErrorText = "Ожидалось выражение." Then
                    MsgBox(myResult.Errors(i).ErrorText, MsgBoxStyle.Critical, "Ошибка")
                End If
            Next
            Return "Ошибка!"
        End If
        'ошибок нет, выдергиваем наш класс
        Dim myAsm As Assembly = myResult.CompiledAssembly()
        Dim myCls As Object = myAsm.CreateInstance("MyCalculator", True)
        'выводим результат
        Return myCls.Calc().ToString
    End Function
End Class
  Метки: , , ,
  Евгений
  Просмотров: 5 872
  Запись опубликована в 09:13

Отключение монитора (Спящий режим)

samsung f2380m feature13 150x150 Отключение монитора (Спящий режим)

Выйти из спящего режима можно пошевелив мышью.

Public Class Form1
    <Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=Runtime.InteropServices.CharSet.Auto)> _
    Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function
    Private Const MONITOR_ON = -1&
    Private Const MONITOR_LOWPOWER = 1&
    Private Const MONITOR_OFF = 2&
    Private Const SC_MONITORPOWER = &HF170 '&
    Private Const WM_SYSCOMMAND = &H112
    'Отключение
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        SendMessage(Me.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF)
    End Sub
    'Включение
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        SendMessage(Me.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON)
    End Sub
End Class
  Метки:
  Евгений
  Просмотров: 4 485
  Запись опубликована в 07:03

Ссылки со страницы

На форму кидаем:

  • Button
  • ListBox
  • WebBrowser

В WebBrowser пишите любой сайт, я взял https://ya.ru/

Ну и сам код:

Dim H As HtmlElementCollection = WebBrowser1.Document.Body.GetElementsByTagName("a")
For Each Url As HtmlElement In H
ListBox1.Items.Add(Url.GetAttribute("href"))
Next

Также можно получить, как ссылку так и текст к ней.

ListBox1.Items.Add(Url.GetAttribute("href") & "|" & Url.InnerHtml)

URL 300x214 Ссылки со страницы

  Метки:
  Евгений
  Просмотров: 7 885
  Запись опубликована в 07:12

Типы данных в PascalABC.NET

Любая переменная в PascalABC.NET имеет определённый тип. Каждый тип, используется для определённых целей и имеет свои уникальные возможности.

Типы в PascalABC.NET:

  • Shortint - целочисленный тип. Любое число от -128 до 127. Занимает 1 байт памяти.
  • Smallint - целочисленный тип. Любое число от -32768 до 32767. Занимает 2 байта памяти.
  • Integer, Longint - целочисленные типы. Любое число от -2147483648 до 2147483647. Занимает 4 байта памяти.
  • Int64 - целочисленный тип. Любое число от -9223372036854775808 до 9223372036854775807. Занимает 8 байт памяти.
  • Byte - целочисленный тип. Любое число без знака от 0 до 255. Занимает 1 байт памяти.
  • Word - целочисленный тип. Любое число без знака от 0 до 65535. Занимает 2 байт памяти.
  • Longword, Cardinal - целочисленный тип. Любое число без знака от 0 до 4294967295. Занимает 4 байт памяти.
  • Uint64 - целочисленный тип. Любое число без знака от 0 до 18446744073709551615. Занимает 8 байт памяти.
  • Real, Double - вещественный тип. Любое число от -1.8∙10308 до 1.8∙10308. Имеет двойную точность, кол-во значащих цифр 15. Занимает 8 байт памяти.
  • Single - вещественный тип. Любое число от -1.8∙1038 до 1.8∙1038. Кол-во значащих цифр 7. Занимает 4 байта памяти.
  • Boolean - логический тип. Может принимать 2 значения: Истина (True) и Ложь (False). Занимает 2 байта памяти.
  • Char - символьный тип. Может содержать 1 любой символ. Занимает 2 байта памяти.
  • String - строковый тип. Может содержать произвольное кол-во символов.
  • Так-же имеется множество других типов (перечислимый, диапазонный, процедурный, файловый и пр.) с которыми мы познакомимся позже.

Чаще всего используется только 4 типа: Integer, String, Real и Boolean. А теперь, приступим к самому интересному - практике.

Все переменные в PascalABC.NET объявляются в секции var, например:

var
  i: integer;

begin
  // Тут код программы
end.

В этом примере мы объявили переменную "i", целочисленного типа. Имя переменной обязательно должно быть на английском языке и не может начинаться с цифры. Также можно объявить сразу несколько переменных:

var
  a, b, c: integer;

Тут мы объявили стразу 3 переменных (a, b, c) типа Integer. Присваивание значений переменным:

// Объявляем переменные
var
  i: integer;
  r: real;
  s: string;
  b: boolean;

begin
// Присваиваем значения переменным
  i := 10;
  r := 1.2;
  s := 'Hello World';
  b := True;
end.

Как видно из этого примера каждой переменной можно присвоить определённый тип данных. Такой код вызовет ошибку:

var
  i: integer;

begin
  i := 'Текст';
end.

Можно присвоить значение переменной, сразу после объявления:

var
  i: integer := 10; // Сразу присвоили значение
  s := 'Hello World'; // Можно присвоить значение, без объявления типа.

begin
  WriteLn(i);
  WriteLn(s);
end.

В этом примере я использовал процедуру WriteLn для вывода переменной на экран.

  Метки:
  BaboshinSD
  Просмотров: 47 892
  Запись опубликована в 09:46

Ох, эти рабочие будни!

Дорогие друзья, хочу извиниться за такое редкое написание статей на блог, но это скоро исправим.

Как я уже обещал, что скоро выйдет новая версия FastScreen, которую я планировал добавить в те выходные, но все сложилось иначе, так что выход новой версии запланирован на 22 сентября(воскресенье).

Также хочу похвастаться поделится тем, что я назначен модератором в раздел Visual Basic.NET на КиберФоруме!

Это большая честь для меня и я буду делать все, чтобы дальше развивать раздел, следить за порядком и помогать в решении вопросов!

Screenshot 19 09 18 31 36 300x168 Ох, эти рабочие будни!

  Метки: ,
  Евгений
  Просмотров: 2 994
  Запись опубликована в 14:42

С Днем Программиста!

Чуть не забыл про этот замечательный праздник.

От души желаю всем программистам хороших программ, по меньше багов и удачи в жизни!

С Днем Программиста 300x200 С Днем Программиста!

  Метки:
  Евгений
  Просмотров: 2 187
  Запись опубликована в 09:00

Страницы:«1...31323334353637...44»