Как сделать, чтобы форма всегда была на первом плане? Т.е.
если я открываю, напримеру, проводник, то моя программа все равно
должна бвть поверх окна проводника.
Ответ:
На 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). Когда нажмешь
первую кнопку, форма поверх всех
Вот все мы знаем, что если сделать программку на VB то чтоб ее поставить
запустить нужно сделать инсталляцию. То есть никакого софта, который
должен
запускаться "втихаря" не написать. Но может есть какой способ не делать
инсталляху, а сделать ехешник (может даже в него напихать как-то
библиотеки)
который потом должен незаментно у кого надо запуститься?
Правильней: "ДекОмпилятор". В принципе, любой декомпилятор выполняет
работу, обратную работе компилятора. Если компилятор из исходников
собирает OBJ/EXE файл, то декомпилятор, соответственно, должен из
OBJ/EXE файла плучить исходники.
Ни одного более-менее рабочего декомпилятора для VB я не видел.
Формы выдрать ещё реально, а вот код...
Почему при запуске копии программы она перестает ловить сочетания клавиш?
Вопрос:
Есть форма её 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)
Задумал такую фишку. В форму встраивается объект "Лист Microsoft Excel". В ячейки его активного листа программно пишется что надо. Затем объект сохраняется в файле. И вот что получается. "Свойства" файла и быстрый просмотр показывают, что это вроде как полноценная электронная таблица с правильными данными. Но вот открыть её не получается: посте открытия... пусто (в смысле - книга не открывается).
В чём дело?
База на Acces 2000. Доступ к базе на VB6 через DAO 3.6. 5 машин максимум одноврнменно работают.Всё нормально работает . Но через неопределённое время при попытки записи выдаёт сообщение: "Обновление невозможно. База открыта в
монопольном доступе на такой-то машине". Закрыл программу на данной машине, открыл снова: всё нормально продолжает работать.
В чём проблема?
Как можно програмно создать источник данных ODBC? Есть прога, которая работает с базой данных mdb через ADO, и при установке на новый комп нужно руками создавать источник данных прежде чем работать... Как бы это исправить?
Как компилировать программы в VB.NET? Слышал, что нужно сояздавать многомеговый инсталятор с множеством библиотек чтобы программу можно было запустить на другом компе. Вопрос: Как создавать инсталятор и какие библиотеки нудно туда добавить (как)?
P.S. Microsoft Visual Studio.NET 8 (2004) Enterprise Architect 8CD.
Решение есть, несколько сложное.
Взято из "Советы тем, кто программирует на 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
www.phoenixsoft.narod.ru - статья Скрипты в VB (раздел Articles). Со всеми вопросами ко мне.
Вопрос:
Возникает проблема…, вернее нужно: считать все данные из файла и вывести их в PopupMenu, при этом каждая строчка в файле должна соответствовать одной строчке в меню. Задача состоит в том, чтобы при нажатии на строке в меню соответствующий текст появлялся в текстовом поле.
Создаешь меню на форме, которое состоит из одного главного пункта 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 файл. Ошибка появляется из-за него. В чем суть?
Подключаешься к серверу через 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-файла вывести каждую строку с параметрами в опредленный текстбокс? Например, так:
Открываешь файл для последовательного доступа, оператор 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
Вот пример кода, в моих программах пользуюсь именно таким способом.
'Открываем файл и считываем все строки в массив 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
Вопрос:
Как записать данные ия буфера обмена в файл и потом загруяить этот файл в буфер обмена?