Einzelnen Beitrag anzeigen

torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Benötige Hilfe beim Entwickeln einer Komponente

  Alt 29. Aug 2007, 06:11
Hallo Wissende,

ich möchte/muss eine eigene Komponente entwickeln, die im Prinzip wie ein Panel aufgebaut ist, nur etwas anders aussieht und etwas mehr zu bieten hat. Dazu möchte/muss ich wohl nun erstmalig eine eigene Komponente entwickeln. Das einzige Tutorial was bisher finden konnte, war hier zu finden. http://www.dsdt.info/tutorials/kompentwickeln/?page=1 Ich finde, dass es dort eingermaßen gut erläutert wurde und suche hier keinen, der mir die komplette Arbeit abnimmt, sondern nur hin und wieder jemand, der mir zeigt, wo ich wie was zu tun habe, damit es klappen kann.

Als Add-On benötige ich folgendes.
einen Border mit abgerundeten Ecken
Hintergrund einfarbig oder als Gradient horizontal, vertikal oder diagonal
Aufname eine Bildes mit den abgerundeten Ecken als Rahmen
ODER
Aufnahme, Anzeige von formtaierten Text (es wird beides NIE gleichzeitig benötigt)

Da ich das Tutorial gelesen aber nicht alles verstanden habe und auch hier im Forum schon etwas gesucht und gelesen habe, bin ich auf den Dreh gekommen, dass ich die neue Komponente von TCustomControl ableiten müsste. Folgendes habe ich derzeit erstellt, aber leider funktioniert so gut wie nichts. Warum weiss ich leider nicht.

Delphi-Quellcode:
unit myPanel;

interface

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

type
  TbdStyle = (bdSolid, bdDashed, bdClear, bdDotted);
  TGdDirection = (gdHorizontal, gdVertical, gdDiagonal);

type
  TmyPanel = class(TCustomControl)

  private
    FBgColorFrom : TColor;
    FBgColorTo : TColor;
    FPaintGradient : Boolean;
    FGradientDirection : TGdDirection;
    FBorderColor:TColor;
    FBorderStyle:TbdStyle;
    FBorderWidth:integer;
    FRoundEdges:boolean;
    FCornerWidth:integer;
    procedure SetBGColor(Value: TColor);
    { Private-Deklarationen }

  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    { Public-Deklarationen }

  published
    property BgColorFrom : TColor read FBgColorFrom write FBgColorFrom;
    property BgColorTo : TColor read FBgColorTo write FBgColorTo;
    property PaintGradient : boolean read FPaintGradient write FPaintGradient;
    property GradientDirection : TGdDirection read FGradientDirection write FGradientDirection;
    property BorderColor : TColor read FBorderColor write FBorderColor;
    property BorderStyle : TbdStyle read FBorderStyle write FBorderStyle;
    property BorderWidth : integer read FBorderWidth write FBorderWidth;
    property RoundEdges : boolean read FRoundEdges write FRoundEdges;
    property CornerWidth : integer read FCornerWidth write FCornerWidth;
    { Published-Deklarationen }

  end;

procedure Register;
  
implementation

procedure Register;
begin
  RegisterComponents('Beispiel', [TmyPanel]);
end;

constructor TmyPanel.Create(AOwner: TComponent);
begin
  //Canvas := TCanvas.Create;
  inherited Create(AOwner);
end;

destructor TmyPanel.Destroy;
begin
  inherited;
  Canvas.Free;
end;

procedure TmyPanel.SetBGColor(Value: TColor);
var
  Rect : TRect;
  notUsed : HWND;
begin
  Rect := GetClientRect;
  Canvas.Handle := GetDeviceContext(notUsed);
  if ColorToRGB(Value) > -1 then
  begin
    Canvas.Brush.Color := Value;
    Canvas.FillRect(Rect);
    FBGColorFrom := Value;
    FBgColorTo := Value;
  end;
  Canvas.Refresh;
end;

end.
Also wie Ihr sehen könnt, habe ich die ersten Schritte getan. Nun frage ich mich aber, wann und wo ich endlich was mit den ganzen Eigenschaften etwas anfangen kann!? Also so wie ich es sehe, müsste ich doch OnPaint irgendwo und irgendwie überschreiben und dann dort die Eigenschaften einfach nur auswerten.

Könnte mir bitte jemand mitteilen, wo und wie ich das realisieren muss? Also nur den Code, den ich benötige, damit OnPaint zur DesignTime und zur Laufzeit aufgerufen wird. Den Code werde ich dann selbste einpflegen, so weit und so gut es geht und hier wieder vorstellen....

Es könnte sein, dass in dem bisherigen Code schon ein Fehler ist, da mir jedes mal, nach dem Testen der Komponente mein Delphi abschmiert. SetBgColor kann, glaube ich raus. Das ist noch aus einem Beispiel eines anderen Users hier im Forum.
Danke
Tom
  Mit Zitat antworten Zitat