DELPHI动态创建删除FRAME
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,FM;
type
TForm2 = class(TForm)
Panel1: TPanel;
Button2: TButton;
ScrollBox1: TScrollBox;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TFM = Array Of TFrame1;
var
Form2: TForm2;
aFM: TFM;
procedure DeleteArrItem(var arr: TFM ; Index: Integer);stdcall;
implementation
{$R *.dfm}
procedure DeleteArrItem(var arr: TFM ; Index: Integer);
var
Count: Cardinal;
i:integer;
begin
Count := Length(arr);
if (Count = 0) or (Index < 0) or (Index >= Count) then Exit;
Move(arr[Index+1], arr[Index], (Count-Index)* SizeOf(arr[0]));
SetLength(arr, Count - 1);
for I := 0 to Length(arr) - 1 do
begin
arr[i].Label1.Caption:=inttostr(i);
end;
end;
procedure TForm2.Button2Click(Sender: TObject);
var
fram:TFrame1;
begin
SetLength(aFM,length(aFM)+1);
aFM[length(aFM)-1] :=TFrame1.Create(nil) ;
fram:=aFM[length(aFM)-1];
fram.Label1.Caption:=inttostr(length(aFM)-1);
fram.Parent:=ScrollBox1;
end;
end.
unit fm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TFrame1 = class(TFrame)
GroupBox1: TGroupBox;
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
uses unit2;
{$R *.dfm}
procedure TFrame1.Button1Click(Sender: TObject);
begin
DeleteArrItem(aFM,strtoint(label1.Caption));
( Sender as Tbutton ).Parent.Parent.Destroy;
end;
end.
1