Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сворачивание программы


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо