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