解决方案 »
- fastreport 中图形报表列印问题
- 请问怎么判断摄像头是否被其他程序占用?
- 很久没有上来散分,顺便提问一下!请大家关注!
- 我的控件为啥注册不了
- 如何使DBGRID的列宽适合内容的长度!
- Trichedit控件中如何输入表格?
- N人上班,按照白、夜、休三班倒,如何每月按此顺序自动排班
- 请问:如何绕过BDE访问数据库?
- 如何解除窗体上所有控件?如:Button1..n,Label..n,Menu1..n 等等。
- 高手请进:这个任意旋转Image的函数好难懂
- 新手求教,全局function要放在那里。
- 新手请教,delphi怎么建立,使用function和 procedure。象VB的function 和SUB那样。
构件位置和大小可用 BoundsRect 设置,比较简洁易读。
重复写(Sender as TButton).Caption,读起来累。
在循环中重复写 inttostr(i),应该避免。不妨改一下,看看能精简多少代码。
将代码改动如下unit DynamicCreateControlsPas;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure aBtnonClick(Sender: Tobject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations } end;var
Form1: TForm1;
const
aCaption = 'delphi';
implementation{$R *.dfm}procedure CreateBtn(aLeft, aTop, aWidth, aHeigh, aMount: integer;
sCaption: string; aOnWer: TComponent); //封装创建Btn函数
var
i, H: integer;
begin
H := 0;
for i := 1 to aMount do
with TButton.Create(aOnWer) do
begin
Name := sCaption + inttostr(i);
H := H + 80;
BoundsRect := Bounds(aLeft, H, aWidth, aHeigh);
Parent := Form1;
end;end;procedure Tform1.aBtnonClick(Sender: Tobject); //事件过程
var
i: integer;
begin
for i := 1 to 5 do
begin
if ((Sender as TButton).Caption = acaption + inttostr(i)) then
ShowMessage((Sender as TButton).caption);
end;
end;procedure TForm1.Button1Click(Sender: TObject); //调用创建btn函数
var
i: Integer;
aBtn: TButton;
begin
for i := 1 to 5 do
begin
if not Assigned(TButton(FindComponent(aCaption + inttostr(i)))) then
CreateBtn(60, 60, 120, 60, 5, aCaption,Form1);
aBtn := TButton(FindComponent(aCaption + inttostr(i)));
aBtn.OnClick := aBtnonClick;
end;
end;
end.
compName: string; compType: TControlClass; aOwner: TComponent); //封装创建Btn函数
var
i: integer;
begin
aTop := 0;
for i := 1 to aMount do
if not Assigned(aOwner.FindComponent(compName + inttostr(i))) then
with compType.Create(aOwner) do
begin
Name := compName + inttostr(i);
aTop := aTop + 60;
BoundsRect := Bounds(aLeft, aTop, aWidth, aHeigh);
Parent := Form1;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
const
bBtn: Tcontrolclass = TButton;
begin
CreateCompoent(60, 60, 120, 40, 5, 'delphi', bBtn, form1); //调用
end;