我的代码不是放在窗体单元,而是公共单元中,没有窗体的,是不是这样的话就不好指定单击事件呀!谢谢。
解决方案 »
- 对vcl消息处理较了解的高手请进
- 我有大文本数据需要保存(5M左右),保存时出现死机状,我想创建新的线程后台处理.如何实现?
- 唉,以前帐号密码忘记了,散分,顺便讨论讨论个人问题...
- 为我那因病去世的表哥默哀!散分!
- 對像數組,代碼很簡單,幫我看看,謝謝了!
- 如何取到本机所连接的打印机的型号?
- 谁能提供DELPHI的技术网站,越多越好,up有分
- delphi 如何实现将汇编字符串写入到内存
- 多层结构的应用程序能否不使用网页式的客户端
- 超级菜鸟问题,请进...
- 问一个问题,多谢指教
- 请问如何将一个adodataset的数据快速地转到另一个adodataset控件中,并保存!!!!!!!!!!!!!!!!!!!!
procedure ShowSeriesCode(TempQry: TADOQuery; CodeField: string; CodePanel: TPanel);
var
SeriesStr, TempStr, HintStr: string;
i, TempTag: integer;
begin
{
以逗号分隔各个编码位
}
SeriesStr := trim(TempQry.fieldbyname(CodeField).asstring);
NowLeft := 0;
TempTag:=0;
//先释放对像
for i := high(SeriesCode) downto low(SeriesCode) do
begin
SeriesCode[i].free;
SeriesCode[i] := nil;
end;
//分析编码
//最后一位不是逗号则加一个
if copy(SeriesStr, length(SeriesStr), 1) <> ',' then
SeriesStr := SeriesStr + ',';
//得到编码个数
CodeNumber := GetAppearTimes(',', SeriesStr);
//根据每位上的值不同动态生成控件数组
setlength(SeriesCode, CodeNumber);
for i := 0 to CodeNumber - 1 do
begin
TempStr := GetSubstr(SeriesStr, ',', i + 1);
//如果是*或字符,则生成edit
if (TempStr = '*') or ((TempStr <> '*') and (TempStr <> '-')) then
begin
SeriesCode[i] := TEdit.Create(nil);
SeriesCode[i].Visible := false;
SeriesCode[i].Parent := CodePanel;
SeriesCode[i].Name := 'CODE' + inttostr(i);
SeriesCode[i].Height := HEIGHTPUB;
SeriesCode[i].top := TOPPUB;
if i = 0 then
SeriesCode[i].Width := LENCODEPRE
else
SeriesCode[i].Width := LENCODE; SeriesCode[i].Left := NowLeft;
NowLeft := NowLeft + SeriesCode[i].Width + LENDIV; if TempStr = '*' then
begin
(SeriesCode[i] as TEdit).Text := '';
TempTag:=TempTag+1;
(SeriesCode[i] as TEdit).tag := TempTag;
//todo:编译不通过 <<------------------
//(SeriesCode[i] as TEdit).OnClick:=CodeEditClick;
end
else
(SeriesCode[i] as TEdit).Text := TempStr; //如果有提示信息
if (pos('(', TempStr) > 0) and (pos(')', TempStr) > 0) and (pos(')', TempStr) > pos('(', TempStr)) then
begin
HintStr := copy(TempStr,
pos('(', TempStr) + 1,
pos(')', TempStr) - pos('(', TempStr) - 1);
(SeriesCode[i] as TEdit).Text := copy(TempStr, 1, pos('(', TempStr) - 1);
end; SeriesCode[i].Visible := true; end;
//如果是-号,则生成label
if (TempStr = '-') then
begin
SeriesCode[i] := TLabel.Create(nil);
SeriesCode[i].Visible := false;
SeriesCode[i].Parent := CodePanel;
SeriesCode[i].Name := 'CODE' + inttostr(i);
SeriesCode[i].Height := HEIGHTPUB;
SeriesCode[i].top := TOPPUB;
SeriesCode[i].Width := LENDIV; SeriesCode[i].Left := NowLeft;
NowLeft := NowLeft + SeriesCode[i].Width + LENDIV; (SeriesCode[i] as TLabel).caption := CHRDIV; SeriesCode[i].Visible := true; end;
end; if NowLeft > CodePanel.Parent.Width then
CodePanel.Width := NowLeft
else
CodePanel.Width := CodePanel.Parent.Width;
end;//编码的单击事件,得到当前编码的可选项
procedure CodeEditClick(Sender: TObject);
begin
showmessage('a');
end;此代码在公共单元,被主窗体调用,但有问题。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure ButtonOnClick(Sender : TObject);
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ButtonOnClick(Sender: TObject);
begin
case TButton(Sender).Tag of
0 : begin
ShowMessage('Button0.Clicked');
end;
1 : begin
ShowMessage('Button1.Clicked');
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
for i := 0 to 1 do
with TButton.Create(self) do
begin
OnClick := ButtonOnClick;
Tag := i;
Parent := Self;
Top := (i+1)*100;
Left := 50;
Caption := format('Button%d',[i]);
end;
end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure ButtonOnClick(Sender : TObject);
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}// 如果FormCreate是这样.
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
for i := 0 to 1 do
begin
with TButton.Create(self) do
begin
OnClick := ButtonOnClick;
Tag := i;
Parent := Self;
Top := (i+1)*100;
Left := 50;
Caption := format('Button%d',[i]);
end;
with TEdit.Create(self) do
begin
tag:=i;
Parent:=self;
top:=(i+1)*100;
left:=80;
end;
end;
end;
procedure TForm1.ButtonOnClick(Sender: TObject);
begin
case TButton(Sender).Tag of
0 : begin
{ 这里该如何给TEdit赋值? 假设按下第一个button就给第一个EDIT赋值,按第二个BUTTON就能第二个赋值... }
end;
1 : begin
ShowMessage('Button1.Clicked');
end;
end;
end;
end.