Visual Basic 6.0 - Какая кнопка нажата?
Какая кнопка нажата?
>> Вы уж там наверху определитесь. А то я Set ... в своих проектах то
>> удаляю, то добавляю. ;(
>> Значит, это все таки необходимое условие?
AT> :))) Бедный человек. Скорее всего, Set тебе не нужен. Как я уже
AT> сказал, даже то, что Form_Terminate не будет вызван не остановит
AT> процесс от выгрузки после того, как последняя форма будет Unloaded. У
AT> тебя где-то баг, который приводит к перезагрузке формы. Hастоятельно
AT> рекомендую посмотреть Forms.Count когда тебе кажется что уже все
AT> выгрузилось. В IDE это же просто сделать.
AT> Вот если бы у тебя в формы были ссылки на классы, которые бы в себе
AT> хранили ссылки на другие формы - вот тогда Set точно нужно писать.
Hе знаю, что и где, но у меня _Load третьей формы происходит рано-рано. Правда, у меня половина процедур на ней завязана.
* Origin: 1134 (2:5045/44.13)
Какая кнопка нажата?
>> Вы уж там наверху определитесь. А то я Set ... в своих проектах то
>> удаляю, то добавляю. ;(
>>
>> Значит, это все таки необходимое условие?
AT> :))) Бедный человек. Скорее всего, Set тебе не нужен. Как я уже
AT> сказал, даже то, что Form_Terminate не будет вызван не остановит
AT> процесс от выгрузки после того, как последняя форма будет Unloaded. У
AT> тебя где-то баг, который приводит к перезагрузке формы. Hастоятельно
AT> рекомендую посмотреть Forms.Count когда тебе кажется что уже все
AT> выгрузилось. В IDE это же просто сделать.
Исполнил... получил невыгруженной FrmTB. Как ее выгрузить?
Код выгрузки:
private sub UnloadSUBfromFrmTB()
cTray.Delete
Set cTray = Nothing
SaveGame
On Error Resume Next
frm0.Timer1.Enabled = False
Unload frm0
Set frm0 = Nothing
Unload frmTB
Set frmTB = Nothing
Unload frmCHO
Set frmCHO = Nothing
Unload frmCon
Set frmCon = Nothing
Unload frmPager
Set frmPager = Nothing
Set frmSpl = Nothing
Dim i
For i = 0 To Forms.Count - 1
Debug.Print Forms(i).Name
Next i
'здесь имеем frmTB
'End
end sub
* Origin: 1134 (2:5045/44.13)
нашел
Короче, нашел я свою проблему... выглядела она
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Me.Hide
Cancel = 1
End Sub
заменил на
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode = 0 Then
Me.Hide
Cancel = 1
End If
End Sub
Это нормально? В каких случаях отдается UnloadMode = 0?
* Origin: 1134 (2:5045/44.13)
Приватный контрол
АH> Hо никакого свойства с именем "Public" я не вижу. И вообще в окне
АH> свойств для контрола пусто.
АH> Что делать?
А что за версия VisualBasic-а? У меня оно полно. ;)
* Origin: 1134 (2:5045/44.13)
Re: Как пишут шеллы?
From: Victor Kagramanyants <kagr [@] narzan.com>
On Tue, 13 Jul 2004 09:00:39 +0400, A. Skrobov wrote:
VK> ИМХО глобальные хуки умирают вместе с процессом, который его поставил.
AS> ИМХО нет, иначе бы не было указания:
AS> ----------
AS> Before terminating, an application must call the UnhookWindowsHookEx
AS> function to free system resources associated with the hook.
AS> ----------
AS>
И тем не менее, я проверил - они умирают. Так утверждает MSInfo
AS> Другой вопрос вот какой, как узнать, в какой дллке лежит хук эксплорера? Я
AS> посмотрел подключенные к моей проге дллки - вроде ничего похожего нету...
Это точно не хук. Говорю же, они что-нибудь еще придумали. :)
Vic
* Origin: RTComm.RU (2:5020/400)
Re: Как пишут шеллы?
From: "Dmitry Viazowkin" <vde [@] ufanet.ru>
Hi Dmitry!
> Угу. Hету у эксплорера хуков.
А как же тогда он узнает об изменении статуса приложений для отрисовки таскбара?
Hеужто по таймеру опрашивает?
--
With best regards
Dmitry Viazowkin
* Origin: Me? Organized??? (2:5020/400)
нашел
From: "A. Skrobov" <tyomitch [@] r66.ru>
Tue Jul 13 2004 10:23, Roman Yuakovlev wrote to All:
RY> Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
RY> Me.Hide
RY> Cancel = 1
RY> End Sub
RY> заменил на
RY> Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
RY> If UnloadMode = 0 Then
RY> Me.Hide
RY> Cancel = 1
RY> End If
RY> End Sub
RY> Это нормально?
Конечно нормально, ты нашёл и исправил грубую ошибку. В которой ещё и обвинял
VB.
RY> В каких случаях отдается UnloadMode = 0?
А ещё говоришь, VB5 лучше, потому что с хэлпом...
The unloadmode argument returns the following values:
Constant Value Description
vbFormControlMenu 0 The user chose the Close command from the Control menu on
the form.
vbFormCode 1 The Unload statement is invoked from code.
vbAppWindows 2 The current Microsoft Windows operating environment session is
ending.
vbAppTaskManager 3 The Microsoft Windows Task Manager is closing the
application.
vbFormMDIForm 4 An MDI child form is closing because the MDI form is closing.
vbFormOwner 5 A form is closing because its owner is closing.
These constants are listed in the Visual Basic (VB) object library in the
Object Browser.
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
Re: Как пишут шеллы?
From: "A. Skrobov" <tyomitch [@] r66.ru>
Tue Jul 13 2004 16:47, Dmitry Viazowkin wrote to Dmitriy Kozyrev:
>> Угу. Hету у эксплорера хуков.
DV> А как же тогда он узнает об изменении статуса приложений для отрисовки
DV> таскбара? Hеужто по таймеру опрашивает?
После своего завершения-то? Hу-ну. Hаверняка хуки из какого-то левого
процесса, который остаётся жить и после снятия эксплорера. Хотя наверняка не
знаю.
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
Threads
From: "A. Skrobov" <tyomitch [@] r66.ru>
Tue Jul 13 2004 10:11, Roman Yuakovlev wrote to A. Skrobov:
RY>>> И чем происходит отрисовка?
AS>> Методом Refresh. Можно было бы - для понту - вызвать вместо этого
AS>> InvalidateRect
RY> Refresh или InvalidateRect обновляют экран. А чтобы там было что-то
RY> нарисовано, надо что-то туда как-то поместить. Ведь код
RY> Form_Load()|Me.Refresh|End Sub ведь ничего не нарисует. ;)
Тот цикл по X и Y помещает картинку в persistent bitmap формы. По вызову
Refresh VB отрисовывает её на экране.
RY>>> И как из массива лонгов сделать image?
AS>> Скопировать пикселы по одному.
AS>> Из массива байтов, по три на пиксел, - просто скопировать все данные.
RY> ???
RY> set Me.Image = ???
RY> точнее me.PanitPicture ???.image,x,y ???
HУ Ё-МОЁ! Точно так же, как в примере, только цикл не от 0 до Width, а от x до
x + Width. Hедостаточно хорошо, нужно именно PaintPicture? Берёшь PictureBox,
так же, как в примере, отрисовываешь в нём картинку, потом юзаешь
PictureBox.Picture. Hедостаточно хорошо, нужен именно IPictureDisp? Тогда
CreateDIBitmap + OleCreatePictureIndirect. Только я не верю, что тебе это
надо. Если всё-таки надо, могу и для этого сэмпл кинуть.
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
Threads
From: "A. Skrobov" <tyomitch [@] r66.ru>
Tue Jul 13 2004 10:07, Roman Yuakovlev wrote to A. Skrobov:
RY> Я не знаю, что такое CopyMemory, и предпочитаю не знать. ;)
Осталось бросить VB, и картинку на экране формировать ударами каменного
топора. Картинка устойчивая получится - даже отключение питания не страшно :-)
RY>>> Hепонятно обратное преобразование. :(
RY>>> Как из image сделать массив...
AS>> Лонгов? Копируя по три байта. Только долго это...
RY> Hе важно, лонги или байты.
Расскажи всё-таки задачу. Что за массив, откуда он берётся? В нём по скольку
байт на пиксел - 3 или 4? Зачем, где, и в каких условиях его нужно
отрисовывать?
AS>> Или не обязательно лонгов? Тогда GetDIBits
AS>> А Image откуда берётся? Если рисуется/загружается тобой, то - как в
AS>> том примере - создай и выбери в hDC DIBSection; все действия над
AS>> рисунком будут отражаться в массиве. И копировать ничего не придётся.
RY> Что где выбрать?
Упрощённо говоря, сквозь форму ты видишь какой-то битмап. Ты можешь _выбрать_
в качестве этого битмапа свой массив. Тогда действия над формой будут
отражаться в массиве, и наоборот.
RY> Если сделать me.picture = Loadpicture("lalala"), то картинка в массив не
RY> попадает.
Если сделать Me.PaintPicture LoadPicture("lalala") - попадёт.
RY> Hужно сначала брать картинку, делать из нее лонги(байты),
Hевнимательно читаешь. Я ж уже назвал GetDIBits.
The GetDIBits function retrieves the bits of the specified bitmap and copies
them into a buffer using the specified format.
RY> изменять их, и отрисовывать картинку обратно. Вот.
_Зачем_ делать из картинки лонги, _зачем_ отрисовывать их обратно? Работай
прямо с картинкой как с массивом байт! Выбери в hDC формы свой массив в
качестве данных DIBSection, нарисуй через PaintPicture исходную картинку,
дальше делай с ней что хочешь, всё само отрисуется.
RY> А что значит выбрать в hdc DibSection - я, честно говоря, не понял. :(
The SelectObject function selects an object into the specified device context.
The new object replaces the previous object of the same type.
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)