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

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


Информационный Канал Subscribe.Ru

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


VBNet VBMania
Ссылки:

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

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

       Поздравляю всех женщин с праздником и желаю всего наилучшего!
    Читайте!


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




    Как поставить окно на первый план?

    Вопрос:

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

    Ответ:

    На Form_Load делаешь так

    SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE

    где:

    Public Declare Function SetWindowPos Lib "user32" _
        (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
        ByVal X As Long, ByVal Y As Long, ByVal cx As Long, _
        ByVal cy As Long, ByVal wFlags As Long) As Long

    Public Const HWND_TOPMOST = -1
    Public Const SWP_NOMOVE = &H2
    Public Const SWP_NOSIZE = &H1

        Рязанов Андрей

    Добавь 2 CommandButton (под именем Command1 и Command2). Когда нажмешь первую кнопку, форма поверх всех

    Private Declare Function SetWindowPos Lib "user32" (ByVal h%, ByVal hb%, ByVal x%, _
    ByVal Y%, ByVal cx%, ByVal cy%, ByVal F%) As Integer
    Const SWP_NOMOVE = 2
    Const SWP_NOSIZE = 1M
    Const flags = SWP_NOMOVE Or SWP_NOSIZE
    Const HWND_TOPMOST = -1
    Const HWND_NOTOPMOST = -2

    Private Sub Command1_Click()
    res = SetWindowPos(Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, flags) 'Форма on-top
    End Sub

    Private Sub Command2_Click()
    res = SetWindowPos(Form1.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, flags) 'Форма non-on-top
    End Sub

        AlexGL

    наверх


    Как сделать программу независимой?

    Вопрос:

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

    Ответ:

    Это делает программа Fusion, PEBudle

        Savenger

    наверх


    Что такое декампилятор для VB?

    Вопрос:

    Что такое декампилятор для VB?

    Ответ:

    Правильней: "ДекОмпилятор". В принципе, любой декомпилятор выполняет работу, обратную работе компилятора. Если компилятор из исходников собирает OBJ/EXE файл, то декомпилятор, соответственно, должен из OBJ/EXE файла плучить исходники.
    Ни одного более-менее рабочего декомпилятора для VB я не видел. Формы выдрать ещё реально, а вот код...

        Savenger

    наверх


    Почему при запуске копии программы она перестает ловить сочетания клавиш?

    Вопрос:

    Есть форма её BorderStyle равен 0. Этой форме я назначаю горячие клавиши что то вроде CTRL+S Потом перехватываю сообщение WM_HOTKEY и всё работает, но если я запущю вторую копию программы то в ней уже ни одна горячая клавиша не работает. Как я понял это происходит из-за того что при регестрации горячих клавиш второй раз функция возврашяет ошибку как это побороть?

    Ответ:

    Для начала неплохо бы и узнать, как регистрируются эти самые клавиши. Если RegisterHotKey, то сливай бензин и глуши мотор:). Этот фокус не проходит! Функция RegisterHotKey ассоцирует комбинацию клавиш с определенным окном. Это окно будет получать сообщение WM_HOTKEY. Но в любом случае, какое окно не было бы активно. Например, зарегистрировал ты Ctrl+S. Ни в одной программе эта комбинация не заработает. Все перехватит твое окно. Можно запретить так использование Alt+TAB, Win+E и некоторые другие (а вот любимый Alt+Ctrl+Del не срабатывает, кнопку Reset тоже не удалось зарегистрировать.

    Теперь о твоей проблеме. Я так понял, что при запуске второй программы первая не ловит сочетание. Так и должно быть.

    Если тебе нужно, чтоб сочетание работало только тогда, когда окно активно, то, думаю, тебе поможет Form_KeyPress и им подобные.

    А если нужно сделать так, чтоб это сочетание работало и тогда, когда твое окно неактивно, то прийдется попотеть.

    Самый простой способ - повесить на окно PictureBox и ассоциировать сочетание именно с ним. А теперь самое интересное!

    Функцией SetWindowText ставишь заголовок этому окну.

    После функцией FindWindowEx находишь все окна с таким именем в системе и полученные индентификаторы грузишь в массив.

    И при получении WM_HOTKEY отправляешь это сообщение все полученным окнам (SendMessage)

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

    наверх


    Как в одну переменную вставить 5 констант vbCrLf

    Вопрос:

    Вот есть такая константа в VB vbCrLf, мне надо в своей проге применить её раз 5 (сразу), можно ли это сделать обходя повторение 5 раз этой константы?

    Ответ:

    Как вариант, объяви глобальную переменную, типа:

    Public vb5CrLf As String

    И проинициализируй её при загрузке программы, типа вот так:

    Private Sub MAIN()
        vb5CrLf = vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf
    End Sub

    НЕ лучшее решение, но уж точно сработает...

        Savenger

    Попробуй в разделе Declaration пакой код:

    Const vbCrLf5 = vbcrlf & vbcrlf & vbcrlf & vbcrlf & vbcrlf

    Теперь значение константы vbCrLf5 будет равно 5-ти VbCrLf-ам.

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

    наверх


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

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

    Вопросы:


    Автор вопроса: Михаил Антонов

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

       Задумал такую фишку. В форму встраивается объект "Лист Microsoft Excel". В ячейки его активного листа программно пишется что надо. Затем объект сохраняется в файле. И вот что получается. "Свойства" файла и быстрый просмотр показывают, что это вроде как полноценная электронная таблица с правильными данными. Но вот открыть её не получается: посте открытия... пусто (в смысле - книга не открывается).
    В чём дело?


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

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

       Вопрос по VB .NET. Есть примерно такой код:

    Private Sub b00_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b00.Click, b01.Click, b02.Click
       'здесь идёт код
    End Sub

    Вопрос: как реализовать доступ к свойствам конкретного обьекта (b00, b01, b02) через sender?


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

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

       Как при помощи ADODB.Recordset в базе Access проверить наличие конкретной таблицы, и наличие поля в этой таблице.


    Автор вопроса: Виктор

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

       База на Acces 2000. Доступ к базе на VB6 через DAO 3.6. 5 машин максимум одноврнменно работают.Всё нормально работает . Но через неопределённое время при попытки записи выдаёт сообщение: "Обновление невозможно. База открыта в
    монопольном доступе на такой-то машине". Закрыл программу на данной машине, открыл снова: всё нормально продолжает работать.
    В чём проблема?


    Автор вопроса: Толян

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

       Как сделать скроллинг обьекта picture мышью на vb6, как, например, в ACDSee?


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

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

       Как можно создавать отдельные элементы, например textbox, или shape? Только в програмном коде?


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

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

       Генерирую отчет в Word

    .....
       Word:= CreateOleObject('Word.Basic');
       Word.AppShow;
       Word.FileNew;
    .....

       Word.EmailEnvelope; // отображение конверта сообщения (панели) электронной почты
      
    Далее нужно автоматически заполнить поля "кому" и "тема", чтобы пользователям только нажать кнопку "Послать копию".


    Автор вопроса: Миша

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

       Как запускать программу сервисом в Win NT?


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

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

       Как можно програмно создать источник данных ODBC? Есть прога, которая работает с базой данных mdb через ADO, и при установке на новый комп нужно руками создавать источник данных прежде чем работать... Как бы это исправить?


    Автор вопроса: Андрей

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

       Как програмно выключить комп, система WinXP, что то обычными средствами API не получается.


    Автор вопроса: Денисов Александр

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

       Как компилировать программы в VB.NET? Слышал, что нужно сояздавать многомеговый инсталятор с множеством библиотек чтобы программу можно было запустить на другом компе. Вопрос: Как создавать инсталятор и какие библиотеки нудно туда добавить (как)?

    P.S. Microsoft Visual Studio.NET 8 (2004) Enterprise Architect 8CD.


    Автор вопроса: Сергей

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

       Помогите сделать HyperLink.




    Ответы:


    Вопрос:

       Существует ли функция перевода значения переменной типа String в обычное функциональное выражение.
    Например:

         A = "cos(x) + 7"
         x = 3.1415926
         B = Функция(A)
         
    Ответ: B = 6 (cos(3.1415926)=-1 - прим.)

    Ответ:

    Автор ответа: C...R...a...S...H

    Воспользуйся MS Excel, он тебе все посчитает.



    Ответ:

    Автор ответа: Роман

    Подключаете MS Script Control, а далее так:

    Dim MSScript As MSScriptControlCtl.ScriptControl
    Dim Y() As Double 'массив значений Y от X
    Dim X As Double
    Y(X) = Me.MSScript.Eval(_формула_)

    _формула_, например такая: cos(60), т.е. с числом, а не переменной.

    P.S. Если не понятно, пишите svs@kes.veco.ru, могу прислать прогу свою, которая строит графики.



    Ответ:

    Автор ответа: Кулаков Алексей

    Решение есть, несколько сложное.
    Взято из "Советы тем, кто программирует на VB & VBA"
    Андрей Колесов, Ольга Павлова

    Совет 269. Работа в VB с формулами, представленными в виде строковых переменных
    Если до того, как начать программировать на VB, вы уже работали с Microsoft Access
    , то вы, вероятно, ощутили нехватку в VB очень удобного метода Eval, который вычисляет
    заданную строковую переменную, как если бы она была кодом. Так, в Access вы могли легко
      вычислять математические выражения, передаваемые как строки, например выражения подобного вида:
    iResult = Eval("(2 * 3) + 5)")
    где iResult принимает значение 11.
    Чтобы получить те же возможности в VB, вам, несомненно, пришлось обратиться к сложным
      функциям синтаксического разбора строк. Или же вы были вынуждены добавить к своему
       проекту библиотеку из Access, что существенно усложняет его для реализации столь простого метода.
    Теперь, с выходом VB6, вам больше не придется прибегать к подобным ухищрениям,
      чтобы воспользоваться методом Eval, поскольку Microsoft включила его в элемент
       управления Script. С помощью этого компонента вы можете добавлять к своим приложениям
        возможность написания сценариев конечным пользователем. Потому-то для реализации данной
         возможности в состав Script и вошел метод Eval, благодаря которому вы сможете легко
          вычислять математические строковые переменные.
    Элемент управления Script находится по адресу http://msdn.microsoft.com/scripting/.
      Загрузите его и выполните следующий простой пример, где для события Click командной
       кнопки введен такой код:

    Private Sub Command1_Click()
         MsgBox txtFormula & " = " & SC1.Eval(txtFormula)
    End Sub

    Здесь элемент управления SC1 вычисляет математическую формулу, вводимую в поле текста txtFormula.

    Совет 384. Использование Script Control в VBA
    В совете 269 мы говорили об элементе управления Script Control 1.0
      (его можно скачать по адресу www.msdn.microsoft.com/scripting),
       с помощью которого можно вычислять математические выражения, заданные
        в виде символьной строки. Например, следующим образом:
    a$ = "(2 * 5) + 3"
    Result = ScriptControl.Eval(a$)
    Один из наших читателей обнаружил, что по какой-то причине этот элемент
      управления "не хочет" работать в среде VBA. Действительно, при попытке
       переместить его с панели инструментов на форму выдается сообщение об
        ошибке: "Unexpected call to method or property access".
    Почему такое происходит, мы понять не смогли, но нашли альтернативное
      решение вопроса: можно вообще обойтись без применения элемента управления,
       работая напрямую с объектом. Для этого нужно посредством команды Tools|Reference
        подключить библиотеку Microsoft Srcipt Control 1.0 и использовать такой код,
         обращаясь непосредственно к объекту:

    Sub MyScript()
        
       ' описание и создание объекта
       ' (командой Reference подключите библиотеку Microsoft Script Control)
       Dim myScriptContol As MSScriptControl.ScriptControl
       Set myScriptContol = New MSScriptControl.ScriptControl
        
       ' обязательно нужно определить языковой механизм
       myScriptContol.Language = "vbscript"
        
       ' далее работаете с объектом
       MsgBox myScriptContol.Eval("(2+5)* 6")
    End Sub



    Ответ:

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

    www.phoenixsoft.narod.ru - статья Скрипты в VB (раздел Articles). Со всеми вопросами ко мне.


    Вопрос:

       Возникает проблема…, вернее нужно: считать все данные из файла и вывести их в PopupMenu, при этом каждая строчка в файле должна соответствовать одной строчке в меню. Задача состоит в том, чтобы при нажатии на строке в меню соответствующий текст появлялся в текстовом поле.

    Ответ:

    Автор ответа: C...R...a...S...H

    Создаешь меню на форме, которое состоит из одного главного пункта mnuMain (Visible=false) и одного подпункта mnuMainSubMenu (Index=0, Visible=0).

    sub form_load()
    dim str as string
    dim i as integer
    open "c:\1.txt" for input as #1
    do until eof(1)
        line input #1,str
        i=i+1
        load me.mnuMainSubMenu(i)
        me.mnuMainSubMenu(i).caption = str
        me.mnuMainSubMenu(i).visible=true
    loop
    close #1
    end sub

    sub mnuMainSubMenu_click(Index as integer)
    txtText1.text=mnuMainsubmenu(index).caption
    end sub

    Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    me.PopupMenu nmuMain,,x,y
    End Sub


    Вопрос:

       Что за ошибка 62 Input past end of file
                     (Ввод за меткой конца файла)

    Есть res файл. Ошибка появляется из-за него. В чем суть?

    Ответ:

    Автор ответа: Денис

    Суть в том что достигнут конец даных в файле, а ты продолжаешь чтение. Чтобы этого не происходило используй проверку конца файла оператором EOF.

    open "file" for input as #1
    If EOF(1) Then СТОП
    input #1, x


    Вопрос:

       Подскажите, есть ли контролы для реализации распознования речи в проектах, и
    где их найти.

    Ответ:

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

    Есть. Можно скачать с сайта microsoft.com пакет voice sdk (называется примерно так).



    Ответ:

    Автор ответа: C...R...a...S...H

    Есть MS Speech Engine, сайт www.microsoft.com.


    Вопрос:

       Возможно ли программно удалять сообщения с почтового сервера, не получая их?

    Ответ:

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

    Подключаешься к серверу через Winsock на 110 порт.
    Затем будет диалог:
      
    S: +OK
    ***************** здороваемся
    U: USER user666
    S: +OK
    U: PASS key
    S: +OK
    ***************** просматриваем список писем
    U: LIST
         1 1369
         2 1292
         3 1882
         4 1505
    ***************** удаляем третье письмо
    U: DELE 3
    S: +OK
    ***************** обязательно (!) прощаемся, иначе письмо не сотрётся (там стоит защита от разрыва связи).
    U: QUIT


    Вопрос:

       Скажите, как из ini-файла вывести каждую строку с параметрами в опредленный текстбокс? Например, так:

    ---file1.ini---
    [Main]
    autorun = True
    TimerOn = False
    ---End---

    и в Text1.text вытащить содержимое строчки 3, то есть Timeron.

    Ответ:

    Автор ответа: Тимур Абдураимов

    Это можно сделать так:
      
    Открываешь файл для последовательного доступа, оператор Line Input #n, str
    где n - номер файла, а str - переменная в которую необходимо закатать значение строки.
    В твоём случае:

    Private Sub Command1_click()
    dim stroka as string
    Open "путь_к_файлу" for input as 1
    for i=1 to 3 'где 3 - это номер строки
         Line Input #1, stroka
    next i
    Text1.Text=stroka
    End sub



    Ответ:

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

    Вот пример кода, в моих программах пользуюсь именно таким способом.


    'Открываем файл и считываем все строки в массив readValue()
    Open App.Path + "\file.ini" For Input As 1
         Do Until EOF(1)
             i = i + 1
             Line Input #1, readValue(i)
         Loop

    Close 1

    'Применение настроек
    'Берем считанную строку и выбираем из нее правую часть, после "="(если количество символов можно заранее определить, как в большинстве случаев и есть)

    If Right(readValue(2), 1) = 1 Then Full.Visible = False Else Full.Visible = True



    Вопрос:

       Как записать данные ия буфера обмена в файл и потом загруяить этот файл в буфер обмена?

    Ответ:

    Автор ответа: Роман

    Используйте Clipboard. Например: Clipboard.GetText - возвращает текст из буфера.



    Ответ:

    Автор ответа: C...R...a...S...H

    dim str as string
    open "c:\1.txt" for output as #1
    str=Clipboard.GetText
    print #1, str
    close #1

    open "c:\1.txt" for input as #1
    input #1, str
    Clipboard.clear
    Clipboard.setText=str
    close #1



    Ответ:

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

    'Запись из буфера обмена в файл в общем виде:
    sClpb = Clipboard.GetText(vbCFText)
    Open "File.name" For Output As 1
    Print #1, sClpb
    Close 1

    'Загрузка из файла в буфер:
    Open "File.name" For Input As #1
    Do Until EOF(2)
    Line Input #2, tmp
    alltext = alltext + tmp + vbCrLf
    Loop
    Close #1


    Clipboard.SetText alltext




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

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

    наверх


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

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


    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Отписаться
    Убрать рекламу

    В избранное