中国程序员联盟 正在重新改版中ing 不便之处还请见谅 改版后将内容涉及java delphi .net php
 
  首页 | 数据库开发 | 网络通讯 | 多线程 | 多媒体开发 | 图像处理 | 程序人生 | 系统函数 | 控件开发 | Web服务
 
  当前位置:笨鱼delphi技术网>控件开发>控件使用>文章内容

delphi 如何将属性在设计期保存到DFM文件(中)

来源:国外 关于:Yoganand Aiyadurai 发布时间:2007-07-21   [收藏] [推荐]
 TMyComponent }
constructor TMyComponent.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FMyTable := TMyTable.Create;
end;
destructor TMyComponent.Destroy;
begin
  FMyTable.Free;
  FMyTable := nil;
  inherited Destroy;
end;
procedure TMyComponent.SetTables(Value: TMyTable);
begin
  {}
end;
function TMyPropertyEditor.GetAttributes: TPropertyAttributes;
begin
  Result := [paDialog, paReadOnly, paRevertable];
end;
procedure TMyPropertyEditor.Edit;
var
  MyComponent: TPersistent;
  FMyComponent: TMyComponent;
  MyDialog: TfmPropDlg;
begin
  MyComponent := GetComponent(0);
  if MyComponent is TMyComponent then
  begin
    FMyComponent := TMyComponent(MyComponent);
    MyDialog := TfmPropDlg.Create(Application);
    try
      MyDialog.FMyComponent := FMyComponent;
      MyDialog.FmyPropertyEditor := Self;
      MyDialog.ShowModal;
    finally
      MyDialog.Free;
      MyDialog := nil
    end;
  end;
end;
function TMyPropertyEditor.GetValue: string;
begin
  FmtStr(Result, '(%s)', [GetPropType^.Name]);
end;
procedure Register;
begin
  RegisterComponents('YOGI', [TMyComponent]);
  RegisterPropertyEditor(TypeInfo(TMyTable), TMyComponent, 'MyTables',
    TMyPropertyEditor);
  RegisterComponentEditor(TMyComponent, TMyEditorPopup);
end;
{ TMyEditorPopup }
procedure TMyEditorPopup.Edit;
var
  //  MyComponent : TPersistent;
  FMyComponent: TMyComponent;
  MyDialog: TfmPropDlg;
begin
  if Component is TMyComponent then
  begin
    FMyComponent := TMyComponent(Component);
    MyDialog := TfmPropDlg.Create(Application);
    try
      MyDialog.FMyComponent := FMyComponent;
      MyDialog.FMyEditorPopup := Self;
      MyDialog.ShowModal;
    finally
      MyDialog.Free;
      MyDialog := nil;
    end;
  end;
end;
procedure TMyEditorPopup.ExecuteVerb(Index: Integer);
begin
  if (Index = 0) then
    Edit;
end;
function TMyEditorPopup.GetVerb(Index: Integer): string;
begin
  if Index = 0 then
    Result := 'Yoganand''s Editor';
end;
function TMyEditorPopup.GetVerbCount: Integer;
begin
  Result := 1;
end;
{ TMyTest }
end.
//**********************************************************************
//***** Property Editor's source file (pas) code *******************
//**********************************************************************
unit propDlg;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Buttons, StdCtrls, Test, dsgnintf;
type
  TfmPropDlg = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    edtStr: TEdit;
    edtInt: TEdit;
    sbAdd: TSpeedButton;
    sbDelete: TSpeedButton;
    sbOk: TSpeedButton;
    sbCancel: TSpeedButton;
    sbup: TSpeedButton;
    sbDown: TSpeedButton;
    procedure sbAddClick(Sender: TObject);
    procedure sbOkClick(Sender: TObject);
    procedure sbupClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure sbDownClick(Sender: TObject);
    procedure sbDeleteClick(Sender: TObject);
  private
    { Private declarations }
    FCurrentIndex: Integer;
  public
    { Public declarations }
    FMyComponent: TMyComponent;
    FMyPropertyEditor: TPropertyEditor;
    FMyEditorPopup: TComponentEditor;
    FPageIndex: Integer;
  end;
