Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 215.


VBNet VBMania
Голосование:

Голосования сайта VBNet.Ru. Результаты голосований передаются на сайт. Проследите, что есть соединение с интернетом.



Рассылки Subscribe.Ru
VB.NET-World
Новости сайта IgorykSoft и советы по программированию
DanSoft о Visual Basic
Visual Basic.NET Уроки.

Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • MDesign
  • IgorykSoft
  • DanSoft
  • Господа!!! читайте MSDN!!!

    Несколько слов от автора:

       Новый выпуск..
    Читайте!


    Содержание выпуска




    Как в VB при нажатии Enter, перевести фокус на TextBox?

    Вопрос:

    Скажите как в VB cделать так, чтобы при нажатии на клавишу Enter, курсор переходил из одного TextBox в другой?

    Ответ:

    Пусть первый TextBox с именем Text1, а второй - Text2. Пишем такой код:

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then Text2.SetFocus
    End Sub

    Stasila

    наверх


    Как в VBA открыть текстовый файл и отобразить его в TextBox'е?

    Вопрос:

    Как в VBA открыть нужный текстовой файл и содержимое файла отобразить в TextBox?

    Ответ:

    Dim iFileNo As Integer
    Dim sFileName As String

    sFileName = "C:\cofig.sys" 'помещаешь сюда имя файла
    iFileNo = FreeFile
         Open sFileName For Input As fileno
             Text1.Text = Input(LOF(fileno), fileno)
         Close fileno

    В TextBox не может помещаться больше 64 К. Для больших файлов надо использовать RichTextBox, к тому же он позволяет форматировать, выделять, подчеркивать, раскаршивать, но, естественно, больше весит.

    Дмитрий Данелия

    наверх


    Как сформировать popup menu?

    Вопрос:

    Как сформировать popup menu?

    Ответ:

    Делаешь элемент меню верхнего уровня MyPopupMenu - снимаешь галочку с опции Visible (оно должно быть невидимым). В этом, невидимом пункте делаешь свое меню, какое тебе нужно. Например, надо вызвать меню по клику правой кнопкой мыши на форме:

    Private Sub Form1_MouseUp(Button As Integer, Shift As Integer, X As Single,
    Y As Single)
      If Button = vbRightButton Then
         PopupMenu MyPopupMenu
      End If
    End Sub

    Дмитрий Данелия

    наверх


    Как учтановить через ADO значение поля Identity (счётчик) в БД?

    Вопрос:

    Кто знает как вставить новую строку в ADODB.RecordSet, открытый как adCmdTableDirect, если там (в table) есть поле IDENTITY (счетчик) и в него надо вставить свое значение. При вызове .addnew и присвоении этому полю значения - он ругается.

    Ответ:

    Разве можно что-то вставить в поле типа счётчик? Это поле должно формироваться автоматически. ADO его само поставит. И вообще, как Вы можете сами его ставить, если оно должно быть уникально для каждой записи? Если хотите сами делать счетчик, то не просите об этом ADO, сделайте этому полю тип, например, Long, и сами им занимайтесь.

    Шатрыкин Иван

    наверх


    Как скопировать текст в буфер обмена?

    Вопрос:

    Я работаю над созданием программы на VB 6.0. Как сделать так, чтобы текст из текстового файла копировался в буфер обмена?

    Ответ:

    Есть такой объект, называется Clipboard.
    Есть методы SetText и GetText, ну, и конечно же Clear. Открой свой файл как текстовый, можешь читать хоть построчно, слей в переменную, желательно строковую. А потом вызвать метод SetText объекта Clipboard.

    Dim sFileName As String, sText As String
    Dim iFileNo As Integer

    Private Sub Form_Load()
    sFileName = "c:\config.sys"
    iFileNo = FreeFile
         Open sFileName For Input As iFileNo
           sText = Input(LOF(iFileNo), iFileNo)
         Close iFileNo
     Clipboard.SetText sText
    End Sub

    ' Получить текст из Буфера Обмена
    Private Sub Form_Click()
     Text1.Text = Clipboard.GetText
    End Sub

    Sergey Y. Tkachev, Дмитрий Данелия

    наверх


    Вопрос/Ответ

    Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.

    Вопросы:


    Автор вопроса: Space

    Ответ ожидается по этому адресу

       Как сшить два файла в один, и обращаться из одного к другому. Например: рисунок и мой проект, при этом если на кнопке кликнуть, то рисунок покажется в image. Или wav файл, сшитый с моей прогой и если кликнуть "играть", то будет играть этот файл!


    Автор вопроса: .::neo::.

    Ответ ожидается по этому адресу

       Вопрос по .NET:
    Как поменять цвет текста в заголовке формы...?


    Автор вопроса: Владимир

    Ответ ожидается по этому адресу

       Подскажите пожалуйста почему в RichTextBox при вставке *.bmp файла параллельно запускается и сам файл в Paint. Код для вставки:

    Private Sub Command1_Click()
    a = RichTextBox1.SelStart
    RichTextBox1.OLEObjects.Add , , "\\4\add_pictures_to_richtextbox\smile.bmp"
    RichTextBox1.SelStart = a + 1
    RichTextBox1.SetFocus
    End Sub
    Private Sub Form_Load()
    RichTextBox1.OLEObjects.Clear
    End Sub

    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    RichTextBox1.OLEObjects.Clear
    End Sub


    Автор вопроса: Alex

    Ответ ожидается по этому адресу

       Подскажите, каким образом можно произвести отбор файлов по маске *.doc и *.xls с условие контекстного поиска. Т.е. мне нужно, указав кусок текста, найти файлы, содержащие его, и вывести все найденные файлы в ListBox.




    Ответы:


    Вопрос:

       Как мне можно определить версию Bios?

    Ответ:

    Автор ответа: •Creator•

    Как узнать версию не знаю, а вот дату пожалуйста...

        Type BIOS_DATE
           s As String * 8
        End Type

        Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" _
                (pDest As Any, pSource As Any, ByVal ByteLen As Long)

        Public Function BIOS() As Long
           Dim sDB As BIOS_DATE

           CopyMemory sDB, ByVal &HFFFF5, 8&
           BIOS = DateSerial(Mid(sDB.s, 7, 2), Mid(sDB.s, 1, 2), Mid(sDB.s, 4, 2))
        End Function


    Вопрос:

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

            myExcelObject.Sheets("Лист1").Range("A1:E1").HorizontalAlignment = xlCenter, или
            myExcelObject.Sheets("Лист1").Cells(1, 1).HorizontalAlignment = xlCenter

    выдается сообщение об ошибке

    Run-time error '1004':
    Нельзя установить свойство HorizontalAlignment класса Range

    Что не так? Помогите, пожалуйста.

    Ответ:

    Автор ответа: bagira1975

    Скорее всего используешь не те константы. В VBA для горизонтального выравнивания есть констата xlHAlignCenter, скорее всего в VB аналагично, правда сам не проверял.


    Вопрос:

       Как реализовать выполнение команд DOS (dir, rename и др.)?

    Ответ:

    Автор ответа: Пащенко А.

    Для выполнения комант DOS необходимо запустить "command.com" (в NT-системах лучше cmd.exe) с параметром - "/c xxx", где xxx - команда DOS.
    Например:

    Shell "cmd /c pause"



    Ответ:

    Автор ответа: Веселов Даниил Анатольевич

    Shell "command.com DOS-комманда"

    Например:

    Shell "command.com dir /?"


    Вопрос:

       Как сделать так чтобы при загрузки формы проигрывался звук? Если можно намыльте исходничек по проще.

    Ответ:

    Автор ответа: Веселов Даниил Анатольевич

    Есть много способов, я опишу 3.

      1. Можно поместить на форму объект OLE. Появится окно Вставка объедка нада выбрать создать из файла и прикрепить к нему звуковой фаил, а в коде прописать:)

    Private Sub Form_Load()
    OLE1.DoVerb
    End Sub

    2. Можно проще...
      
    Private Sub Form_Load()

    Shell "SNDREC32.EXE /play /close путь и имя зв. файла"
    End Sub

    Например :-0
    Private Sub Form_Load()
    Shell"SNDREC32.EXE /play c:\windows\media\chimes.wav"
    End Sub
      
    Но пункты 1 и 2 съедают очень много памяти поэтому я использую...

    3. Здесь используется WinApi функция. Из вышесказого следует нижеследующие... Короче надо создать модуль и написать

    Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

    Апосля надо в коде формы написать

    Private Sub Form_Load()
    Dim cooller As Long
    cooller = sndPlaySound("путь и имя файла", 1)
    End Sub


    Вопрос:

       Я уже задавал вопрос :-( см. от Andr: В подпрограмме есть N-подпрограмм (для GOSUB). ... :-)
    Но то ли не понятно написал, то ли это не реально для возможностей VB.
    Хотя, вроде-бы-как и WinAPI и VarPtr() и коллекции объектов можно использовать.
    Есть даже слух, что в VB есть функция вставки кода на ASM ;-)
    Попытаюсь прояснить свой вопрос на примере двух приблизительных подпрограмм на VB.
    На Vijual Kod выглядит просто:
      Kod=>eBx -eBx=Kod
      =>[ebx] -переход по адресу в eBx

    ------- два примерных варианта на VB (нереальных) ----
    Public Function kod_ObrabotkaKoda(Kod0_255&)as long
             Dim S$
             Const cS$="Metka"

             S=cS+Ttrim$(Str$(Kod0_255))'Создать имя метки

             GoSub к имени метки находящейся в строковой переменной S
             exit Function
    '====
    Metka1:
                     код подрограммы
             return
    Metka2:
                     код подрограммы
             return
    Metka3:
                     код подрограммы
             return
    .....
    Metka255:
                     код подрограммы
             return
    End function
    ---- или типа этого (по адресу метки) -----
    Public Function kod_ObrabotkaKoda(Kod0_255&)as long
             Dim i&
             Static masAdr$(255),F&

             if F=0 then
                     F=1
                     For i=0 to 255
                             'естественно, что функции adress() не существует
                             'а VarPtr() здесь "выходной"
                             masAdr(i)=adress("Metka"+Ttrim$(Str$(i)))'получить адрес метки
                     next i
             endif

             GoSub к метке по адресу в masAdr(Kod0_255) '
             exit Function
    '====
    Metka0:
                     код подрограммы
             return
    Metka1:
                     код подрограммы
             return
    Metka2:
                     код подрограммы
             return
    Metka3:
                     код подрограммы
             return
    ......................
    Metka255:
                     код подрограммы
             return
    End function

    Может кто из профессионалов подскажет, как решить эту проблемму.

    P.S.
    А может использовать отдельные подпрограммы - для них можно получить адрес...
    Думаю, интересно будет не мне одному...

    Ответ:

    Автор ответа: Артем Кривокрисенко

    Че-то ты сильно намудрил...

    Может, тебе поможет такой синтаксис:

    On i Goto Metka1, Metka2, Metka3, ..., Metka 255

    Где i - это номер нужной метки из списка (начиная с 1). Например, чтоб
    пойти к метке 4 напиши:

    i=4
    On i Goto Metka1, Metka2, Metka3, ..., Metka 255

    и все будет путем.



    Ответ:

    Автор ответа: Alexander

    Ну, хорошо. Уговорили на тему.

    Во-первых, в VB6 есть средства для получения адреса и обращения функции по адресу (MSDN: "Passing Function Pointers to DLL Procedures and Type Libraries").
    Это функция, оператор и ключевое слово AddressOf. В VB они широко используются обычно для реализации "обратных вызовов". Это даёт возможность теоретически реализовать ваш подход. Конечно, адреса переходов вычислите заранее.

    Во-вторых, конечно учесть, высокое быстродействие инструкции Call по сравнению Goto (Pentium оптимизирован под Call и эта инструкция работает быстрее Goto, как это ни парадоксально).

    В третьих, очень хитрые вещи делает Windows на процедуре связывания COM-объектов, что положено в основу фантастического быстродействия VB NET по сравнению с VB6. Советую познакомиться поближе.


    Вопрос:

       Как определить размер любой папки и диска?

    Ответ:

    Автор ответа: Alexander

    Прочесть пример и справку в MSDN (об это пишется всегда в начале этой рассылки) об объектах FSO, например.


    Вопрос:

       Как разрешить использование .mdb Файла из программы VB и запретить доступ в него другими способами?

    Ответ:

    Автор ответа: Sergey

    Поставь пароль на базу. И указывай его в строке подключения.



    Ответ:

    Автор ответа: Alexander

    Прочесть соответствующую справку в Access. Там всё понятно. И о группах, и об ADMIN...




    Можете заполнить эту форму, либо отослать вопрос СЮДА

    Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
    Текст сообщения:
    Ваше имя
    E-mail для ответа

    наверх


    Выпуск подготовили:

    Сурменок Павел