函数如下:
procedure TForm1.initButtons(AParent: TWinControl; C: Integer;
var Button:array of TSpeedButton ; ButtonClick: TinitButton=nil);
const
bWidth =80;
bHeight =50;
cSpace =8;
vSpace = 10;
var
i,j:Integer;
begin
//SetLength(Button,C);
j:=0;
for i := 0 to C -1 do
begin
Button[i] := TSpeedButton.Create(Self);
Button[i].Width := bWidth;
Button[i].Height := bHeight;
Button[i].Caption := Button[i].Name+IntToStr(i);
Button[i].Parent := AParent;
if i=0 then
begin
Button[i].Top := vSpace;
Button[i].Left := cSpace;
end
else if (Button[i-1].Left + Button[i-1].Width +cSpace+Button[i].Width+cSpace) <= AParent.Width then
begin
Button[i].Top := Button[i-1].Top;
Button[i].Left := Button[i-1].Left + Button[i-1].Width +cSpace ;
end
else
begin
Inc(j);
AParent.Height := AParent.Height + (Button[i].Height+cSpace) * j;
Button[i].Top := vSpace+(Button[i].Height+vSpace)*j;
if j=1 then
Button[i].Left := cSpace
else
Button[i].Left := Button[i-1].Left + Button[i-1].Width +cSpace;
end;
Button[i].Tag := i;
if Assigned(ButtonClick) then ButtonClick(Button);
end;
end;
调用如下:
procedure TForm1.FormCreate(Sender: TObject);
const
C =15
var
Buttons1 : array of TSpeedButton;
begin
SetLength(Buttons1,C);
initButtons(pnlfirst,C,Buttons1,ButtonClick1);
end;
运行时提示:incompatible types :'Array' and 'TObject'错误请教各位怎么解决
procedure TForm1.initButtons(AParent: TWinControl; C: Integer;
var Button:array of TSpeedButton ; ButtonClick: TinitButton=nil);
const
bWidth =80;
bHeight =50;
cSpace =8;
vSpace = 10;
var
i,j:Integer;
begin
//SetLength(Button,C);
j:=0;
for i := 0 to C -1 do
begin
Button[i] := TSpeedButton.Create(Self);
Button[i].Width := bWidth;
Button[i].Height := bHeight;
Button[i].Caption := Button[i].Name+IntToStr(i);
Button[i].Parent := AParent;
if i=0 then
begin
Button[i].Top := vSpace;
Button[i].Left := cSpace;
end
else if (Button[i-1].Left + Button[i-1].Width +cSpace+Button[i].Width+cSpace) <= AParent.Width then
begin
Button[i].Top := Button[i-1].Top;
Button[i].Left := Button[i-1].Left + Button[i-1].Width +cSpace ;
end
else
begin
Inc(j);
AParent.Height := AParent.Height + (Button[i].Height+cSpace) * j;
Button[i].Top := vSpace+(Button[i].Height+vSpace)*j;
if j=1 then
Button[i].Left := cSpace
else
Button[i].Left := Button[i-1].Left + Button[i-1].Width +cSpace;
end;
Button[i].Tag := i;
if Assigned(ButtonClick) then ButtonClick(Button);
end;
end;
调用如下:
procedure TForm1.FormCreate(Sender: TObject);
const
C =15
var
Buttons1 : array of TSpeedButton;
begin
SetLength(Buttons1,C);
initButtons(pnlfirst,C,Buttons1,ButtonClick1);
end;
运行时提示:incompatible types :'Array' and 'TObject'错误请教各位怎么解决
解决方案 »
- fastreport如何实用
- 程序会报错 Couldn't perform the edit because another user changed the record 请大家进来看看!
- 一个黑色的jpg图片,中间有一块白色的长方形区域,如何得到这个长方形的长宽及left 及top值呢
- 如何获得dbgrid的只是双击行的事件,双击dbgrid其它的区域不激发事件???
- 可有E-Mail地址有效性检查代码?
- delphi实现C/S和B/S结构的基本方法
- 很简单的问题在线等待?关于自动检查,并定位输入框,有点像delphi编译提示信息。
- 怎样在子窗口中使用数据库控件?
- ISAPI的使用
- 如何实现一个程序的主窗体和子窗体都显示在任务栏上
- N年前的死树离开人世了,让我们感谢他为CSDN的D版做的贡献!
- 调用FONT设置
TinitButton = procedure(Button: array of TSpeedButton) of Object;
在调用的时候出错,也就是运行到
initButtons(pnlfirst,C,Buttons1,ButtonClick1); 的时候出错
试试
怀疑你的问题出在ButtonClick1上,把这个事件的代码再贴出来看看.
请看我的代码,没问题的:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls;type
TinitButton = procedure(Button: array of TSpeedButton) of Object; TForm1 = class(TForm)
btn1: TSpeedButton;
pnl1: TPanel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure initButtons(AParent: TWinControl; C: Integer;
var Button:array of TSpeedButton ; ButtonClick: TinitButton =nil);
end;var
Form1: TForm1;
ButtonClick1 : TinitButton;implementation{$R *.dfm}procedure TForm1.initButtons(AParent: TWinControl; C: Integer;
var Button:array of TSpeedButton ; ButtonClick: TinitButton=nil);
const
bWidth =80;
bHeight =50;
cSpace =8;
vSpace = 10;
var
i,j:Integer;
begin
//SetLength(Button,C);
j:=0;
for i := 0 to C -1 do
begin
Button[i] := TSpeedButton.Create(Self);
Button[i].Width := bWidth;
Button[i].Height := bHeight;
Button[i].Caption := Button[i].Name+IntToStr(i);
Button[i].Parent := AParent;
if i=0 then
begin
Button[i].Top := vSpace;
Button[i].Left := cSpace;
end
else if (Button[i-1].Left + Button[i-1].Width +cSpace+Button[i].Width+cSpace) <= AParent.Width then
begin
Button[i].Top := Button[i-1].Top;
Button[i].Left := Button[i-1].Left + Button[i-1].Width +cSpace ;
end
else
begin
Inc(j);
AParent.Height := AParent.Height + (Button[i].Height+cSpace) * j;
Button[i].Top := vSpace+(Button[i].Height+vSpace)*j;
if j=1 then
Button[i].Left := cSpace
else
Button[i].Left := Button[i-1].Left + Button[i-1].Width +cSpace;
end;
Button[i].Tag := i;
if Assigned(ButtonClick) then ButtonClick(Button);
end;
end; procedure TForm1.FormCreate(Sender: TObject);
const
C =15 ;
var
Buttons1 : array of TSpeedButton;
begin
ButtonClick1 := nil;
SetLength(Buttons1,C);
initButtons(pnl1,C,Buttons1,ButtonClick1);
end;end.
const
SQL = '';
C =15;
bWidth =80;
bHeight =50;
cSpace =8;
vSpace = 10;
var
Buttons2 : array of TBitBtn;
i,j:Integer;
begin
SetLength(Buttons2,C);
j:=0;
for i := 0 to C -1 do
begin
Buttons2[i] := TBitBtn.Create(Self);
Buttons2[i].Width := bWidth;
Buttons2[i].Height := bHeight;
Buttons2[i].Caption := Buttons2[i].Name+IntToStr(i);
Buttons2[i].Parent := pnlSecond;
if i=0 then
begin
Buttons2[i].Top := vSpace;
Buttons2[i].Left := cSpace;
end
else if (Buttons2[i-1].Left + Buttons2[i-1].Width +cSpace+Buttons2[i].Width+cSpace) <= pnlSecond.Width then
begin
Buttons2[i].Top := Buttons2[i-1].Top;
Buttons2[i].Left := Buttons2[i-1].Left + Buttons2[i-1].Width +cSpace ;
end
else
begin
Inc(j);
pnlSecond.Height := pnlSecond.Height + (Buttons2[i].Height+cSpace) * j;
Buttons2[i].Top := vSpace+(Buttons2[i].Height+10)*j;
if j=1 then
Buttons2[i].Left := cSpace
else
Buttons2[i].Left := Buttons2[i-1].Left + Buttons2[i-1].Width +cSpace;
end;
Buttons2[i].Tag := i;
Buttons2[i].OnClick := ButtonClick2;
end;
end;