下面是我的实验,进行不下去了,请帮忙unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, AxCtrls, OleCtrls, esriControls_TLB,esriCore_TLB,ComObj;type
TTest = class(Tinterfacedobject,IWorkspaceEditEvents)
protected
function OnStartEditing(withUndoRedo: WordBool): HResult;stdcall;
function OnStopEditing(saveEdits: WordBool): HResult;stdcall;
function OnStartEditOperation: HResult;stdcall;
function OnAbortEditOperation: HResult;stdcall;
function OnStopEditOperation: HResult;stdcall;
function OnUndoEditOperation: HResult;stdcall;
function OnRedoEditOperation: HResult;stdcall;
public
constructor Create(AnAppDispatch: IUnknown; const AnAppDispIntfIID: TGUID);
destructor Destroy; override;
end; TForm1 = class(TForm)
MapControl1: TMapControl;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
ws:IWorkspace;
ptest:TTest; public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
pedit:IWorkspaceEdit;
begin
pedit:=ws as IWorkspaceEdit;
pedit.StartEditing(true);
end;procedure TForm1.FormCreate(Sender: TObject);
var
flyr:IFeatureLayer;
fcls:IFeatureClass;
pDataset:IDataset;
we:IWorkspaceEditEvents;
obj:variant;
begin
flyr:=mapcontrol1.Layer[0] as IFeatureLayer;
flyr.Get_FeatureClass(fcls);
pDataset:=fcls as IDataset;
pDataset.Get_Workspace(ws);
ws.QueryInterface(IWorkspaceEditEvents,obj);
if varisempty(obj) then
begin
//we:=ws as IWorkspaceEditEvents;
ptest:=TTest.create(ws as IUnknown,WorkspaceEditEvents);
end;
end;{ TTest }constructor TTest.Create(AnAppDispatch: IUnknown; const AnAppDispIntfIID: TGUID);
var
f:longint;
begin
InterfaceConnect(AnAppDispatch,AnAppDispIntfIID,self,f);
end;destructor TTest.Destroy;
begin
inherited;end;function TTest.OnAbortEditOperation: HResult;
beginend;function TTest.OnRedoEditOperation: HResult;
beginend;function TTest.OnStartEditing(withUndoRedo: WordBool): HResult;
begin
showmessage('sadf');
end;function TTest.OnStartEditOperation: HResult;
beginend;function TTest.OnStopEditing(saveEdits: WordBool): HResult;
beginend;function TTest.OnStopEditOperation: HResult;
beginend;function TTest.OnUndoEditOperation: HResult;
beginend;end.怎么样在我开始编辑的自动会执行开始编辑事件中的代码?
我看了D:\Program Files\Borland\Delphi5\Demos\Activex\Oleauto\Word8的例子,不解之处很多,请大家帮我提高提高
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, AxCtrls, OleCtrls, esriControls_TLB,esriCore_TLB,ComObj;type
TTest = class(Tinterfacedobject,IWorkspaceEditEvents)
protected
function OnStartEditing(withUndoRedo: WordBool): HResult;stdcall;
function OnStopEditing(saveEdits: WordBool): HResult;stdcall;
function OnStartEditOperation: HResult;stdcall;
function OnAbortEditOperation: HResult;stdcall;
function OnStopEditOperation: HResult;stdcall;
function OnUndoEditOperation: HResult;stdcall;
function OnRedoEditOperation: HResult;stdcall;
public
constructor Create(AnAppDispatch: IUnknown; const AnAppDispIntfIID: TGUID);
destructor Destroy; override;
end; TForm1 = class(TForm)
MapControl1: TMapControl;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
ws:IWorkspace;
ptest:TTest; public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
var
pedit:IWorkspaceEdit;
begin
pedit:=ws as IWorkspaceEdit;
pedit.StartEditing(true);
end;procedure TForm1.FormCreate(Sender: TObject);
var
flyr:IFeatureLayer;
fcls:IFeatureClass;
pDataset:IDataset;
we:IWorkspaceEditEvents;
obj:variant;
begin
flyr:=mapcontrol1.Layer[0] as IFeatureLayer;
flyr.Get_FeatureClass(fcls);
pDataset:=fcls as IDataset;
pDataset.Get_Workspace(ws);
ws.QueryInterface(IWorkspaceEditEvents,obj);
if varisempty(obj) then
begin
//we:=ws as IWorkspaceEditEvents;
ptest:=TTest.create(ws as IUnknown,WorkspaceEditEvents);
end;
end;{ TTest }constructor TTest.Create(AnAppDispatch: IUnknown; const AnAppDispIntfIID: TGUID);
var
f:longint;
begin
InterfaceConnect(AnAppDispatch,AnAppDispIntfIID,self,f);
end;destructor TTest.Destroy;
begin
inherited;end;function TTest.OnAbortEditOperation: HResult;
beginend;function TTest.OnRedoEditOperation: HResult;
beginend;function TTest.OnStartEditing(withUndoRedo: WordBool): HResult;
begin
showmessage('sadf');
end;function TTest.OnStartEditOperation: HResult;
beginend;function TTest.OnStopEditing(saveEdits: WordBool): HResult;
beginend;function TTest.OnStopEditOperation: HResult;
beginend;function TTest.OnUndoEditOperation: HResult;
beginend;end.怎么样在我开始编辑的自动会执行开始编辑事件中的代码?
我看了D:\Program Files\Borland\Delphi5\Demos\Activex\Oleauto\Word8的例子,不解之处很多,请大家帮我提高提高
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货