难道就没有一个人可以解决?高手都到哪里去了?是高手的有本事就站出来!!

zsuswy 2005-04-27 06:08:08
在程序中我动态生成一个控件。我要得到它的一个事件并且在其中写自己的代码。

比如我动态生成一个Timage控件,我想得到它的onmousemove事件,鼠标在上面移动一下就在其他地方输出鼠标在image内的坐标。

我自己不知道怎么样定义出它的时间,如果随便附一个函数给它的onmousemove会编译出错,可以把其他设计时加入的控件的事件附值给他,但是又不能得到鼠标等等的相关参数信息。请高手指点!!!!!

高手,高手,高手!!!!!!!救命!!!

请高手详解!!!!!!!!!!!!!
...全文
203 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsuswy 2005-04-29
  • 打赏
  • 举报
回复
谢谢各位了,
为自己的贴顶一下,马上结贴
hellolongbin 2005-04-28
  • 打赏
  • 举报
回复
自己定义一个事件,然后将你动态创建的窗体onmousemove事件指向它
xzhifei 2005-04-28
  • 打赏
  • 举报
回复



希望你不要收了答案就走人!!!
CSDN最鄙视这种人了

chijingde 2005-04-28
  • 打赏
  • 举报
回复
还真以为是什么高难度问题,本想进来学习的……

结果-_-!
ttjacky 2005-04-28
  • 打赏
  • 举报
回复
呵呵,高手都被喊出来了,楼主如果还没搞定,大家就要吐血了
gzmhero 2005-04-28
  • 打赏
  • 举报
回复
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
public
{ Public declarations }
end;

var
Form1: TForm1;
imgTemp:TImage;

implementation

{$R *.dfm}
procedure TForm1.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label1.Caption:=IntToStr(X)+':'+IntToStr(Y);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
imgTemp:=TImage.Create(Owner);
imgTemp.Parent:=Form1;
imgTemp.Left:=10;
imgTemp.Top:=10;
imgTemp.Width:=100;
imgTemp.Height:=100;
imgTemp.OnMouseMove:=ImageMouseMove;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
imgTemp.Free;
end;

end.
qiujsh 2005-04-28
  • 打赏
  • 举报
回复
给你写了一个简单的,新建一个项目,在窗口上放一个edit控件,当然自己创建的控件要手动释放,我这里只是示范没释放,写成按扭的了,Image中这个一样。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure CustomMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.CustomMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Edit1.Text := IntToStr(X);
end;

procedure TForm1.FormShow(Sender: TObject);
var
MyButton:TButton;
begin
MyButton:=TButton.Create(self);
MyButton.Left :=100;
MyButton.Top := 100;
MyButton.Parent := self;
MyButton.OnMouseMove := CustomMouseMove;
MyButton.Visible := True;
end;

end.
pengxuan 2005-04-28
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg;

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var image1:TImage;
begin
image1:=TImage.Create(Self);
image1.Parent:=Self;
image1.Name:='image1';
image1.Height:=105;
image1.Width:=105;
image1.Picture.LoadFromFile('D:\临时目录\图片资源\JPG格式\风景\View1.jpg');
image1.OnMouseMove:=Image1MouseMove;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label1.Caption:=IntToStr(X);
Label2.Caption:=IntToStr(Y);
end;

end.
这样就可以了,我自己写的例子,楼主看看吧.关键是知道原理.
yeeyee 2005-04-28
  • 打赏
  • 举报
回复
每天穿同一条三角裤的是要注意一下这个问题。
Frank.WU 2005-04-27
  • 打赏
  • 举报
回复
首先,動態生成的控件自己必須要有onmousemove事件,如果沒有,要自己代碼實現;
然後,因為是動態生成的,所以,沒有生成之前必須防止訪問出錯。
最後,將動態生成控件的定義事件指向你寫的事件/過程。
Corn1 2005-04-27
  • 打赏
  • 举报
回复
unit ExImage;

interface

uses
SysUtils, Classes, Controls, ExtCtrls, Messages;

type
TExImage = class(TImage)
private
{ Private declarations }
FOnMouseMove: TNotifyEvent;
procedure CMMouseMove(var Msg: TMessage); message CM_MOUSEMOVE;
procedure MouseMove;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property OnMouseMove: TNotifyEvent
read FOnMouseMove
write FOnMouseMove;
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Additional', [TExImage]);
end;

procedure TExImage.CMMouseMove(var Msg: TMessage);
begin
inherited;
MouseMove;
end;

procedure TExImage.MouseMove;
begin
if Assigned(FOnMouseMove) then FOnMouseMove(Self);
end;

end.
留下些什么 2005-04-27
  • 打赏
  • 举报
回复
UP
seekmydoom 2005-04-27
  • 打赏
  • 举报
回复
覆盖他原来的方法不行吗?
qiujsh 2005-04-27
  • 打赏
  • 举报
回复
先放一个Image控件,先生成它的onmousemove方法,然后再定义一个跟它的接口一样的过程,函数声名也放在同样的地方,前边自动生成的那个可以不要了,动态生成控件是,将它的onmousemove指向这个新生成过程
fengzhengren 2005-04-27
  • 打赏
  • 举报
回复
首先要在uses中加入
ExtCtrls
先检查一下加了没?
如果加了我再继续帮你看。

5,928

社区成员

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

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