Иногда в МСДН проскакивают такие слова:
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.
Каким образом можно запретить "всплывающее" по правой кнопке меню в 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
Почему при запуске копии программы она перестает ловить сочетания клавиш?
Вопрос:
Есть форма её 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)
Я работаю над интерфейсом БД, содержащей около полумиллиона записей и содержащей 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
Можно ли вывести список (например в List1) всех компов, подсоединенных по LAN?
Чтобы получилось что-то вроде:
...
Определение компьютеров
for i=1 to list1.ListCount
отправка данных по адресу "\\" & list1.list(i) & "\c"
next i
...
Для проверки коннекта с инетом я использую следующий код:
'В модуль
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... В локалке не проверял, но предпологаю, что эффект будет тот же...
Как правильно передать на 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.
Помогите… В контекстном меню к файлам с расширением .exe я добавил нужный пункт. И теперь при его выборе открывается моя прога. А как теперь быть, чтобы при открытии моей проги (например в текстовом поле) возвращался путь к .exe файлу, в контекстном меню которого был произведен щелчок на соответствующем пункте.
Есть стенд испытания центробежных насосов (испытание в реальном режиме путём циклической перекачки масла с постепенным закрытием управляемой заслонки и снятием показаний напора и расхода).
В начале испытания я строю заводские графики «напор-расход, мощность-расход» для построения использую коэффициенты полинома, которые получил с использованием Excel.
В процессе испытания на график заводских характеристик прорисовываются точки реальных показаний по расходу-напору и по расходу-мощности для визуализации процесса испытания (данные с АЦП).
Необходимо получить коэффициенты полинома для тестовых кривых т.к. это наиболее удобный способ сохранения тестовых кривых в архиве испытаний (сохранять в виде точек не рационально).
Нужен алгоритм подобный тому, љкоторый реализован в Excel, для расчета коэффициентов полинома.
Написал я программу на VB. Там работа с базой данных на Аксессе. Всё работало ништяк на всех компах (они в сети, а база на сервере). Но тут появился новый компутер... Короче прога состоит из мэйнформа и чайлдов. Когда мэйн открывается, то идёт подсоединение к базе данных. Если соединение не проходит, то открывается комонДиалог открытия файла (то есть юзер сам указывает путь к базе данных).
Когдя я установил программу и запустил её на новом компе, то всё было, как обычно (то есть соединение с базой данных установил без проблем). Но как только я открываю какой-нибуд чайлд, где уже начинаются разные запросы, он мне выдаёт "out of memory"...
Комп ноутбук с процом сентрино и XP home edition. На других окнах всё пашет нормально... В чём проблема?
Ответы:
Вопрос:
Как подсчитать c=(12^121) mod 247, я все перепробовал, кроме цикличного вычитания 247.
Когда-то в МК (Мой Компьютер) www.mycomputer.ua была статья по поводу подсчета больших чисел. Основа идеи была в подсчете "школьным" способом (столбики...).Такми образом можно посчитать числа любой длины. Если очень надо поищи на сайте, там есть архив статей.
Вопрос:
Ребят вопрос по части политики распространения коммерческих продуктов. Вобщем, поступил к нам заказ от америкосовской фирмы создать программу (не важно какую), которую в будущем эта самая фирма будет использовать в коммерческих целях.
Пожалуйста, если кто знает - ответьте на такой вопрос: разрешает ли соглашение Microsoft использовать программные VB-продукты в коммерческих целях. Допустим, что все созданное в VB разрешается продовать... А если используется компонент MSCOMCTL.ocx, к примеру? Сами знаете вопрос интересный и предлогаю его обсудить :)
Насколько я знаю, большинство компонентов распространяются бесплатно, только вот какие конкретно...
Можно попробовать покопать в такую сторону: если MS свободно распространяет хотя бы один пакет с искомым компонентом (например Service Pack какой-нибудь), делаем выводы...
Я тоже как-то интересовался таким вопросом и вот что выяснил:
Программу созданную на распространять можно(нельзя сам VB) *.ocx тоже можно распространять, если на них не распространены авторские права. (иначе их можно купить вместе с исходниками у создателя.) Однако если у продавца нет соответствующих документов о регистрации авторского права, то распространение идет свободно. В общем толчок я тебе дал, это чисто юридический вопрос, поэтому проконсультируйся у профов в этом деле.
Вопрос:
Можно ли делать label, textbox и др элементы. немного прозрачными на форме. Если да то как?
Может кто-нибудь поможет решить задачу.
Даны итоги выборов в думу в городе: по К округам известно число голосовавших за представителей М партий, а также число не участвовавших в голосовании по каждому округу.
Выборы считаются состоявшимися, если в головании приняло участие не менее Р% избирателей. Определить, в каких округах выборы состоялись.
Что - то мне твоя задача оччччень напоминает олимпиадную. А раз так то должен быть указан формат входного и выходного файлов. Ты ничего не указал, поэтому я придумал "свои правила".
Формат входного файла (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%
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. Данные по кол-ву людей должны быть уже введены
Если я понял задачу то:
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 стало активным ?