type
datasetauto=class(TObject)
private
inserteventclick,editeventclick,posteventclick,canceleventclick,deleteeventclick:Tnotifyevent;
binsert,bedit,bdelete,bcancel,bpost:TButton
procedure initialbutton(AButton:TButton;ADataState:DataState);
procedure p_b_insert(Sender:TObject); procedure p_b_edit(Sender:TObject);
procedure p_b_delete(Sender:TObject);
procedure p_b_cancel(Sender:TObject);
procedure p_b_post(Sender:TObject);
end;
procedure DataSetAuto.InitialButton(AButton:TButton;ADataState:DataState);
begin
if not assigned(Abutton) then
begin
ShowMessage('button设置不对');
Abort;
end;
if ADataState=sInsert then
begin
InsertEventClick:=AButton.OnClick;
AButton.Enabled:=True;
AButton.Tag:=c_insert;
AButton.OnClick:=p_b_insert;
end
else if ADataState=sEdit then
begin
EditEventClick:=AButton.OnClick;
AButton.Enabled:=True;
AButton.Tag:=c_edit;
AButton.OnClick:=p_b_edit;;
end
else if ADataState=sDelete then
begin
DeleteEventClick:=AButton.OnClick;
AButton.Enabled:=True;
AButton.Tag:=c_delete;
AButton.OnClick:=p_b_delete;
end
else if ADataState=sPost then
begin
PostEventClick:=AButton.OnClick;
AButton.Enabled:=false;
AButton.Tag:=c_post;
AButton.OnClick:=p_b_post;
end
else if ADataState=sCancel then
begin
CancelEventClick:=AButton.OnClick;
AButton.Enabled:=false;
AButton.Tag:=c_cancel;
AButton.OnClick:=p_b_cancel;
end;end;
procedure DataSetAuto.p_b_cancel(Sender: TObject);
begin
CancelEventClick(Sender);
binsert.Enabled:=true;
bedit.Enabled:=true;
bdelete.Enabled:=true;
bcancel.Enabled:=false;
bpost.Enabled:=false;
end;procedure DataSetAuto.p_b_delete(Sender: TObject);
begin
DeleteEventClick(Sender);
end;procedure DataSetAuto.p_b_edit(Sender: TObject);
begin
EditEventClick(Sender);
binsert.Enabled:=false;
bedit.Enabled:=false;
bdelete.Enabled:=false;
bcancel.Enabled:=true;
bpost.Enabled:=true;
end;procedure DataSetAuto.p_b_insert(Sender: TObject);
begin
InsertEventClick(Sender);
binsert.Enabled:=false;
bedit.Enabled:=false;
bdelete.Enabled:=false;
bcancel.Enabled:=true;
bpost.Enabled:=true;
end;procedure DataSetAuto.p_b_post(Sender: TObject);
begin
PostEventClick(Sender);
binsert.Enabled:=true;
bedit.Enabled:=true;
bdelete.Enabled:=true;
bcancel.Enabled:=false;
bpost.Enabled:=false;
end;我先把某个button 传进来。
当我在实际使用的时候
把我的方法再原来事件基础上加上
但一点击 某一个button 就会提示空地址错误
求助了!
datasetauto=class(TObject)
private
inserteventclick,editeventclick,posteventclick,canceleventclick,deleteeventclick:Tnotifyevent;
binsert,bedit,bdelete,bcancel,bpost:TButton
procedure initialbutton(AButton:TButton;ADataState:DataState);
procedure p_b_insert(Sender:TObject); procedure p_b_edit(Sender:TObject);
procedure p_b_delete(Sender:TObject);
procedure p_b_cancel(Sender:TObject);
procedure p_b_post(Sender:TObject);
end;
procedure DataSetAuto.InitialButton(AButton:TButton;ADataState:DataState);
begin
if not assigned(Abutton) then
begin
ShowMessage('button设置不对');
Abort;
end;
if ADataState=sInsert then
begin
InsertEventClick:=AButton.OnClick;
AButton.Enabled:=True;
AButton.Tag:=c_insert;
AButton.OnClick:=p_b_insert;
end
else if ADataState=sEdit then
begin
EditEventClick:=AButton.OnClick;
AButton.Enabled:=True;
AButton.Tag:=c_edit;
AButton.OnClick:=p_b_edit;;
end
else if ADataState=sDelete then
begin
DeleteEventClick:=AButton.OnClick;
AButton.Enabled:=True;
AButton.Tag:=c_delete;
AButton.OnClick:=p_b_delete;
end
else if ADataState=sPost then
begin
PostEventClick:=AButton.OnClick;
AButton.Enabled:=false;
AButton.Tag:=c_post;
AButton.OnClick:=p_b_post;
end
else if ADataState=sCancel then
begin
CancelEventClick:=AButton.OnClick;
AButton.Enabled:=false;
AButton.Tag:=c_cancel;
AButton.OnClick:=p_b_cancel;
end;end;
procedure DataSetAuto.p_b_cancel(Sender: TObject);
begin
CancelEventClick(Sender);
binsert.Enabled:=true;
bedit.Enabled:=true;
bdelete.Enabled:=true;
bcancel.Enabled:=false;
bpost.Enabled:=false;
end;procedure DataSetAuto.p_b_delete(Sender: TObject);
begin
DeleteEventClick(Sender);
end;procedure DataSetAuto.p_b_edit(Sender: TObject);
begin
EditEventClick(Sender);
binsert.Enabled:=false;
bedit.Enabled:=false;
bdelete.Enabled:=false;
bcancel.Enabled:=true;
bpost.Enabled:=true;
end;procedure DataSetAuto.p_b_insert(Sender: TObject);
begin
InsertEventClick(Sender);
binsert.Enabled:=false;
bedit.Enabled:=false;
bdelete.Enabled:=false;
bcancel.Enabled:=true;
bpost.Enabled:=true;
end;procedure DataSetAuto.p_b_post(Sender: TObject);
begin
PostEventClick(Sender);
binsert.Enabled:=true;
bedit.Enabled:=true;
bdelete.Enabled:=true;
bcancel.Enabled:=false;
bpost.Enabled:=false;
end;我先把某个button 传进来。
当我在实际使用的时候
把我的方法再原来事件基础上加上
但一点击 某一个button 就会提示空地址错误
求助了!
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
event_click:TNotifyevent;
procedure p_click(Sender:TObject);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.p_click(Sender: TObject);
begin
event_click(Sender);
showmessage('a');
end;procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('a');
end;procedure TForm1.FormCreate(Sender: TObject);
begin
event_click:=button1.OnClick;
button1.OnClick:=p_click;
end;end.
同样的方法。在form里实现就没有问题