为动态创建的控件写事件为什么编译不过去? (在线等!!!) (100分)

  • 主题发起人 主题发起人 micwolf
  • 开始时间 开始时间
M

micwolf

Unregistered / Unconfirmed
GUEST, unregistred user!
//自己定义了一个继承Tmemo的类(因为有些属性要设置),然后动态创建memo1控件然后使这个空间可以被拖动,为什么编译不过?请帮忙,立刻给分。
//编译提示错误在testmemo.MouseDown:=MyMouseDown;一行上
// [Error] main.pas(73): Not enough actual parameters
// [Error] main.pas(73): Not enough actual parameters

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMymemo = class(TMemo)
private
{ Private declarations }
public
{ Public declarations }
end;

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure MyMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
{ Public declarations }
end;

var
Form1: TForm1;
testmemo:TMymemo;
const SC_DRAGMOVE = $F017;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
testmemo:=TMymemo.Create(self);
testmemo.Parent:=self;
testmemo.MouseDown:=MyMouseDown;

end;

procedure TForm1.MyMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
TWinControl(Sender).Perform(wm_syscommand, sc_dragmove, 0);

end;

end.
 
去掉Sender试试
 
我试了,不行!
 
Sender去掉
 
对不起,我看错了。
MouseDown应在TMyMemo中定义,Memo获取焦点后就可移动了。
不能放在Form中,如果必须,用消息。
 
应该是
testmemo.onMouseDown:=MyOnMouseDown;
//如下面的
M2:=TMYRichedit.Create(self);
M2.Parent:=self;
M2.Left:=0;
M2.Top:=260;
M2.Width:=790;
M2.Height:=255;
M2.Font.Size:=13;
M2.OnChange:=M2OnChange;//连接处理过程
 
你的程序应该是:testmemo.OnMouseDown:=MyMouseDown;
如果用testmemo.onMouseDown:=MyOnMouseDown;下面的两处也要改
procedure MyMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
procedure TForm1.MyMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
TWinControl(Sender).Perform(wm_syscommand, sc_dragmove, 0);

end;
 
谢谢WoDing!!!
 

Similar threads

后退
顶部