![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сворачивание программы
Kirill © (2003-06-04 18:39:00)Написал простой код:
uses
Kol,windows;
var
frM : PControl;
begin
Applet:=NewApplet('Test').CenterOnParent;
Applet.Visible:=true;
Applet.Icon:=0;
frM:=NewForm(Applet,'Test').SetSize(300,100).CenterOnParent;
frm.SizeGrip:=false;
frM.CanResize:=false;
frM.Icon:=0;
frm.Style:=frm.Style-WS_MAXIMIZEBOX;
Run(frM);
end.
А при нажатии на кнопку минимизации, она сворачивается в левый нижний угол, а не на панель задач. Это глюк системы или кривых ручек?
Леонид Пилипенко (2003-10-10 19:08:00) [1]Ух ты, первый способ помог. Да на долю секунды виндно, но это несущественно.
Ага, и воторой помог. Ура!!!
Так что ENDLESS THANKS и RESPECT вам уважаемый!!!
Vladimir Kladov (2003-10-10 16:09:00) [2]Работает AppletMinimize, не надо меня заблуждать. Разве что сама форма при этом остается в свернутом виде.
Вот грубое решение:
procedure TForm3.KOLForm1Minimize(Sender: PObj);
begin
PostMessage( Applet.Handle, WM_USER+100, Integer( Form ), 0 )
end;
function TForm1.KOLApplet1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
Result := FALSE;
if Msg.message = WM_USER+100 then
begin
PControl( Msg.wParam ).WindowState := wsNormal;
AppletMinimize;
Result := TRUE;
end;
end;
При этом сворачиваемая форма на долю секунды успевается появиться в свернутом виде в левом углу. Для пущей чистоты можно вместо OnMinimize использовать OnMessage:
function TForm3.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
Result := FALSE;
if (Msg.message = WM_SYSCOMMAND) and (Msg.wParam and not 15 = SC_MINIMIZE) then
begin
PostMessage( Applet.Handle, WM_USER+100, Integer( Form ), 0 );
Rslt := 0;
Result := TRUE;
end;
end;
Леонид Пилипенко (2003-10-10 10:36:00) [3]Ах да, вот ещё что. Я заметил, что форма сворачивается правильно, если нажать всем известное сочетание клавиш Windows key (ну с рисунком винды) + D. Этот shortcut сворачивает все окна (модальные тоже), очень удобная вещь по жизни. Так вот независимо от того, в каком форма положении (свёрнута в нижний угол или развёрнута) она при нажатии на этот shortcut сворачивается правильно. То есть, я думаю, какое это событие винда посылает всем формам через Enum... чтобы получить правильный эффект.
Леонид Пилипенко (2003-10-10 10:32:00) [4]Что вы имеете в виду? У меня 5 форм, на главной лежит Applet. А или вы имеете в виду вообще один Applet, то нет у меня 5 форм.
SPeller (2003-10-10 04:38:00) [5]
> Леонид Пилипенко
Отдельный объект Applet используете?
Леонид Пилипенко (2003-10-09 23:04:00) [6]Хм,...чего-то не пойму, чего надо сделать на OnMinimize? Метод AppletMinimize вызвать что-ли, так ежели так, то не помогло.
Хотя мне и так понятна идеология из исходника
if Applet = nil then Exit;
Applet.Perform( WM_SYSCOMMAND, SC_MINIMIZE, 0 );
...но чего-то не помогло.
Вы говорите правильно это, странно, а ведь VCL'ные проги сворачиваются в TaskBar, а не в нижний левый угол (независимо от количества форм).
Кроме того, мне не понятно после чего это происходит. Одно я знаю, когда у меня была одна форма, то она работала как надо.
Может ещё идеи есть?
Леонид Пилипенко (2003-10-09 22:59:00) [7]Хм,...чего-то не пойму, чего надо сделать на OnMinimize? Метод AppletMinimize вызвать что-ли, так ежели так, то не помогло.
Вы говорите правильно это, странно, а ведь VCL'ные проги сворачиваются в TaskBar, а не в нижний левый угол (независимо от количества форм).
Кроме того, мне не понятно после чего это происходит. Одно я знаю, когда у меня была одна форма, то она работала как надо.
Может ещё идеи есть?
Vladimir Kladov (2003-10-05 20:03:00) [8]а куда такие формы должны минимизироваться? По-моему, по умолчанию они делают то, что предусмотрено в Windows, это правильно. Если надо скрывать, или минимизировать все приложение (AppletMinimize), то на то есть OnMinimize.
Леонид Пилипенко (2003-10-05 12:03:00) [9]Hi!
Обращаюсь прямо к уважемому разработчику, Владимиру Кладову.
В форум (а не на e-mail) пишу, чтобы аналогичный вопрос другие не задавали по сто раз.
Вопрос такой: у меня в программе пять форм, а не одна. Я уже и прогу дописал и обратил внимание, что она сворачивается в левый нижний угол. Странно это.
Ничего не помогает: MinimizeNormalAnimated и Applet.OnMessage...
Чего с этим делать.
У меня XP Prof. (без Service Pack'ов). Если это имеет значение.
P.S. Thanks for reading!
Kirill (2003-06-05 13:12:00) [10]Помогло.
Я не помню, после чего я начал исользовать Run(form1), из-за какой-то фичи в раних версиях при выходе из программы.
Кладов (2003-06-05 08:42:00) [11]2Kirill:Посмотрел, что вы тут накорябали. Вам надо срочно в операционную, руки перешивать :)
Run(Applet);
И всегда пишите так, даже, когда Applet не используется, и Applet = form1 - меньше будет ошибок, когда захочется Applet добавить.
SerB (2003-06-05 06:07:00) [12]У меня иногда еще более интересный эффект наблюдается, минимизируется только шапка окна, отрываясь от него, а само окно остается на месте, копался и обнаружил, сто остатки легко удаляются обновлением экрана...
Kirill (2003-06-05 04:58:00) [13]Как я и говорил, не помогло.:(
Kirill (2003-06-05 04:46:00) [14]
> MinimizeNormalAnimated
Не помогло. Такой же глюк замечен и на ХР. Попробую сейчас обновить до версии 1.75, только что-то она мне не пришла по почте :( Хотя я думаю толку не будет.
Кладов (2003-06-04 22:04:00) [15]тогдп уже WS_MINIMIZEBOX :)
Centronix (2003-06-04 20:19:00) [16]
> frm.Style:=frm.Style-WS_MAXIMIZEBOX;
не в тему, но корректнее будет: frm.Style:=frm.Style and notWS_MAXIMIZEBOX;
:)
Кладов (2003-06-04 19:47:00) [17]MinimizeNormalAnimated