Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Русский_Проект: Изучение Visual Basic


Здравствуйте! Пришла зима. Больше времени, чтобы посидеть за компьютером и изучать языки программирования

Справочник по функциям Windows API для Visual Basic 6.0

Сегодня я вас познакомлю с функцией EnumSystemCodePages.

EnumSystemCodePages перечисляет кодовые страницы, установленные или поддерживаемые операционной системой.

Declare Function EnumSystemCodePages Lib "kernel32" _
        Alias "EnumSystemCodePagesA" (ByVal _
        lpCodePageEnumProc As Long, ByVal dwFlags As Long) _
        As Long

Параметры

lpLocaleEnumProc
Указатель на функцию обратного вызова EnumCodePagesProc
dwFlags
Флаг, определяющий кодовые страницы для перечисления. Можно принимать одно из следующих значений
Const CP_INSTALLED = &H1Перечисляет только установленные кодовые страницы
Const CP_SUPPORTED = &H2Перечисляет все поддерживаемые кодовые страницы

Пример

' Получим информацию об установленных кодовых страницах
' Код для модуля
Private Declare Function EnumSystemCodePages Lib "kernel32" _
        Alias "EnumSystemCodePagesA" (ByVal _
        lpCodePageEnumProc As Long, ByVal dwFlags As Long) _
        As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias _
        "RtlMoveMemory" (Destination As Any, Source As Any, _
        ByVal Length As Long)

Private Declare Function GetCPInfo Lib "kernel32" (ByVal _
        CodePage As Long, lpCPInfo As CPINFO) As Long

Const CP_INSTALLED = &H1
Const CP_SUPPORTED = &H2

Const MAX_DEFAULTCHAR = 2
Const MAX_LEADBYTES = 12

Type CPINFO
  MaxCharSize As Long
  DefaultChar(MAX_DEFAULTCHAR) As Byte
  LeadByte(MAX_LEADBYTES) As Byte
End Type

Dim CP() As Long

Public Sub EnumCodePage(LB As ListBox)
  Dim x%, cpinfo$, Result&, CPInf As CPINFO
  
      ReDim CP(0 To 0)
      LB.Clear
      Call EnumSystemCodePages(AddressOf EnumCodePagesProc, 

CP_INSTALLED)
      For x = 0 To UBound(CP) - 1
        Result = GetCPInfo(CP(x), CPInf)
        CPINFO = CP(x) & " " & " " _
             & GetCodePageString(CP(x))

        LB.AddItem CPINFO
      Next x
End Sub

Private Function EnumCodePagesProc(CP_Pointer&) As Long
  Dim Buffer$
  
    Buffer = Space$(255)
    Call CopyMemory(ByVal Buffer, CP_Pointer, Len(Buffer))
    Buffer = Left$(Buffer, InStr(Buffer, Chr$(0)) - 1)
    CP(UBound(CP)) = CLng(Buffer)
    ReDim Preserve CP(0 To UBound(CP) + 1)
    EnumCodePagesProc = 1&
End Function

Private Function GetCodePageString(CP&) As String
  Dim cpinfo$
    
    Select Case CP

      Case 437:   CPINFO = "MS-DOS United States"
      Case 855:   CPINFO = "IBM Cyrillic (primarily Russian)"
      Case 866:   CPINFO = "MS-DOS Russian"
      Case 1251:  CPINFO = "Windows Cyrillic"
      Case 1252:  CPINFO = "Windows US (ANSI)"
      Case Else: CPINFO = "Смотри в документации"
    End Select
    
    GetCodePageString = CPINFO
End Function
--------------------------------------------------------------------------------
' Добавьте на форму ListBox
Private Sub Form_Load()
  Call EnumCodePage(List1)
End Sub

Справочник по функциям WinAPI для .NET Framework

Посмотрим, как эту функцию EnumSystemCodePages использовать в .NET Framework (C#)

[DllImport("Kernel32.dll")]
static extern bool EnumSystemCodePages(CODEPAGE_ENUMPROC 

lpLocaleEnumProc, int dwFlags);
delegate bool CODEPAGE_ENUMPROC(string lpLocaleString);

Пример

// Получим информацию об установленных кодовых страницах
[DllImport("Kernel32.dll")]
static extern bool EnumSystemCodePages(CODEPAGE_ENUMPROC 

lpLocaleEnumProc, int dwFlags);
delegate bool CODEPAGE_ENUMPROC(string lpLocaleString);

const int CP_INSTALLED = 0x00000001;

private bool EnumCodePagesProc(string locale)
{
    listBox1.Items.Add(locale);
    return true;
}

private void button1_Click(object sender, EventArgs e)
{
    EnumSystemCodePages(new 

CODEPAGE_ENUMPROC(EnumCodePagesProc), CP_INSTALLED);
}

Справочник по .NET Framework

Продолжаем знакомиться с новинками .NET Framework 2.0. В прошлый раз я собирался рассказать о свойстве AvailableFreeSpace, но забыл вставить описание свойства. Восполним пробел, и заодно познакомимся еще с одним новым свойством DriveFormat.

Свойство AvailableFreeSpace

Свойство AvailableFreeSpace показывает число доступного свободного места на диске, а свойство DriveFormat позволяет получить имя файловой системы (NTFS или FAT32).

Пример

MessageBox.Show(new DriveInfo("c").AvailableFreeSpace.ToString());

MessageBox.Show(new DriveInfo("c").DriveFormat);

Хочу обратить внимание всех зарегистрированных пользователей данного справочника - с декабря в справочнике будут использоваться только C#, примеры на Visual Basic будут удаляться. Это съэкономит и объем справочника и мое время. При желании, всегда можно посмотреть на документацию в MSDN.

Исходники .NET

Многие постоянные посетители сайта уже привыкают к новому адресу, где можно найти свежие новости о .NET Framework - netsources.narod.ru. Потихоньку сайт расширяется.

Проект

На сайте открывается новая рубрика Проект. В этой рубрике вам будут предлагаться задачи, которую необходимо решить совместными усилиями. Наиболее активные участники, которые предложат наиболее удачные решения, возможно, будут награждены.

Телефонные звонки

Итак, необходимо решить следующую задачу. Сотрудники одной конторы часто звонят по междугородней и международной связи. В конце месяца телефонная станция присылает счет за эти звонки. В свою очередь контора ведет свой учет телефонных переговоров. При подведении итогов оказывается, что два списка телефонных переговоров отличаются. Нужно выявить эти лишние переговоры для дальнейшего изучения. Проблема состоит в том, что обе организации ведут учет переговоров в разных форматах, а самих переговоров набирается несколько сотен. Необходимо написать программу, которая автоматизирует этот процесс. Два текстовых файла, которые служат учебным материалом для этой задачи можно скачать с сайта Проекта. Поехали!

Удачного вам программирования!


©2007 А.Климов
Русский_Проект

В избранное