Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как обработать минимизацию формы?


Автор: Cyri 14.12.2004, 14:18
Народ, как обработать нажатие кнопки Минимайз формы? Ну и Максимайз заодно.
Кирилл

Автор: Vladimir13 14.12.2004, 14:31
Form1.Windowstate:=wsminimized;
Form1.Windowstate:=wsnormal;
form1.windowsstate:=wsMinimized;
Добавлено @ 14:34
т.е. if Form1.Windowstate:=wsminmized then ... это и будет соответствовать нажатию на _

Автор: Rennigth 14.12.2004, 14:39
если инете поискать можно найти довольно приличные апгдэйды на RichEdit с реализацией гиперссылок.

Автор: Vladimir13 14.12.2004, 15:58
if Form1.BorderIcons=[biMinimize] then Form1.close;
этот код закрывает форму при нажатии на _.

Извиняюсь за неправильный ответ, не понял вопроса.
Добавлено @ 16:00
Rennigth а причем здесь RichEdit и апгрейды к нему? smile

Автор: Bes 14.12.2004, 16:08
Может обрабатывать событие формы OnResize после чего проверять св-во Form1.Windowstate
?

Автор: Vladimir13 14.12.2004, 19:05
[/size] НАРОД !!!![size=1] обратите внимание на эту тему !!! Ничего из предложенного не работает !!!
Нужны свежие мысли !!!

Автор: Vladimir13 14.12.2004, 19:31
Единственное решение которое приходит на ум: сделать Form1.BorderStyle:=bsNone;
создать панель, на которой расположить 3 SpeedButton'а c картинками _ , х , и квадратик. Им присвоить соответствующие свойства. Так отслеживать легко.

Автор: Marriage 14.12.2004, 23:14
Цитата

Единственное решение которое приходит на ум: сделать Form1.BorderStyle:=bsNone;
создать панель, на которой расположить 3 SpeedButton'а c картинками _ , х , и квадратик. Им присвоить соответствующие свойства. Так отслеживать легко.



smile

Код




unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
 private
  procedure WMSysCommand(var Msg: TWMSysCommand);
  message WM_SYSCOMMAND;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMSysCommand;
begin
      if (Msg.CmdType = SC_MINIMIZE)  then
      ShowMessage('Go minimize !!!!')
      else
       if  (Msg.CmdType = SC_MAXIMIZE) then
        ShowMessage('Go maximize !!!!')
        else
        inherited;
end;


end.




With help Delphi Word 6 smile

Автор: Bes 15.12.2004, 07:32
2Marriage
Не тут-то было :-) форма не сворачивается и не разворачивается.

Автор: Cyri 15.12.2004, 09:11
Цитата(Vladimir13 @ 14.12.2004, 19:31)
Единственное решение которое приходит на ум: сделать Form1.BorderStyle:=bsNone;
создать панель, на которой расположить 3 SpeedButton'а c картинками _ , х , и квадратик. Им присвоить соответствующие свойства. Так отслеживать легко.

Это хорошо. Но это-крайний выход. Всё-таки хотелось бы не так. Вроде бы мелочь, ан нет...

Автор: Bes 15.12.2004, 09:29
2Cyri,Vladimir13 :
Тем более, что даже если ты приделаешь эти кнопки, то форму еще можно минимизировать щелкнув на ней в панели управления или как там она внизу которая и ваш обработчик не среагирует...
Тут что-то другое надо. Сам думаю.. :-)

Автор: Snowy 15.12.2004, 09:53
Посмотрите этот топик:
http://forum.vingrad.ru/index.php?showtopic=31971
Там как раз отлавливается сворачивание окна. После сворачивания окно насильно восстанавливается обратно.

Отловить сворачивание просто. Кладем на форму TApplicationEvent.
Вот у него уже есть события:
OnMinimize
OnRestore
OnActionExecute
OnActionUpdate
OnActivate
OnDeactivate
OnException
OnHelp
OnHint
OnIdle
OnMessage
OnSettingChange
OnShortCut
OnShowHint

Автор: Guest 15.12.2004, 10:29
Цитата

2Marriage
Не тут-то было :-) форма не сворачивается и не разворачивается.


Можно было бы и догадаться smile




Код

unit Unit1;

interface

uses
Windows, Messages, SysUtils,  Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
private
 procedure WMSysCommand(var Msg: TWMSysCommand);
 message WM_SYSCOMMAND;
public
  { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMSysCommand;
begin
     if (Msg.CmdType = SC_MINIMIZE)  then
      BEgin
       ShowMessage('Go minimize !!!!');
       inherited;
      End
     else
      if  (Msg.CmdType = SC_MAXIMIZE) then
       BEgin
        ShowMessage('Go maximize !!!!');
        inherited;
       end
       else
       inherited;
end;


end.


Автор: Marriage 15.12.2004, 11:23
Забыл войти под своим именем ...
Вот теперь все должно работать !!!!

Автор: Vladimir13 16.12.2004, 21:16
мой способ хоть и примитивен, но работает smile .
Простота - залог успеха!

Автор: Guest 16.12.2004, 22:41
Цитата

мой способ хоть и примитивен, но работает  .


ТЫ хочешь сказать , что преведенный выше код не работает ???

Автор: Vladimir13 16.12.2004, 23:02
я хочу сказать, что мой код РАБОТАЕТ, а другие я не проверял smile

Автор: Marriage 16.12.2004, 23:03
Цитата

создать панель, на которой расположить 3 SpeedButton'а c картинками _ , х , и квадратик. Им присвоить соответствующие свойства

Это по твоему просто ???? smile

Автор: Vladimir13 16.12.2004, 23:12
а что сложно? это первое решение которое пришло мне в голову.

Автор: Marriage 16.12.2004, 23:23
2Vladimir13
По-моему оно нерациональное.

Автор: Vladimir13 16.12.2004, 23:35
кому как. На вкус и цвет... я за простоту решений, пусть они "тяжелые", большие и не красивые...

Автор: Bes 17.12.2004, 07:36
2Vladimir13:
Боюсь, что если форму сворачивать не твоими кнопками а из панели то твой метод не сработает. :-(
Так что лучше пожалуй обрабатывать сообщения и проще, хотя я конечно твоего кода не видел....

Автор: Vladimir13 17.12.2004, 07:42
повторяю: я придумал этот код, когда у других вообще не было никаких идей. Что то - лучше чем ничего.

Автор: Bes 17.12.2004, 07:44
Нет, ну Базара нет.

Автор: Vladimir13 17.12.2004, 08:04
когда все отмахивались, а кто то smile , то я smile .

Автор: Bes 17.12.2004, 08:14
:-) ладно-ладно я ж не против, просто к чему такой спор... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)