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.