Re:Change Size of all Components on the Form
Quote
In article <32592674.7...@magnet.at>, Muratore Mario <muratore.ma...@magnet.at> wrote:
>I would like to create a sizeable Form which changes size,position and
>fontheight of each component on the Form in the same ratio as the formsize.
>I realized this with the following code but if i put a TTabSet-Component
>on the Form Ill get a GPF.
>If anyone have a solution or a better code for this problem please send
>it to me or to the newsgroup.
I always use the following component.
=============================
unit Elastic;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, ExtCtrls;
type
TElasticPanel = class( TPanel )
private
FHorz, FVert: boolean;
nOldWidth, nOldHeight: integer;
bResized: boolean;
protected
procedure WMSize( var message: TWMSize ); message WM_SIZE;
public
nCount: integer;
constructor Create( AOwner: TComponent ); override;
published
property ElasticHorizontal: boolean read FHorz write FHorz default
TRUE;
property ElasticVertical: boolean read FVert write FVert default
TRUE;
end;
procedure Register;
implementation
constructor TElasticPanel.Create( AOwner: TComponent );
begin
inherited Create( AOwner );
FHorz := TRUE;
FVert := TRUE;
nOldWidth := Width;
nOldHeight := Height;
bResized := FALSE;
end;
procedure TElasticPanel.WMSize( var message: TWMSize );
var
bResize: boolean;
xRatio: real;
i: integer;
ctl: TWinControl;
begin
Inc( nCount );
if Align = alNone then
bResize := TRUE
else
bResize := bResized;
if not ( csDesigning in ComponentState ) and bResize then
begin
if FHorz then
begin
xRatio := Width / nOldWidth;
for i := 0 to ControlCount - 1 do
begin
ctl := TWinControl( Controls[i] );
ctl.Left := Round( ctl.Left * xRatio );
ctl.Width := Round( ctl.Width * xRatio );
end;
end;
if FVert then
begin
xRatio := Height / nOldHeight;
for i := 0 to ControlCount - 1 do
begin
ctl := TWinControl( Controls[i] );
ctl.Top := Round( ctl.Top * xRatio );
ctl.Height := Round( ctl.Height * xRatio );
end;
end;
end
else
begin
nOldWidth := Width;
nOldHeight := Height;
end;
bResized := TRUE;
nOldWidth := Width;
nOldHeight := Height;
end;
procedure Register;
begin
RegisterComponents('Additional', [TElasticPanel]);
end;
end.
Happy Hacking The Graphical Gnome
----------------------------------------------
| Rob den Braasem | Voice :-31-79-3531520 |
| | Fax :-31-79-3513561 |
| | Mail : r...@ktibv.nl |
| |-----------------------+---------------------+
| KTI bv | "I die when it's time for me to die. |
| P.O. Box 86 | So let me live my life the way I want to." |
| 2700 AB Zoetermeer | |
| The Netherlands | Jimi Hendrix |
-------------------------------------------------------------------+