|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Application.Minimize не работает?!
Привет, проблема такова:
Есть форма, обычная такая, но без бордера: BorderStyle := bsNone (с другими бордерами тоже проблема такая же), есть панелька, на ней расположены две кнопки: закрыть и свернуть При наджатии на закрыть все ок - вызывается метод Close для формы, а вот при нажатии на свернуть, происходи нечто непонятное: Код на кнопке такой : Код:
procedure BtnOnClick... begin Application.Minimize; end; Пробовал Код:
ShowWindow(Handle,SW_MINIMIZE); Код:
ShowWindow(Handle,SW_MINIMIZED); Пробовал Код:
SendMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0); Код:
SendMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0); Код:
DefWindowProc(FHandle, WM_SYSCOMMAND, SC_MINIMIZE, 0); Вобщем, если кто знает, подскажите, как апишными методами нормально свернуть окно не используя SC_MINIMIZE. Спасибо. THE CRACKER IS OUT THERE |
#2
|
||||
|
||||
Странно, у меня Application.Minimize работает нормально, какой бы бордер у формы ни был...
|
#3
|
||||
|
||||
В том-то и проблема,что я создал пустой проект, настроил в нем форму абслоютно так же, как и в том, в котором не работает Application.Minimize, и все работает.
Если ставлю у той формы бордер обычный,то все нормально сворачивается (только кнопкой на виндовзком бордере, моей кнопкой не сворачиватся) =( Это какой-тотсранный баг с Delphi, похоже, т.е. в том проекте не работает именно API функция, которая используется с SC_MINIMIZE. Вот я и думаю, есть ли какой альтернативный путь свернуть окно? Уже второй день мучаюсь, надеюсь, кто-нибудь поможет! Спасибо! THE CRACKER IS OUT THERE |
#4
|
||||
|
||||
Спасибо, Decoding, что отозвался, хоть не проигнорил. Хотел тебе повысить репутацию, но она не повышается=(
Вобщем ясам разобралсяс косяком,так и не поняв почему он был. Создал пустой проект,скопировализглючного в него все контролы иту самую кнопку, что не пахала, и создал еще одну кнопку - новую,на нее повесил код Application.Minimize. Так вот, после переноса всех контролов в новом проекте сворачивание по тойстарой кнопке тоже перестало работать!!! Я попробовал свернуть по новой кнопке (вэтих кнопках - код одинаковый 1 в 1 - Application.Minimize) и свернулось!!! И тут я понял, что не работает только почему-то обработчик старой кнопки (хотя все бряки сраотали вполнеуспешно, даже трэйсил внутрь дельфового кода, что свидетельствовало о том, что компилер не заигнорил обработчик старой кнопки и исправно его выполнял). Поставил таймер с задержкой 1мс и при нажатии на старую кнопку врубаю этот таймер, в котором такой код: Timer.Enabled := False Application.Minimize; И все заработало, хоть и криво, но без глюков.... Жаль, конечно, что я так и не понял, в чем жеименноыла проблема. Да и ладно =) PS А что, репутация не работает чтоли? THE CRACKER IS OUT THERE |
#5
|
||||
|
||||
Возможная причина в следующем (сам сталкивался). После двойного клика на кнопке Delphi автоматически создает обработчик OnClick, который ты можешь наблюдать на вкладке Events в инспекторе объектов. Теперь, если удалить это событие из Events (Button1Click), то кнопка перестает выполнять это действие, несмотря на то, что в инспекторе кода присутствует код обработки OnClick для этой кнопки.
Скорее всего, каким-то образом (уж не знаю каким), произошло именно это, то есть из Events исчез обработчик OnClick для кнопки. |
#6
|
||||
|
||||
Не, таких ошибок я не допускаю уже (раньше мог).
Дело в том, что эта кнопка находится в ActiveX компоненте (TShockwaveFlash). Опишу: Есть, допустим, пустая форма (без бордера), на нее располагаем два элемента управления: Button1(TButton) и Flash(TShockwaveFlash). Флэшка - это две кнопки: свернуть и закрыть. Сделана в Macromedia Flash'е. Там на нажатия этих кнопок такие коды: для свернуть: ... fscommand('appmini') ... для закрыть: ... fscommand('appexit') ... Код для события OnShow для формы: Flash.Movie := MainForm.sAppPath + 'Data\buttons.swf'; Код для собыия OnClick для Button1: Application.Minimize Код события fscommand для Flash: procedure TMain.FlashFSCommand(ASender: TObject; const command, args: WideString); begin if command = 'appmini' then begin Application.Minimize; ShowMesage(command); //MinTimer.Enabled := True; end else if command = 'appexit' then Close; end; Так вот, при нажатии на Button1, окно сворачивается. При нажатии на кнопку закрыть из флэшки окно закрывается При нажатии на кнопку свернутьиз флэшки, показывается пустое сообщение ибольше ничего не происходит (а ведь форма должна была свернуться!) Вощем пока решил проблему, как и описывал раньше, хоть и криво, но, главное, работает =) Еще раз спасибо, Decoding за проявленное участие и интерес. PS Так что с репутацией? Она работает или нет? Или это только у меня она не работает? Попробовал снова добавить отзыв для Decoding, но "Вы должны добавить отзыв кому-то еще, прежде чем сможете снова добавить ее Decoding." Сорри за оффтоп. THE CRACKER IS OUT THERE |
#7
|
||||
|
||||
Не уверен, но попробуй написать так:
Код:
procedure TMain.FlashFSCommand(ASender: TObject; const command, args: WideString); var cmd: string; begin cmd := command; case cmd[4] of 'm': begin Application.Minimize; ShowMesage(command); end; 'e': Close; end; end; |
#8
|
||||
|
||||
Спасибо, но не сработало, так что оставил я свой кривой выход из положения через таймер (
THE CRACKER IS OUT THERE |