Einzelnen Beitrag anzeigen

Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Eigene Komponente von TCustomControl > Eigenschaftseditor

  Alt 11. Apr 2006, 15:33
Tach wohl...

Ich will mir mein eigener Button Programmieren, wie bereits im Titel erwähnt, leite ich meine
Komponente von TCustomControl ab...

Ich möchte jetzt, um die Farbe des Buttons verändern zu können, ein Eigenschaftseditor
einbinden (TColorProperty)

Nur habe ich mühe dabei..
Das Konkrete Fehlermeldung lautet:
[Fehler] EButton_API.pas(10): Undefinierter Bezeichner: 'TPropertyColor'

Hier meine zwei Dateien:
Zwei Dateien sind notwendig weil es nicht erlaubt ist die Editoren ausserhalb IDE
zu verwenden oder so.. Hier die Erklärung dazu

Datei1: EButton.pas:

Delphi-Quellcode:
unit EButton;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Graphics;

type
  TEButton = class(TCustomControl)
  private
    FFont : TFont;
    { Private-Deklarationen }
  protected
    procedure Paint; override;
    { Protected-Deklarationen }
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    { Public-Deklarationen }
  published
    property Font: TFont read FFont write FFont;
    { Published-Deklarationen }
    
  end;

procedure Register;

implementation

procedure Register; //Procedure wird bei der Komponenteninstallation verwendet!
begin
  RegisterComponents('RComponents', [TEButton]);
end;

{------------------------------------------------}
{                                                }
{                                                }
{                  TRButton                      }
{                                                }
{------------------------------------------------}

constructor TEButton.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FFont:=TFont.Create;
end;

destructor TEButton.Destroy;
begin
 FFont.Free;
 inherited Destroy;
end;

procedure TEButton.Paint;
begin
 inherited;//Zeichen Procedure des Vorfahren aufrufen.
 if csDesigning in ComponentState then //Wenn sich die Komponente in Entwicklung befindet.
 begin
  {Zeichung eines Rahmens}
   Canvas.Brush.Style := bsSolid;
   Canvas.Brush.Color := clblue;
   Canvas.Pen.Color := clblack;
   Canvas.Rectangle(0,0,width,height);//Rechteck zeichnen

   {Namen der Komponente in die Mitte schreiben}
   canvas.Font := FFont;
   canvas.TextOut((width - Canvas.TextWidth(Name)) div 2,(height - Canvas.TextHeight(Name)) div 2,name);

   {Keine weitern Zeichnungen mehr ausführen}
   exit;//Verlässt die Procedure
 end;

 {Zeichung eines Rahmens}
 Canvas.Brush.Style := bsSolid;
 Canvas.Brush.Color := clblue;
 Canvas.Pen.Color := clblack;
 Canvas.Rectangle(0,0,width,height);//Rechteck zeichnen

 {Namen der Komponente in die Mitte schreiben}
 canvas.Font := FFont;
 canvas.TextOut((width - Canvas.TextWidth(Name)) div 2,(height - Canvas.TextHeight(Name)) div 2,name);

 {Keine weitern Zeichnungen mehr ausführen}
 exit;//Verlässt die Procedure
end;

{------------------------------------------------}
{                                                }
{                                                }
{                   TEColor                      }
{                                                }
{------------------------------------------------}


end.
Datei2: EButton_API.pas:

Delphi-Quellcode:
unit EButton_API;

interface

uses
   {$ifdef ver150} DesignIntf, DesignEditors,{$else} DsgnIntf,{$endif}
   EButton,SysUtils,Classes,Controls,QGraphics;

type
  TEColor = class(TColorProperty)
  public
   procedure Edit; override;
   function GetColor : TPropertyColor; override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('RComponents', [TEButton]);
  RegisterPropertyEditor(TypeInfo(TColor), TEButton, 'Color', TRColor);
end;

{ TRColor }

procedure TColorProperty.Edit;
var
 ColorDialog: TColorDialog;
begin
  **ColorDialog := TColorDialog.Create(Application);**********{ Editor erzeugen}
  try
    ****ColorDialog.Color := GetOrdValue;*********************{ Vorhandenen Wert verwenden }
    ****if ColorDialog.Execute then************************** { Wenn der Anwender auf OK klickt ... }
      ******SetOrdValue(ColorDialog.Color);*******************{ ...das Ergebnis verwenden, um den Wert zu setzen}

  finally
    ****ColorDialog.Free;*************************************{ Editor freigeben }
  *end;
*end;

end.
Wäre echt cool wenn man da was machen könnte...

Freundliche Grüsse
und Danke zum Voraus

Cherry
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat