Необходимо объявить обработчик события для WM_GETMINMAXINFO:

 

Code:

...

private

{©Drkb v.3(2007): www.drkb.ru}

 

procedure WMGetMinMaxInfo(var Message : TWMGetMinMaxInfo);

message WM_GETMINMAXINFO;

 

 

А вот как выглядит сам обработчик:

 

procedure TForm1.WMGetMinMaxInfo(var Message : TWMGetMinMaxInfo);

begin

Message.MinMaxInfo^.ptMinTrackSize := Point(Width, Height);

Message.MinMaxInfo^.ptMaxTrackSize := Point(Width, Height);

end;

 

Взято из http://forum.sources.ru

 

Примечание от Vit:

 

Начиная с Дельфи 5 появилось удобное свойство Constrains - специально для ограничесния минимальных и максимальных размеров...

Для этого можно воспользоваться API функцией GetCapture().

Code:

procedure TForm1.FormDeactivate(Sender: TObject);

begin

ReleaseCapture;

end;

 

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

If GetCapture = 0 then

   SetCapture(Form1.Handle);

if PtInRect(Rect(Form1.Left,

                  Form1.Top,

                  Form1.Left + Form1.Width,

                  Form1.Top + Form1.Height),

                  ClientToScreen(Point(x, y))) then

Form1.Caption := 'Мышка на форме' else

Form1.Caption := 'Мышка за пределами формы';

end;

 

 Взято из http://forum.sources.ru

 

Переопределите в подклассе TForm оконную процедуру WinProc класса. В примере оконная процедура переопределяется для того чтобы реагировать на сообщение WM_CANCELMODE, показывающее, что выполняется messagebox или какой-либо еще диалог.

Code:

type

TForm1 = class(TForm)

   Button1: TButton;

   procedure WndProc(var Message: TMessage); override;

   procedure Button1Click(Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.WndProc(var Message: TMessage);

begin

if Message.Msg = WM_CANCELMODE then

   begin

     Form1.Caption := 'A dialog or message box has popped up';

   end

else

   inherited // <- остальное сделает родительская процедура

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

ShowMessage('Test Message');

end;

 

 

In FormShow:

Code:

var

RecS, RecL: TRect;

begin

RecS := Rect(Screen.Width, Screen.Height, Screen.Width, Screen.Height);

RecL := ThisForm.BoundsRect;

DrawAnimatedRects(GetDesktopWindow, IDANI_CAPTION, RecS, RecL);

{ ... }

end;

 

 

  

Перехватывать сообщение WM_SYSCOMMAND. Если это сообщение говорит о

минимизации или максимизации формы - пищит динамик.

Code:

type

TForm1 = class(TForm)

private

{Private declarations}

   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) or (Msg.CmdType = SC_MAXIMIZE) then

   MessageBeep(0)

else

   inherited;

end;

 

 

How i can create a form and this form stay in another icon in task bar ? (Looks like a new aplication).

Как я могу создать форму, и эта форма пребывания в другой значок в панель задач ? (Выглядит как новый применение).

 

In private clause:

Code:

type

TForm1 = class(TForm)

private

   { Private declarations }

   procedure CreateParams(var Params: TCreateParams); override;

Как бы это осуществить рисование в окне без его дурацкого мерцания и без помощи создания виртуального изображения в памяти? WM_SETREDRAW здесь поможет?

 

Попробуйте этот код. Даже если некоторые компоненты имеют пару BeginUpdate / EndUpdate, то для таких компонентов, как TTreeView, интенсивное рисование может послужить причиной перемещения полосы прокрутки и появления других "барабашек". В таких ситуаций вместо дескриптора элемента управления используйте родительский дескриптор.

  

Code:

uses

Windows;

 

procedure PlaceMyMouse(Sender: TForm; X, Y: word);

var

MyPoint: TPoint;

begin

MyPoint := Sender.ClientToScreen(Point(X, Y));

SetCursorPos(MyPoint.X, MyPoint.Y);

end;

 

 

Часто возникает проблема - в многооконном приложении необходимо обратить внимание пользователя на то, что какое-то из окон требует внимания (например, к нему пришло сообщение по DDE, в нем завершился какой-либо процесс, произошла ошибка ...). Это легко сделать, используя команду API FlashWindow:

Code:

procedure TForm1.Timer1Timer(Sender: TObject);

begin

FlashWindow(Handle,true);

end;

 

 

Автор: Lutfi Baran

 

Пример демонстрирует вывод теста случайным образом на форме под определённым углом. Добавляем в форму компонент TButton и в событие OnClick следующий код:

Code:

procedure TForm1.Button1Click(Sender: TObject);

var

logfont: TLogFont;

font: Thandle;

count: integer;

begin

LogFont.lfheight := 20;

logfont.lfwidth := 20;

logfont.lfweight := 750;

LogFont.lfEscapement := -200;

logfont.lfcharset := 1;

logfont.lfoutprecision := out_tt_precis;

logfont.lfquality := draft_quality;

logfont.lfpitchandfamily := FF_Modern;

font := createfontindirect(logfont);

Selectobject(Form1.canvas.handle, font);

SetTextColor(Form1.canvas.handle, rgb(0, 0, 200));

SetBKmode(Form1.canvas.handle, transparent);

for count := 1 to 100 do

begin

   canvas.textout(Random(form1.width), Random(form1.height), 'Hello');

   SetTextColor(form1.canvas.handle, rgb(Random(255), Random(255), Random

     (255)));

end;

Deleteobject(font);

end;

 

 

 

Code:

type

  //...

private

   { Private declarations }

   procedure WMNCACTIVATE(var M: TWMNCACTIVATE); message WM_NCACTIVATE;

end;

 

 

implementation

 

//...

 

procedure TForm1.WMNCACTIVATE(var M: TWMNCACTIVATE);

begin

inherited;

if M.Active then

   caption:='Form active'

else caption:='Form not active' ;

end;