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;
这里说明了: 1、需要时,动态创建你的对象 FfrmProperty 2、当前对象释放时,判断你的对象的合法性,然后释放动态创建的对象。
{ No. 15 }创建接口还是创建结构
//项目描述:我开发一个表格控件时,如果我将单元格设置为一个Com,则如果表格现实的信息过多的话,则装载速度无法保证,甚至于有死机的可能。我之所以用Com是为了将来每个单元格的处理和信息都可以在控件外扩展。
我的解决办法是:对于每个从Cell派生来的控件创建一个实例,通过动态创建若干个结构对象Record来记录个单元格的信息,如果需要对单元格进行操作,则将结构对象指针赋值给Cell组件,测试结果很令人满意。
所以,如果需要使用某个Com大量实例的话,尽量管理和维护一个实例,而对于其中的数据可以实行动态创建管理,速度上会有很好的效果。 另外,尽量声明一个 pMyInterface = ^IMyInterface 借口指针,参数传递或使用时,直接使用接口指针,这样可以减少调用计数函数_AddInft等,如果操作平凡也可以提高速度的。
注:此文作者笔名:JoyYuan97。(自己很菜,写不出来什么,找到好的东西希望大家一起分享,也感谢作者给我带来的经验和技巧)
希望看过的人留下意见,下面为作者的话: “另外,最好请将您转贴位置的连接给我一份。我向定期看看别人的建议。谢谢! 有好经验大家分享!”
上一页 [1] [2] |