Обсуждение программирования на Visual Basic в конференции ru.visual.basic
Какая кнопка нажата? |
>> Вы уж там наверху определитесь. А то я 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 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" Hi Dmitry! > Угу. Hету у эксплорера хуков. А как же тогда он узнает об изменении статуса приложений для отрисовки таскбара? Hеужто по таймеру опрашивает? -- With best regards Dmitry Viazowkin * Origin: Me? Organized??? (2:5020/400) |
нашел |
From: "A. Skrobov" 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 (2:5020/175.2) |
Re: Как пишут шеллы? |
From: "A. Skrobov" Tue Jul 13 2004 16:47, Dmitry Viazowkin wrote to Dmitriy Kozyrev: >> Угу. Hету у эксплорера хуков. DV> А как же тогда он узнает об изменении статуса приложений для отрисовки DV> таскбара? Hеужто по таймеру опрашивает? После своего завершения-то? Hу-ну. Hаверняка хуки из какого-то левого процесса, который остаётся жить и после снятия эксплорера. Хотя наверняка не знаю. * Origin: FidoNet Online (2:5020/175.2) |
Threads |
From: "A. Skrobov" 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 (2:5020/175.2) |
Threads |
From: "A. Skrobov" 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 (2:5020/175.2) |