求救啊,delphi函数问题。。。。。

sulemon 2004-07-12 10:43:46
一个delphi中关于函数的问题。我自己定义了两个函数,在FormShow中定义了一些动态生成的image,这两个函数与之相对应。 但OnMouseDown在onshow的时候就触发了,但它应该是在鼠标右键点击的时候触发的。。。。。
我是研究了好几天还是搞不定,哪位朋友帮帮我! 真是不甚感激。。



unit u_main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, ADODB, Menus;

type
Tmain = class(TForm)
GroupBox2: TGroupBox;
Imagea: TImage;
Imageb: TImage;
Imagec: TImage;
main1: TLabel;
Label2: TLabel;
Label3: TLabel;
qry: TADOQuery;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
procedure main1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Label4Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
Procedure MyClick(Sender:TObject);
Procedure getimageid(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
public
{ Public declarations }
end;

var
main: Tmain;
implementation

Procedure MyClick(Sender:TObject);
begin
..........
end;

Procedure getimageid(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
.........
end;
{$R *.dfm}

procedure Tmain.FormShow(Sender: TObject);
var
k,j:integer;
begin
with qry do
begin
close;
sql.Clear ;
sql.Add('select * from JBQK order by ZJID') ;
open;
k:=RecordCount;
imagecount:=recordcount;
setlength(a,k);
setlength(b,k);

for j:=0 to k-1 do
begin

a[j]:=Timage.Create(Self);
a[j].Parent:=main;
a[j].Picture.LoadFromFile('c:/apply/pic.bmp') ;
a[j].Name:='image'+inttostr(j+1) ;
a[j].PopupMenu:=PopupMenu1;
a[j].Height:=33;
a[j].Width:=33 ;

b[j]:=Tlabel.Create(self);
b[j].Parent:=main;
b[j].Caption:=qry.Fields[2].Value+inttostr(qry.Fields[0].Value)+' ';

qry.Next ;
a[j].OnMouseDown:=getimageid; // 出错了!!!!!!!!!
a[j].OnDblClick:=MyClick;

end;
end;
end;
...全文
106 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
creativepeter 2004-07-13
  • 打赏
  • 举报
回复
这个问题的关键在于报的什么错,我们看看可以判断哪里的问题。
wtceo 2004-07-13
  • 打赏
  • 举报
回复
a[j].OnMouseDown:=main.getimageid; //这样试一下!

另外,如果你注销掉 a[j].OnDbClick:=MyClick;不出错的话,我想,应该是你myClick过程中的错误!
zgq19801123 2004-07-13
  • 打赏
  • 举报
回复
up
sulemon 2004-07-13
  • 打赏
  • 举报
回复
奇怪的是我把 a[j].OnDblClick:=MyClick; 注销掉就没有错误了
谁能给点意见啊
sulemon 2004-07-13
  • 打赏
  • 举报
回复
报的错误是内存地址冲突
因为getimage要读的那个Timage还没有被创建。
我就搞不懂了,没触发他怎么就运行了呢??
sulemon 2004-07-12
  • 打赏
  • 举报
回复
procedure Tmain.getimageid(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer); //得到所电击的图标的id号
begin
imageid:=strtoint(copy((Sender as Timage).Name,6,1));
end;
pilicat 2004-07-12
  • 打赏
  • 举报
回复
把你的GetImageId过程的源码贴出来看看,我估计是它的代码有问题.

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