熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

屬性和控件編輯器

2022-06-13   來源: Delphi編程 


  Delphi提供了開放的API是程序員可以增強Delphi IDE的功能共有種開放工具的APIs:屬性編輯器控件編輯器專家/導航和版本控制系統本文討論屬性編輯器和控件編輯器給出的例子說明如何寫自己的Delphi屬性控件編輯器

  屬性編輯器
屬性編輯器是Delphi IDE的擴展這聽起來非常復雜和困難但是實際上是很簡單的我們可以為枚舉類型構造一個屬性編輯器記得TForm的顏色屬性嗎?當我們想改變它的值看到了下拉框中列出了所有的可選值那就是枚舉類型的屬性編輯器我們也同樣能做到只需要幾行代碼沒什麼特別的注意到程序員並沒有寫一個屬性編輯器而是通知Delphi使用枚舉類型的屬性編輯器為它的枚舉特別定義的

  現有的屬性編輯器

  在我們搞清楚屬性編輯器到底內部是什麼之前先看看Delphi中已有的開始一個新工程在implementation中加入"uses DsgnIntf;"編譯打開browser查找TPropertyEditor(只要輸入TPrope):

  Object Browser

  如果沒算錯的話在DSGNINTF中注冊了至少個客戶屬性編輯器(custom property editors)注意事實上還有更多的屬性編輯器在其他單元中例如C:\DELPHI\LIB\PICEDITDCU中的TPictureEditor

  TPropertyEditor

  對象察看器為所有的屬性提供缺省的編輯我們可以使用不同的方法重載這種行為來使用特別的屬性編輯器(種預制的屬性編輯器都擴充了對象察看器來處理其屬性)那麼究竟是怎樣工作的呢?它是起源一個基類我們必需重載已達到我們的目的五個新的Delphi 的方法其中三個是變量相關的在編譯開關{$IFDEF WIN}中一保證一下代碼在所有的delphi版本中適用

  TypeTPropertyEditor = classprotectedfunction GetPropInfo: PPropInfo;function GetFloatValue: Extended;function GetFloatValueAt(Index: Integer): Extended;function GetMethodValue: TMethod;function GetMethodValueAt(Index: Integer): TMethod;function GetOrdValue: Longint;function GetOrdValueAt(Index: Integer): Longint;function GetStrValue: string;function GetStrValueAt(Index: Integer): string;{$IFDEF WIN}function GetVarValue: variant;function GetVarValueAt(Index: Integer): variant;{$ENDIF}procedure Modified;procedure SetFloatValue(Value: Extended);procedure SetMethodValue(const Value: TMethod);procedure SetOrdValue(Value: Longint);procedure SetStrValue(const Value: string);{$IFDEF WIN}procedure SetVarValue(const Value: variant);{$ENDIF}
publicdestructor Destroy; override;
procedure Activate; virtual;function AllEqual: Boolean; virtual;procedure Edit; virtual;function GetAttributes: TPropertyAttributes; virtual;function GetComponent(Index: Integer): TComponent;function GetEditLimit: Integer; virtual;function GetName: string; virtual;procedure GetProperties(Proc: TGetPropEditProc); virtual;function GetPropType: PTypeInfo;function GetValue: string; virtual;procedure GetValues(Proc: TGetStrProc); virtual;procedure Initialize; virtual;{$IFDEF WIN}procedure Revert;{$ENDIF}procedure SetValue(const Value: string); virtual;{$IFDEF WIN}procedure ValueAvailable: Boolean;{$ENDIF}
property Designer: TFormDesigner read FDesigner;property PrivateDirectory: string read GetPrivateDirectory;property PropCount: Integer read FPropCount;property Value: string read GetValue write SetValue;end;

  TPropertyEditor編輯對象察看器中一個或是一串控件的一個屬性屬性編輯器根據屬性的類型而被創建由RegisterPropertyEditor注冊的類型決定稍候有一個指示程序員如何使用這些工程的例子所有的published屬性都將出現在對象察看器中當設計者進行讀寫屬性的值時其屬性編輯器(為這種屬性類型的)將被使用

<P    


From:http://tw.wingwit.com/Article/program/Delphi/201401/30267.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.