2004. április 11., vasárnap
Resize a TForm in steps
Problem/Question/Abstract:
How can I resize a form in steps, not smooth, like the Object Inspector in Delphi?
Answer:
First, declare a message handler for the WM_SIZING message in your form:
TForm1 = class(TForm)
{ ... }
protected
procedure WmSizing(var Msg: TMessage); message WM_SIZING;
{ ... }
end;
Then define the WmSizing message handler like so:
procedure TForm1.WmSizing(var Msg: TMessage);
const
STEP = 20;
var
Side: LongInt;
Rect: PRect;
begin
inherited;
Side := Msg.WParam;
Rect := PRect(Msg.LParam);
if (WMSZ_BOTTOM and Side = WMSZ_BOTTOM) then
Rect^.Bottom := Rect^.Bottom - (Rect^.Bottom mod STEP);
if (WMSZ_BOTTOMLEFT and Side = WMSZ_BOTTOMLEFT) then
begin
Rect^.Bottom := Rect^.Bottom - (Rect^.Bottom mod STEP);
Rect^.Left := Rect^.Left - (Rect^.Left mod STEP);
end;
if (WMSZ_BOTTOMRIGHT and Side = WMSZ_BOTTOMRIGHT) then
begin
Rect^.Bottom := Rect^.Bottom - (Rect^.Bottom mod STEP);
Rect^.Right := Rect^.Right - (Rect^.Right mod STEP);
end;
if (WMSZ_LEFT and Side = WMSZ_LEFT) then
Rect^.Left := Rect^.Left - (Rect^.Left mod STEP);
if (WMSZ_RIGHT and Side = WMSZ_RIGHT) then
Rect^.Right := Rect^.Right - (Rect^.Right mod STEP);
if (WMSZ_TOP and Side = WMSZ_TOP) then
Rect^.Top := Rect^.Top - (Rect^.Top mod STEP);
if (WMSZ_TOPLEFT and Side = WMSZ_TOPLEFT) then
begin
Rect^.Top := Rect^.Top - (Rect^.Top mod STEP);
Rect^.Left := Rect^.Left - (Rect^.Left mod STEP);
end;
if (WMSZ_TOPRIGHT and Side = WMSZ_TOPRIGHT) then
begin
Rect^.Top := Rect^.Top - (Rect^.Top mod STEP);
Rect^.Right := Rect^.Right - (Rect^.Right mod STEP);
end;
Msg.Result := 1;
end;
You can adjust the STEP constant to meet your needs. Likewise, you can make any edge a constant size simply by assigning a valueto it.
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése