|
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.
|