var
  fmPropDlg: TfmPropDlg;
implementation
{$R *.DFM}
procedure TfmPropDlg.sbAddClick(Sender: TObject);
begin
  FMyComponent.MyTables.AddItem;
  edtStr.Text := '';
  edtInt.Text := '';
  edtStr.SetFocus;
end;
procedure TfmPropDlg.sbOkClick(Sender: TObject);
begin
  FMyComponent.MyTables[FMyComponent.MyTables.ItemCount - 1].StringValue :=
    edtStr.Text;
  FMyComponent.MyTables[FMyComponent.MyTables.ItemCount - 1].IntegerValue :=
    StrtoInt(edtInt.Text);
end;
procedure TfmPropDlg.sbupClick(Sender: TObject);
var
  I: Integer;
begin
  if (FCurrentIndex > 0) then
  begin
    Dec(FCurrentIndex);
    edtStr.Text := FMyComponent.MyTables[FCurrentIndex].StringValue;
    edtInt.Text := Inttostr(FMyComponent.MyTables[FCurrentIndex].IntegerValue);
  end;
end;
procedure TfmPropDlg.FormCreate(Sender: TObject);
begin
  FCurrentIndex := 0;
end;
procedure TfmPropDlg.FormShow(Sender: TObject);
begin
  if (FMyComponent.MyTables.ItemCount > 0) then
  begin
    FCurrentIndex := 0;
    edtStr.Text := FMyComponent.MyTables[FCurrentIndex].StringValue;
    edtInt.Text := Inttostr(FMyComponent.MyTables[FCurrentIndex].IntegerValue);
  end;
end;
procedure TfmPropDlg.sbDownClick(Sender: TObject);
begin
  if (FCurrentIndex < (FMyComponent.MyTables.ItemCount - 1)) then
  begin
    Inc(FCurrentIndex);
    edtStr.Text := FMyComponent.MyTables[FCurrentIndex].StringValue;
    edtInt.Text := Inttostr(FMyComponent.MyTables[FCurrentIndex].IntegerValue);
  end;
end;
procedure TfmPropDlg.sbDeleteClick(Sender: TObject);
begin
  if (FMyComponent.MyTables.ItemCount > 0) then
  begin
    FMyComponent.MyTables.DeleteItem(FCurrentIndex);
    FCurrentIndex := 0;
    edtStr.Text := FMyComponent.MyTables[FCurrentIndex].StringValue;
    edtInt.Text := Inttostr(FMyComponent.MyTables[FCurrentIndex].IntegerValue);
  end;
end;
end.

[浏览: 次]   
上一篇:delphi 如何保存属性到运行期使用(上)   下一篇:delphi 如何保存属性到运行期使用(下)
[收藏] [推荐] [返回顶部] [打印本页] [关闭窗口]  
    评论加载中…
google adsense热点文章
·delphi treeview 使用
·delphi delphi下对象类别检查
·delphi 组件序列化
·delphi 如何在DBGRID里添加行序号
·delphi 组件用户自定义设计期工具
·delphi 显示GRID单Cell框的Hint
·delphi 如何保存属性到运行期使用(上)
·delphi 组件序列化
·delphi 如何将系统所有菜单列到树上Tre
·delphi 如何保存属性到运行期使用(下)
·delphi 如何保存Blob类型字段到数据库
·delphi VCL控件机制与VCL.net控件机制
     delphi技术网 | firefox 下载 | Avant Browser下载 | dedecms 技术网 | drupal 爱好者 | php 技术网
  Copyright@www.delphichm.com,2006-2009.All Rights Reserved.
 
程序员联盟 | delphi Java .net|QQ:707102932