1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| unit ex01a;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
Pos_Top_panel : Integer ;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
with TButton(Sender).Parent as TPanel do
caption := TimeToStr(now) ;
end;
function ComponentToString (Component: TComponent): string;
var
BinStream:TMemoryStream;
StrStream: TStringStream;
st1: string;
begin
st1:= '' ;
BinStream := TMemoryStream.Create;
try
StrStream := TStringStream.Create(st1);
try
BinStream.WriteComponent(Component);
BinStream.Position := 0 ;
ObjectBinaryToText(BinStream, StrStream);
StrStream.Position := 0 ;
Result:= StrStream.DataString;
finally
StrStream.Free;
end;
finally
BinStream.Free
end;
end;
function StringToComponent(Value: string): TComponent;
var
StrStream:TStringStream;
BinStream: TMemoryStream;
begin
StrStream := TStringStream.Create(Value);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(StrStream, BinStream);
BinStream.Position := 0 ;
Result := BinStream.ReadComponent(nil);
finally
BinStream.Free;
end;
finally
StrStream.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
st1 : string ;
i1 : integer ;
cp1 : TComponent ;
panelX : TPanel ;
begin
panelX := TPanel(StringToComponent(ComponentToString(Panel1))) ;
Pos_Top_panel := Pos_Top_panel + Panel1.Height ;
panelX.Top := Pos_Top_panel ;
panelX.Parent := form1 ;
for i1:=0 to Panel1.ControlCount-1 do
begin
st1 := ComponentToString(Panel1.controls[i1]) ;
cp1 := StringToComponent(st1) ;
if cp1 is TButton then
begin
with cp1 as TButton do
Parent := panelX ;
TButton(cp1).OnClick := Button1Click ;
end ;
if cp1 is TEdit then
with cp1 as TEdit do
Parent := panelX ;
end ;
end;
initialization
RegisterClasses([TPanel]) ;
RegisterClasses([TButton]) ;
RegisterClasses([TEdit]) ;
end. |
Partager