essage.Msg := Msg; Message.WParam := 0; Message.LParam := 0; Message.Result := 0; Broadcast(Message);//广播当前的变更消息 end; 其中: procedure TWinControl.Broadcast(var Message); var I: Integer; begin for I := 0 to ControlCount - 1 do begin Controls[I].WindowProc(TMessage(Message)); //改为:with TMessage(Message) do Cads[I].CadPerform(msg, WParam, LParam); if TMessage(Message).Result <> 0 then Exit; end; end; 但是,我们处理图形对象时,可能会直接调用 Cads 的CanPerform公共函数即可
{ No. 14 }需要时,动态创建你的对象
比如:http://www.delphibbs.com/keylife/iblog_show.asp?xid=824 中的 //*******方案二 当需要的时候在创建属性窗体 uses ... fProperty; type TfrmMyMap = class ... procedure OnfrmMyMapDestroy(Sender: TObject); procedure OnMapGeoSelected(AGeo: TGeometry); private FfrmProperty: TfrmProperty; procedure ShowPropertyForm(aVisible: Boolean); public end;
procedure TfrmMyMap.ShowPropertyForm(aVisible: Boolean); begin if Not Assigned(FfrmProperty) then FfrmProperty := TfrmProperty.Create(Application); FfrmProperty.Visible := aVisible; end;
procedure TfrmMyMap.OnfrmMyMapDestroy(Sender: TObject); begin if Assigned(FfrmProperty) then FfrmProperty.Free; end;
procedure TfrmMyMap.OnMapGeoSelected(AGeo: TGeometry); begin if Assigned(FfrmProperty) then FfrmProperty.MyRefresh(AGeo); end;