什么情况下image的onclick事件无法响应

wjdragon 2003-06-12 10:16:07
procedure TForm1.FormCreate(Sender: TObject);
begin
image:= TImage.Create(self);
with image do
begin
Left := 100;
Top := 100;
parent:= self;
visable:= true;
enabled:= true;
width:= 20;
height:= 20;
Imagelist1.GetBitmap(0,image.Picture.Bitmap);
image.onclick:=imageonclick;
end;

procedure TForm1.imageonclick(Sender: TObject);
begin
showmessage('ok');
end;
以上点击image时,可以响应onclick事件,
当enabled为true,visiable为true时,什么情况下image的onclick事件无法响应
...全文
461 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
hkbarton 2003-06-13
  • 打赏
  • 举报
回复
这样的话容易和单击产生冲突啊,不如设置使其双击时才可拖动
hkbarton 2003-06-13
  • 打赏
  • 举报
回复
要关灯了,只有明天给你试了
VisualLion 2003-06-13
  • 打赏
  • 举报
回复
OnStartDrag事件里写上你在MouseDown里的代码,我想是可以的
wjdragon 2003-06-13
  • 打赏
  • 举报
回复
情况是这样的:动态的创建了若干个image用于表示某个网络中的若干节点,这些节点中间的联系用若干条直线表示,当click某个节点(image)时,希望弹出一个窗体,在窗体上显示相关信息,同时又希望通过鼠标可以拖动这些节点(image)以进行人工的放置节点的位置。所以产生了以上的逻辑
VisualLion 2003-06-13
  • 打赏
  • 举报
回复
同意 firetoucher(风焱)
wjdragon 2003-06-13
  • 打赏
  • 举报
回复
nodeImageA[i].OnDblClick:=dbclick;我在formcreate中加入了该句,同样没有反应
firetoucher 2003-06-13
  • 打赏
  • 举报
回复
你可以在drag中判断,但你又要响应拖动,又要响应click本来就不太合理,
为什么不用双击dblclick
wjdragon 2003-06-13
  • 打赏
  • 举报
回复
我希望的是不拖动的时候,点击image弹出一窗体,而不是在开始拖动的时候去处理mousedown的东西
moi 2003-06-13
  • 打赏
  • 举报
回复
看来是一个鼠标单击和拖动,双击的判定问题了?
VisualLion 2003-06-13
  • 打赏
  • 举报
回复
你可以在OnStartDrag事件里写上你在MouseDown里的代码
wjdragon 2003-06-13
  • 打赏
  • 举报
回复
在mouseup里是可以写,但我的确想知道在我上面说的那种情况下,能否解决?
VisualLion 2003-06-13
  • 打赏
  • 举报
回复
我想你可以在MouseUP里面写你的代码
myling 2003-06-13
  • 打赏
  • 举报
回复
呵呵,看了题目就回


原来搂主的问题不是这样


哈哈哈
myling 2003-06-13
  • 打赏
  • 举报
回复
Var
TemClick : Procedure(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer) Of Object;
Begin
//判断CheckBox的onClick事件是否有内容
If Assigned(Form1.click) Then
Begin
TemClick := Form1.click;
//屏蔽onClick事件代码
Form1.click.onClick := Nil;
//干你的事
……
……
//恢复
Form1.click := TemClick;
End;
End
wjdragon 2003-06-13
  • 打赏
  • 举报
回复
to VisualLion(狮子) 注释掉DragMode := dmAutomatic; 的确可以使onclick响应,谢谢,但是原本image可以拖动的功能却没有了,我得拖动是这样的
procedure TForm1.TabSheet1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
(source as TImage).Left:=x;
(source as TImage).Top:=y;
end;
能否有办法使onclick和利用上述拖动能同时实现的?
syl79 2003-06-13
  • 打赏
  • 举报
回复
image.onclick:=nil;
VisualLion 2003-06-13
  • 打赏
  • 举报
回复
DragMode := dmAutomatic; //注释掉这行
wjdragon 2003-06-13
  • 打赏
  • 举报
回复
设置成双击也会产生冲突,在form上这样是可以的,但是在tabsheet上我不明白为什么会产生冲突,我现在已经决定采取这样的方法:
对动态创建的image的OnMouseDown事件=imageOnMouseDown(自定义的),dragmode仍然为dmAutomatic;用右键点击来触发自定义事件。右键的down和拖动不冲突
谢谢大家给于这么多诚恳的建议,再次谢谢了
wjdragon 2003-06-13
  • 打赏
  • 举报
回复
谢谢了,做了一个完整的小试验,如下:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ExtCtrls, ImgList, ComCtrls;

type
TForm1 = class(TForm)
PageControl1: TPageControl;////
TabSheet1: TTabSheet; ////
ImageList1: TImageList;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
nodeImageA : array[1..250] of TImage;
procedure ShapeOnClick(Sender: TObject);
// procedure click(Sender: TObject; Button: TMouseButton; Shift:
//TShiftState; X, Y: Integer);

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
Randomize;
for i:=1 to 250 do
begin

nodeImageA[i] := TImage.Create(tabsheet1);
Imagelist1.GetBitmap(0,nodeImageA[i].Picture.Bitmap);
with nodeImageA[i] do
begin
Width :=10;
Height:= 15;
DragMode := dmAutomatic;
DragKind := dkDrag;

Parent := tabsheet1;
Left :=random(tabsheet1.Width-10);
Top:= random(tabsheet1.Height-10);
Visible:=true;
Enabled := true;
BringToFront;
OnClick := ShapeOnClick; ////点击image(节点)触发shapeonclick事件
end;
// nodeImageA[i].OnMouseDown:=click;
end;

end;
procedure TForm1.ShapeOnClick(Sender: TObject);
begin

showmessage('click ok');//////////////

end;

//procedure TForm1.click(Sender: TObject; Button: TMouseButton;
// Shift: TShiftState; X, Y: Integer);
//begin
//showmessage('ok');
//end;

end.
不管是click还是通过onmousedown,单击image 无任何反应
wjdragon 2003-06-12
  • 打赏
  • 举报
回复
对不起,大家,在做的东西很繁杂,我表达不清楚,是这样的:我希望动态创建一些image,宽20,高20,想在他们的onclick里写入自己的要处理的。像上面所说的,我试过的确可以响应onclick,但是当我移入要做的工程里的时候单击这些image却死活没有反应,我不明白为什么?
部分代码如下:
……
nodeImageA : array[1..250] of TImage;
……
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
for i:=1 to 250 do
begin

nodeImageA[i] := TImage.Create(tabsheet7);
Imagelist1.GetBitmap(0,nodeImageA[i].Picture.Bitmap);
with nodeImageA[i] do
begin
Width :=10;
Height:= 15;
DragMode := dmAutomatic;
DragKind := dkDrag;

Parent := tabsheet7;
Left :=random(tabsheet7.Width-10);
Top:= random(tabsheet7.Height-10);
Visible:=true;
Enabled := true;
BringToFront;
OnClick := ShapeOnClick; ////点击image(节点)触发shapeonclick事件
end;
end;
end;

procedure TForm1.ShapeOnClick(Sender: TObject);
begin

showmessage('click ok');//////////////

end;

主要的就是这样的,但是click那些 image时,没有希望的click ok弹出!
谢谢你们,帮帮忙
加载更多回复(3)

5,392

社区成员

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

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