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

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


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

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


VBNet VBMania
Ссылки:

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

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

       Попытаюсь догнать график.. А-то рассылка на неделю отстаёт. Непорядок :)
    Читайте!


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




    Как выбрать случайную букву?

    Вопрос:

    Как из набора букв "а,б,в,г" случайным образом выбрать одну?

    Ответ:

    Const strS as String = "абвг" ' 4 символа в исходной строке
    n=Int(RND*4)+1
    strOut = Mid$(strS, n, 1)

        Mark

    наверх


    Что такое Младшие и Старшие слова?

    Вопрос:

    Иногда в МСДН проскакивают такие слова: The low-order word of lParam specifies the new width of the client area.
    The high-order word of lParam specifies the new height of the client area.

    Как это понять и как получить эти старшие и младшие слова?

    Ответ:

    Есть несколько путей:
    1. создать структуру
    type DOUBLEWORD
        loword as integer
        hiword as integer
    end type

    потом обьявить переменную и скопировать в неё
    dim dw as DOUBLEWORD

    CopyMemory(dw,inp,4), где inp это входящея переменная типа long

    2. Сдвигом
    dim loword as integer
    dim hiword as integer

    loword=(inp and 65535)
    hiword=(((inp-loword)/65535))' кажется так, я неуверен

    слово(word) длинна 16 бит, на вб это integer
    двойное слово (dword, doubleword) длинна 32 бит, на вб это long

    соответственно чтобы получит старшее и младшее слово нужно long
    разбить на два integer.

        Ivan Rozhuk

    наверх


    Каким образом можно запретить "всплывающее" по правой кнопке меню в Internet Control?

    Вопрос:

    Подскажите, пожалуйста, как сделать так, что бы событие возникало при нажатие трех клавиш. Например: shift+ctrl+m.

    Ответ:

    Создаешь процедуру MouseDown (мышь) или KeyDown (клава) для нужного объекта Например для формы (свойство формы "KeyPreview" должно быть "True") :
     
      Мышь :
      Sub Form_MouseDown (Button As Integer, Shift As Integer, x As Single, y As Single)
       ' Button это код нажатой на мышке клавиши
       ' 1 - левая кнопка
       ' 2 - правая кнопка
       ' 4 - средняя кнопка
       ' Shift это код нажатой на клавиатуре клавиши
       ' 1 - Shift
       ' 2 - Ctrl
       ' 4 - Alt
      If Button = 2 And Shift = 6 Then frmAbout.Show vbModal
       ' Если над формой нажать правую мышки , Ctrl и Alt ( 2+4=6), то откроется форма
      End sub

      Клава :
      Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
      ' KeyCode это код нажатой клавиши
      ' vbKeyF1 - "F1"
      ' vbKeyF2 - "F2"
      ' vbKeyM - "M"
      ' vbKeyX - "X"
      ' и так далее
      ' Shift это код нажатой на клавиатуре клавиши
      ' 1 - Shift
      ' 2 - Ctrl
      ' 4 - Alt
      If KeyCode= vbKeyM And Shift = 6 Then frmAbout.Show vbModal
      ' Если над формой нажать "M" , Ctrl и Alt ( 2+4=6), то откроется форма
       End Sub

    Vamp

    наверх


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

    Вопрос:

    Есть форма её 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)

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

    наверх


    Как в TreeView установить состояние редактирования?

    Вопрос:

    Подскажите как програмно можна установить Node TreeView в состояние редактирования как при клике мышью ?

    Ответ:

    Set tvwYourView.SelectedItem = YourNode
    tvwYourView.StartLabelEdit

        Andrey Shchekin



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

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

    Вопросы:


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

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

       Как узнать, какой из Columbs'ов в ListView нажат, или как упорядочивать значения в нажатом столбце?


    Автор вопроса: Олег

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

       Как Mime - закодировать/раскодировать файл? Если есть ActiveX, то шлите, пожалуйста, по почте.


    Автор вопроса: Ralph Sitdicoff

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

       Я работаю над интерфейсом БД, содержащей около полумиллиона записей и содержащей 2 таблицы (*.dbf).
    Выборка по некоторым критериям занимает достаточное время. Хотелось бы чтобы на время выборки включался ProgressBar, который или реально отслеживал бы выборку, или, хотя-бы, эмулировал в цикле заполнение и сброс ProgressBar, что-бы пользователь знал, что программа не висит. Я видел такое в некоторых программах.
    Вот пример кода:

    SQL1 = "SELECT . . . FROM . . . INNER JOIN STREETS ON . . . WHERE " & crit
    ' Где crit - критерий поиска
    Set rec = db.OpenRecordset(SQL1)

    Form1.Show 'Вызов формы с предупреждением "Ждите, идет поиск"
    Form3.Show vbModal 'Вызов формы 3 показа результата поиска
    Unload Form1


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

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

       Можно ли вывести список (например в List1) всех компов, подсоединенных по LAN?
    Чтобы получилось что-то вроде:
    ...
    Определение компьютеров
    for i=1 to list1.ListCount
    отправка данных по адресу "\\" & list1.list(i) & "\c"
    next i
    ...


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

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

       Для проверки коннекта с инетом я использую следующий код:

    'В модуль
    Private Declare Function InternetCheckConnection Lib "wininet.dll" Alias "InternetCheckConnectionA" (ByVal lpszUrl As String, ByVal dwFlags As Long, ByVal dwReserved As Long) As Long
    Private Const FLAG_ICC_FORCE_CONNECTION As Long = &H1
    Public Function GetInternetConnectStatus(ByRef strTarget As String) As Boolean
        On Error Resume Next
        If InternetCheckConnection(strTarget, FLAG_ICC_FORCE_CONNECTION, 0&) = 0 Then Exit Function
        GetInternetConnectStatus = True
    End Function

    'В форму
    Private Sub Command1_Click()
         If GetInternetConnectStatus("http://vbnet.ru/") Then Caption = "Connect OK" Else Caption = "Connect Error"
    End Sub

    А как пропинговать компьютер в локальной сети? Изменяю адрес "http://vbnet.ru/" на "c:\" чтобы пропинговать свой комп, Windows выдает ошибку и закрывает VB... В локалке не проверял, но предпологаю, что эффект будет тот же...


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

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

       Как правильно передать на server MS SQL 2000 stored procedure с параметрами русского шрифта, которые получаются из ASP?
    Я в mssql ставлу nvarchar и передаю на сервер
    string ="declare @client_id as integer exec new_client Иван,Иванов,@client_id output select @client_id"
    Моя цель сделать верный insert в таблицу.
    В ASP устанавливаю codepage=866 и charset=windows-1251.


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

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

       Как можно, предельно оптимизированно, таскать по PictureBox многоугольник? (желательно что бы последний был полупрозрачным.)


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

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

       Как измерить количество входящего и исходящего траффика в локальной сети?


    Автор вопроса: Макс

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

       Помогите… В контекстном меню к файлам с расширением .exe я добавил нужный пункт. И теперь при его выборе открывается моя прога. А как теперь быть, чтобы при открытии моей проги (например в текстовом поле) возвращался путь к .exe файлу, в контекстном меню которого был произведен щелчок на соответствующем пункте.


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

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

       Нуждаюсь в помощи. Суть задачи в следующем:
      
    Есть стенд испытания центробежных насосов (испытание в реальном режиме путём циклической перекачки масла с постепенным закрытием управляемой заслонки и снятием показаний напора и расхода).
    В начале испытания я строю заводские графики «напор-расход, мощность-расход» для построения использую коэффициенты полинома, которые получил с использованием Excel.
    В процессе испытания на график заводских характеристик прорисовываются точки реальных показаний по расходу-напору и по расходу-мощности для визуализации процесса испытания (данные с АЦП).
    Необходимо получить коэффициенты полинома для тестовых кривых т.к. это наиболее удобный способ сохранения тестовых кривых в архиве испытаний (сохранять в виде точек не рационально).
    Нужен алгоритм подобный тому, љкоторый реализован в Excel, для расчета коэффициентов полинома.


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

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

       Написал я программу на VB. Там работа с базой данных на Аксессе. Всё работало ништяк на всех компах (они в сети, а база на сервере). Но тут появился новый компутер... Короче прога состоит из мэйнформа и чайлдов. Когда мэйн открывается, то идёт подсоединение к базе данных. Если соединение не проходит, то открывается комонДиалог открытия файла (то есть юзер сам указывает путь к базе данных).
         Когдя я установил программу и запустил её на новом компе, то всё было, как обычно (то есть соединение с базой данных установил без проблем). Но как только я открываю какой-нибуд чайлд, где уже начинаются разные запросы, он мне выдаёт "out of memory"...
         Комп ноутбук с процом сентрино и XP home edition. На других окнах всё пашет нормально... В чём проблема?




    Ответы:


    Вопрос:

       Как подсчитать c=(12^121) mod 247, я все перепробовал, кроме цикличного вычитания 247.

    Ответ:

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

    Function AInNModB(a, n, b)
         AInNModB = 1
         For i = 1 To n
             AInNModB = (AInNModB * a) Mod b
         Next
    End Function
      
    ?AInNModB(12,121,247)
      12



    Ответ:

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

    Когда-то в МК (Мой Компьютер) www.mycomputer.ua была статья по поводу подсчета больших чисел. Основа идеи была в подсчете "школьным" способом (столбики...).Такми образом можно посчитать числа любой длины. Если очень надо поищи на сайте, там есть архив статей.


    Вопрос:

       Ребят вопрос по части политики распространения коммерческих продуктов. Вобщем, поступил к нам заказ от америкосовской фирмы создать программу (не важно какую), которую в будущем эта самая фирма будет использовать в коммерческих целях.

    Пожалуйста, если кто знает - ответьте на такой вопрос: разрешает ли соглашение Microsoft использовать программные VB-продукты в коммерческих целях. Допустим, что все созданное в VB разрешается продовать... А если используется компонент MSCOMCTL.ocx, к примеру? Сами знаете вопрос интересный и предлогаю его обсудить :)

    Ответ:

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

    Каждый компонент не входящий в лицензии VB LE; VB Pro; VB EE. Подлежит лицензированию от M$ или от сторонних компаний.



    Ответ:

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

    Насколько я знаю, большинство компонентов распространяются бесплатно, только вот какие конкретно...
    Можно попробовать покопать в такую сторону: если MS свободно распространяет хотя бы один пакет с искомым компонентом (например Service Pack какой-нибудь), делаем выводы...



    Ответ:

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

    Я тоже как-то интересовался таким вопросом и вот что выяснил:
    Программу созданную на распространять можно(нельзя сам VB) *.ocx тоже можно распространять, если на них не распространены авторские права. (иначе их можно купить вместе с исходниками у создателя.) Однако если у продавца нет соответствующих документов о регистрации авторского права, то распространение идет свободно. В общем толчок я тебе дал, это чисто юридический вопрос, поэтому проконсультируйся у профов в этом деле.


    Вопрос:

       Можно ли делать label, textbox и др элементы. немного прозрачными на форме. Если да то как?

    Ответ:

    Автор ответа: Markelov Eduard

    Используй SetLayeredWindowAttributes.


    Вопрос:

       Может кто-нибудь поможет решить задачу.
    Даны итоги выборов в думу в городе: по К округам известно число голосовавших за представителей М партий, а также число не участвовавших в голосовании по каждому округу.
    Выборы считаются состоявшимися, если в головании приняло участие не менее Р% избирателей. Определить, в каких округах выборы состоялись.

    Ответ:

    Автор ответа: Александр IV

         Что - то мне твоя задача оччччень напоминает олимпиадную. А раз так то должен быть указан формат входного и выходного файлов. Ты ничего не указал, поэтому я придумал "свои правила".
      
    Формат входного файла (in.dat):
         N округа
         сколько голосовало
         сколько не голосовало
         -//-

    Считываем данные в переменные a, b и с соответственно. Для простоты восприятия решение на великом и могучем Кью Бейсике.
      
    SCREEN 12
    CLS
    OPEN "in.dat" FOR INPUT AS #1
            
      DO UNTIL EOF(1)
             INPUT #1, a
             INPUT #1, b
             INPUT #1, c
         LOCATE a + 1, 5: PRINT a
         LOCATE a + 1, 10: PRINT " округ"
       IF (b / ((b + c) / 100)) < 25 THEN LOCATE a + 1, 22: COLOR 4: PRINT " не состоялись": COLOR 15: ELSE LOCATE a + 1, 22: PRINT " состоялись"
       LOCATE a + 1, 36: PRINT (b / ((b + c) / 100))
      LOOP
    CLOSE
      
    На экран выводится номер округа, состояние выборов и явка избирателей в процентах. Чтобы выборы состоялись явка должны быть >= 25%



    Ответ:

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

    Dim M As Byte 'кол-во партий (зачем это я не понял)
    Const K = 10 'кол-во округов
    Const P = 60 'необх. процент проголосовавших
    Dim Y(1 To K) As Integer 'в каждом районе людей: проголосовало
    Dim N(1 To K) As Integer 'воздержалось
    Dim I as Byte 'счетчик
    Dim S as Integer 'общее число людей
      
    For I =1 to K 'считаем по всем округам
    S=(Y(I) + N(I))*P/100 'необх. кол-во голосующих
    IF S<=Y(I) THEN Msgbox "В " & "-ом округе" & _
    " проголосовало более " & P & "%" 'проверка кол-ва голосов
    'и вывод отчета
    Next I
      
    'P.S. Данные по кол-ву людей должны быть уже введены



    Ответ:

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

    Если я понял задачу то:
    M(2,1)-число проголосовавших за вторую партию в 1 округе

    K(1)=M(1..n,1) - число всех проголосовавших в 1 округе
    N(1)-число НЕ проголосовавших в 1 округе
    X=(K(1)*100)/(K(1)+N(1)) 'Получаем процент проголосовавших
    Сравниваем с Р и все


    Вопрос:

       Как можно с помощью vb 6.0 узнать, есть ли определённый компьютер в сети?

    Ответ:

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

    1. Пропинговать его. Сработает, если нет запретов на протокол ICMP.
    2. Постучать в какой-нибудь порт. (Для Windows-машин - 135 или 139).


    Вопрос:

       Есть в общем форма, на этой форме находится одно поле для ввода (field1) и список содержащее определённое значение (spisok), как сделать так что при обновлении Field, поле списка spisok1 стало активным ?

    Ответ:

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

    В процедуре обновления Field пишешь:

    spisok.setfocus




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

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

    наверх


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

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


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


    В избранное