下面代码实现动态增加按钮,及释放动态生成的按钮及各按钮事件的实现 procedure TForm1.Button1Click(Sender: TObject); var i: integer; Button: TButton; begin for I := 0 to 8 do begin Button:=TButton.Create(Self); Button.Parent:=Form1; button.Top:=80+(i-2)*50; Button.Left:=50; Button.Width:=280; Button.Height:=50; button.Flat:=True; Button.Caption:=Table1.FieldByName('SINGNAME').AsString; Table1.Next; Button.Tag := 1;//用来辨识动态建立的Button组件 Button.Visible:=True; Button.OnClick := MyClick; end; end;procedure TForm1.Button2Click(Sender: TObject); var I: Integer; begin for I := ComponentCount-1 downto 0 do begin if (Components[I] is TButton) then begin if (Components[I] as TButton).Tag = 1 then begin //(Components[I] as TButton).Free; Components[I].Free; end; end; end; end;procedure TForm1.MyClick(Sender: TObject); begin showmessage((Form1.ActiveControl as TButton).Caption); if (Form1.ActiveControl as TButton).Caption = 第一个Button的Caption then 执行Button1的代码 if (Form1.ActiveControl as TButton).Caption = 第二个Button的Caption then 执行Button2的代码 ....... end;
请问楼上的,我也碰到这个问题,请问你的MyClick是如何定义的啊??我就定义成过程不对。报错如下: Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'请楼上指教
先写事件过程
procedure ButtonClick(Sender: TObject);
begin
end;
然后直接赋值 XXX.OnClick := ButtonClick;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
Button: TButton;
begin
for I := 0 to 8 do
begin
Button:=TButton.Create(Self);
Button.Parent:=Form1;
button.Top:=80+(i-2)*50;
Button.Left:=50;
Button.Width:=280;
Button.Height:=50;
button.Flat:=True;
Button.Caption:=Table1.FieldByName('SINGNAME').AsString;
Table1.Next;
Button.Tag := 1;//用来辨识动态建立的Button组件
Button.Visible:=True;
Button.OnClick := MyClick;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
I: Integer;
begin
for I := ComponentCount-1 downto 0 do
begin
if (Components[I] is TButton) then
begin
if (Components[I] as TButton).Tag = 1 then
begin
//(Components[I] as TButton).Free;
Components[I].Free;
end;
end;
end;
end;procedure TForm1.MyClick(Sender: TObject);
begin
showmessage((Form1.ActiveControl as TButton).Caption);
if (Form1.ActiveControl as TButton).Caption = 第一个Button的Caption then
执行Button1的代码
if (Form1.ActiveControl as TButton).Caption = 第二个Button的Caption then
执行Button2的代码
.......
end;
Incompatible types: 'TNotifyEvent' and 'procedure, untyped pointer or untyped parameter'请楼上指教
img[i].Destroy;
总是报内存错,img[i]是一个TImage的数组. 请问会是什么原因呢?