Как делать DropDown Button в Васике? (Это такая выпадающая кнопка, типа Back в IE)
Ответ:
Делаешь в ToolBar кнопку, задаешь ей стиль 5 - tbrDropdown.
Для анализа выбора обрабатывай Toolbar1_ButtonMenuClick
Можно динамически добавлять и удалять пункты:
Поясните как работать с функцией API:
FindWindow, EnumWindow.
Мне нужно найти идентификатор окна.
Ответ:
Функция может искать хендл окна либо по заголовку, либо по имени класса, в
зависимости от того, что известно. Ну и, естественно, хендл надо получить:
Dim lMyHandle As Long
lMyHandle = FindWindow(vbNullString, "Калькулятор")
' если знаем заголовок
lMyHandle = FindWindow("ExploreWClass", vbNullString)
' найдешь окно Проводника
А EnumWindows используется для того, чтобы перебрать все окна, существующие
в данный момент.
Private Sub Form_Load()
Me.AutoRedraw = True
'call the Enumwindows-function
EnumWindows AddressOf EnumWindowsProc, ByVal 0&
End Sub
'Это помещаешь в модуль
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal
lParam As Long) As Boolean
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal
hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias
"GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As
Boolean
Dim sSave As String, Ret As Long
Ret = GetWindowTextLength(hwnd)
sSave = Space(Ret)
GetWindowText hwnd, sSave, Ret + 1
Form1.Print Str$(hwnd) + " " + sSave
EnumWindowsProc = True ' продолжение перебора
End Function
Есть панель Panel1, на ней два текстбокса. Как сделать
так, чтобы при появлении текста во втором текстбоксе,
снизу создавался третий.
Не делался visible, а появлялся, создавался.
Ответ:
'Вверху там где объявления переменных уровня класса
Friend WithEvents txtNumber As System.Windows.Forms.TextBox
'В процедуре, в которой создаёшь текстбокс
txtNumber=New System.Windows.Forms.TextBox
txtNumber.Visible=true
'Устанавливаем положение и размеры
txtNumber.Left=...
txtNumber.top=...
txtnumber.width=...
txtnumber.height=...
Павел Сурменок
Можно унаследовать предыдущий и делать все это с массивом.
redim pres...
txtNumber(index)=New txtNumber(index-1)
txtNumber(index).top=txtNumber(index-1).top + сколько надо
а чтоб появился надо добавить его в соответствующую коллекцию
Controls
и еще не забыть обработчик навесить, чтоб под ним тоже могло появляться.
Щелкни правой кнопкой мышки по форме: выбери пункт Menu Editor
В Caption вводишь названия пунктов своего меню, в Name - имя-идентификатор
для каждого пункта, например:
Caption = Файл
Name = mnuOpen
Для создания каждого последующего пункта щелкай на Next
Если в пункте меню должны быть еще раскрывающиеся подпункты
щелкай на стрелочку вправо (появится ....)
Для создания разделителя в Caption вводи - (знак минус)
Вот и все твое меню готово. Жми ОК!
Если меню должно быть всплывающим в твоей программе
(скажем,появляться по нажатию правой кнопки мыши на форме)
тогда первым пунктом добавь что-то типа Name = mnuPopUp, и сними
флажок Visible,
а все остальные пункты сделай подчиненными данному пункту (вложенными)
и вызывай следующим образом
Sub Form_MouseDown(Button As Integer,Shift As Integer, _
X As Single,Y As Single)
if button =2 then
popupmenu mnuPopup
end if
End Sub
Все события при щелчке на пунктах меню обрабатываются в MenuName_Click
Сергей Л.
Вопрос/Ответ
Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.
Нужно в строке "<--+7123456789" или "+7123456789" оставить только цифры. Можно конечно обрезанием, но кажется есть такой оператор который сам оставляет только цифры.
Наблюдаются проблеммы с данной функцией:
ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0 (я взял пример отсюда Visual Basic: новости сайтов, советы, примеры кодов. Выпуск 93)
Когда я запускаю проект из окна редактора все нормально, но как только я компилю проект в exe файл и запускаю его то виндовс говорит что программа выполнила некорекную операцию и будет закрыта. Вы не подмкажете в чем туту дело?
Столкнулся с такой проблемой. Написал программу на VB6. Установлена на 50 компьютерах. Время от времени на некоторых комп-ах возникает ошибка. Определил, что возникает она из-за того, что свойство формы ScaleHeight принимает значение 0. При попытке установить свойство формы принудительно, т.е. пишу frmDisplay.ScaleHeight = 10000, возникает ошибка. Такое ощущкение будто программа в каой-то момент перестает понимать это свойство. Лечится только переустановкой программы. Может кто-нибудь сталкивался с подобной проблемой.
Короче, такое дело... Хочу получить хэндл окон (textbox и listbox) в чужом приложении. Для этого ставлю хук на мышь:
hHandle = SetWindowsHookEx(WH_MOUSE, AddressOf GetMouse, App.hInstance, 0)
Почему при переходе на другое приложение хук отключается? Даже если перейду обратно на свое, все равно не работает? Если вояможно, как это исправить? И если кто-нить янает, может, как-нибудь яамутить получение хэндла как в SpyXX?
Подскажите как в Access'е из VB отправлять информацию на матричный принтер, т.е. - есть ли какая-нибудь функция, вроде:
PrintString("Hello World"), которая указанную строчку запишет в LPT-порт.
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
Private Sub Command_Click()
Dim KeybLayoutName As String
KeybLayoutName = String(9, 0)
GetKeyboardLayoutName KeybLayoutName
'409 for eng, 419 for rus
MsgBox "KeyBoard Layout Number is " & CStr(CLng(Left$(KeybLayoutName, InStr(1, KeybLayoutName, Chr(0)) - 1)))
End Sub
Вопрос:
Как получить полный путь к дочернему элементу в TreeView?
Поскольку неизвестно, в какой форме нужен выходной результат (массив, строка
ключей и т.п.), то предлагаю процедуру, которая проходит весь нужный путь.
Скорректируй её так, чтобы получить необходимый выходной результат. Место
помечено.
' Equates to retrieving the hItem of the treeview's first item with
' TVM_GETNEXTITEM/TVGN_ROOT. (Treeview1.Nodes(1)
' or Treeview1.Nodes(1).Root do *not* necessarily return the
' treeview's very first node!)
Public Function GetFirstTVNode(objTV As TreeView) As Node
Dim nod As Node
On Error GoTo NoNodes
' Will err here if there are no treeview nodes
Set nod = objTV.Nodes(1)
' Get the first node's highest parent node
Do While (nod.Parent Is Nothing) = False
Set nod = nod.Parent '======== здесь впору вставить необходмые
строку/строки, достраивающию результат на каждом шаге
Loop
' Return the highest parent node's first sibling
Set GetFirstTVNode = nod.FirstSibling
В библиотеке (в начале) должно быть событие Event MyEvent() которое эта библиотека ожидает. В принципе не обязательно чтоб имя события совподало с именем твоей функции.
Создаешь проект ActiveX DLL в классе пишешь код своей функции, выбираешь MAKE MyClass.DLL в другом проекта выбираешь меню Preferense там ищешь свою библиотеку или указываешь на нее. Ставишь галочку. В коде проекта пишешь Dim aa as new MyClass.Class1. Потом пишешь aa.Shutdown. Или Dim aa as MyClass.Class1, Set aa=new MyClass.Class1, aa.Shutdown
Это чудо ПО ШАГАМ даже изложено в том же MSDN. Смотри раздел "Creating an ActiveX DLL".
Также примеры этого даются самой МС с разных боков: "ActXDoc (ActXDoc.vbp)" & CallDlls "(CallDlls.vbp)".
В разделе "Accessing DLLs and the Windows API" соответствующие варианты. Сколько раз говорят: читайте, читайте...
Можете заполнить эту форму, либо отослать вопрос СЮДА
Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.