新手求助,ScrollBox1动态创建的IMAGE怎么给事件.............
ADOQuery1.Close;
ADOQuery1.SQL.Text:='SELECT * FROM img';
ADOQuery1.Open;
if Length(img)>0 then
begin
for i:= 0 to Length(img)-1 do
begin
FreeAndNil(img[i]);
end;
end;
SetLength(img,ADOQuery1.RecordCount);
for i:= 0 to ADOQuery1.RecordCount-1 do
begin
img[i]:= TImage.Create(ScrollBox1);
img[i].Parent:= ScrollBox1;
img[i].Stretch:= True;
img[i].Name:= 'img'+IntToStr(i);
img[i].Width:= 100;
img[i].Height:= 100;
img[i].Top:= iHtoH + (100+iHtoH) * (I div iPerLine - integer((I mod iPerLine)=0));
img[i].Left:= iWtoW + (iWidth+iWtoW) * ((I-1) mod iPerLine);
img[i].Picture.Assign(GetFieldImg(ADOQuery1.FieldByName('img')));
img[i].OnClick:= //这里的事件怎么处理?我想点击ScrollBox1里的小图片就显示放大的图片到IMAGER控件里.
ADOQuery1.Next;
end;
[解决办法]
假定你的单元是Unit1,窗体是Form1,这么弄:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
//....
private
{ Private declarations }
procedure ImageClick(Sender: TObject);//自己写一个共用的事件
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ImageClick(Sender: TObject);
var i:integer;
s:string;
begin
s:=TImage(Sender).Name;//取出图片的名字
i:=strtoint(copy(s,4,length(s)));//取出图片的序号
case i of //根据序号作不同的处理
0:begin
//....
end;
1:begin
//....
end;
//....
end;
end;
procedure .... //此处是你原来的过程
begin
//......
for i:= 0 to ADOQuery1.RecordCount-1 do begin
//....
img[i].OnClick:=ImageClick; //将所有图片都关联到同一个事件
ADOQuery1.Next;
end;
end;
end.