Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Eigene Komponente von TCustomControl > Eigenschaftsed

  Alt 11. Apr 2006, 16:20
Zitat von uligerhardt:
Ich hab's jetzt nicht nachgeprüft, aber hätte gedacht, dass Delphi für Eigenschaften vom Typ TColor automatisch den passenden Editor im OI anbietet. Hast du schon mal probiert, den RegisterPropertyEditor-Aufruf einfach wegzulassen?
Stimmt. Ich habe mal ein Beispielprogramm geschrieben (TMyColorButton)

Zitat von uligerhardt:
Außerdem benutzt du einmal die Unit Graphics und einmal die QGraphics. Ich würde mich an deiner Stelle für eine Variante entscheiden.
Stimmt. Graphics ist die VCL Variante (meine Empfehlung) und QGraphics ist die CLX Variante (nur zu empfehlen, falls Projekte auch mit Kylix kompiliert werden sollen)

Zitat von uligerhardt:
Und in der Unit EButton kannst du die Routine Register rausschmeißen - die muss nur im Designzeitpackage sein.
Stimmt, aber wenn er keine Designtimepackage braucht, dann kann er es drinn lassen.

@cherry: Ich habe mir Deine Komponente mal angeschaut und ein kleines Beispiel gemacht.
(Die Font und Caption Eingenschaften habe ich bewust weggelassen, damit das Beispiel kleiner bleibt.)

Delphi-Quellcode:
///////////////////////////////////////////////////////////////////////////////
// TMyColorButton
//
// Beispielprogramm zur Komponentenerstellung
//
// Folgende Dinge sind zu sehen:
// - eine einfache Message wird behandelt ( CM_MOUSEENTER und CM_MOUSELEAVE )
// - Propertys werden verwendet
// - bei TColor und TBrushStyle werden automatisch
// die Standard Property Editoren verwendet
// - ein protected Event wird published (OnClick)
//
// Dieser Quelltext liegt auch auf [url]www.delphipraxis.net[/url]
// ( [url]http://www.delphipraxis.net/topic80394_eigene+komponente+von+tcustomcontrol+eigenschaftseditor.html[/url] )
//
///////////////////////////////////////////////////////////////////////////////
// Das Programm ist Freeware und darf beliebig benutzt und erweitert werden.
// Es wäre nett, wenn dann auch der geänderte Quelltext in obige URL-Adresse
// gesendet wird. Dann haben alle was davon.
// Es wäre auch nett wenn mein (unser) Name in den Dateien enthalten bleibt.
// Das Programm wird von Ihnen auf eigenes Risiko eingesetzt. Ich übernehme
// keine Haftung für Schäden die durch das Programm oder die Benutzung des
// Programms entstanden sind bzw. entstehen.
///////////////////////////////////////////////////////////////////////////////
// (C) 2005, MaBuSE, member of DelphiPraxis.net
///////////////////////////////////////////////////////////////////////////////
// ReleaseNotes:
// v1.0 - 11.04.2006 - MaBuSE: Erste Version war in 10 min programmiert
///////////////////////////////////////////////////////////////////////////////

unit MyColorButton;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Graphics, Messages;

type
  TMyColorButton = class(TcustomControl)
  private
    { Private-Deklarationen }
    FmyActiveBrushColor: TColor;
    FmyBrushColor: TColor;
    FmyBrushStyle: TBrushStyle;
    FmyMouseOver: Boolean;
    FmyPenColor: TColor;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    procedure SetmyActiveBrushColor(const Value: TColor);
    procedure SetmyBrushColor(const Value: TColor);
    procedure SetmyBrushStyle(const Value: TBrushStyle);
    procedure SetmyPenColor(const Value: TColor);
  protected
    { Protected-Deklarationen }
    procedure Paint; override;
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
  published
    { Published-Deklarationen }
    property myActiveBrushColor: TColor read FmyActiveBrushColor write SetmyActiveBrushColor;
    property myBrushColor: TColor read FmyBrushColor write SetmyBrushColor;
    property myBrushStyle: TBrushStyle read FmyBrushStyle write SetmyBrushStyle;
    property myPenColor: TColor read FmyPenColor write SetmyPenColor;
    property OnClick;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [TMyColorButton]);
end;

{ TMyColorButton }

procedure TMyColorButton.CMMouseEnter(var Message: TMessage);
begin
  // wird automatisch aufgerufen wenn der Mauszeiger über dem Control ist.
  inherited;
  FmyMouseOver := true;
  RePaint;
end;

procedure TMyColorButton.CMMouseLeave(var Message: TMessage);
begin
  // wird automatisch aufgerufen wenn der Mauszeiger nicht mehr über dem Control ist.
  inherited;
  FmyMouseOver := false;
  RePaint;
end;

constructor TMyColorButton.Create(AOwner: TComponent);
begin
  inherited;
  FmyActiveBrushColor:= clRed;
  FmyBrushColor := clGreen;
  FmyBrushStyle := bsDiagCross;
  FmyMouseOver := false;
  FmyPenColor := clBlue;
end;

procedure TMyColorButton.Paint;
begin
  inherited;

  if (csDesigning in ComponentState) or (not FmyMouseOver) then
  begin
    Canvas.Brush.Color := FmyBrushColor;
  end
  else
  begin
    Canvas.Brush.Color := FmyActiveBrushColor;
  end;

  Canvas.Brush.Style := FmyBrushStyle;
  Canvas.Pen.Color := FmyPenColor;
  Canvas.Rectangle(0,0,width,height);
end;

// Die folgenden proceduren werden beim Ändern einer Property aufgerufen
// hier steht überall ein RePaint damit die geänderten Einstellungen
// auch sichtbar werden.

procedure TMyColorButton.SetmyActiveBrushColor(const Value: TColor);
begin
  FmyActiveBrushColor := Value;
  RePaint;
end;

procedure TMyColorButton.SetmyBrushColor(const Value: TColor);
begin
  FmyBrushColor := Value;
  RePaint;
end;

procedure TMyColorButton.SetmyBrushStyle(const Value: TBrushStyle);
begin
  FmyBrushStyle := Value;
  RePaint;
end;

procedure TMyColorButton.SetmyPenColor(const Value: TColor);
begin
  FmyPenColor := Value;
  RePaint;
end;

end.
Ich hoffe das hilft Dir.
Viel Spaß

[edit] url oben in Quelltext eingefügt [/edit]
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat