![]() |
Komponente zur Designzeit die Zweite
Moin...
Ich habe da noch ein Problem: Nachdem ich ![]() Nachdem ich dem Button eine eigene Property zugewiesen habe, nömlich eine zweite Farbe, meckert der Compiler wieder. Und zwar kann er analog zu Left jetzt HighlightedColor vom Typ TColor nicht lesen. Der Button lässt sich auf das Form ziehen und wenn man starten will kommt die Meldung. Vielleicht kann mir jemand - auch wenn ich normal kein Freund davon bin - einen Codeschnipsel posten, der dokumentiert, wie man einer Komponente eine Property zuweist, die dann auch zur Designzeit verarbeitet werden kann. Remember: Wenn ich die Klasse zur Laufzeit einbinde und ein Objekt erzeuge gehts... *völlig fertig und hat keine große Lust mehr*... Danke... |
Re: Komponente zur Designzeit die Zweite
Zeig du doch mal, wie du es bisher versuchst.
Hast du einen Defaultwert für das Property vergeben? Wenn ja, hast du mal versucht zusätzlich im Constructor einen Wert zuzuweisen? Ich habs doch richtig verstanden, dass das Property Highligtedcolor im Designer keinen Wert hat und es darum knallt, oder? |
Re: Komponente zur Designzeit die Zweite
Moin...
Ich glaube so habe ich noch nie mit einem Problem gekämpft... Sei mir nicht böse, ich poste mal alles... Das stellt meinen letzten Stand dar... ist schon zig mal wieder umgeworfen und neu gemacht... Derzeitiges Problem: Komponente wird erzeugt, liegt mit allen Werten (die auch korrekt sind) auf dem Form und wenn die App startet ist nicht das shape sondern der Button zu sehen. Ich dachte, wenn ich den Konstruktor überschreibe, dann erscheint nicht mehr der Button?!?
Delphi-Quellcode:
:wall: :wall: :wall: :wall: :wall: *säuftz*
type
TBluBtn = class(TButton) procedure AnimationTimer(Sender: TObject); private Form: TForm; Panel: TPanel; FColor: TColor; FCaption: String; FOnClick: TNotifyEvent; procedure SetColor(const Value: TColor); procedure SetCaption(const Value: String); procedure DoOnClick(Sender: TObject); protected public published constructor Create(AOwner: TComponent);override; property HighlightedColor: TColor read FColor write SetColor; property Caption: String read FCaption write SetCaption; property onClick: TNotifyEvent read FOnClick write FOnClick; end; procedure Register; var shape: TShape; Lbl: TLabel; timer: TTimer; implementation procedure Register; begin RegisterComponents('Standard', [TBluBtn]); end; procedure TBluBtn.DoOnClick(Sender: TObject); begin If Assigned(FOnClick) Then FOnClick(Self); end; constructor TBluBtn.Create(AOwner: TComponent); begin inherited create(AOwner); FCaption:='BlueButton'; Self.Form:=Form; Self.Panel:=Panel; Self.FColor:=clSkyblue; shape:=TShape.Create(Self); shape.Shape:=stRoundRect; shape.Height:=20; shape.Brush.Color:=Self.FColor; shape.Pen.Color:=ColorAdjustLuma(Self.FColor,-70,false); Lbl:=TLabel.Create(Self); Lbl.AutoSize:=true; Lbl.Transparent:=true; Lbl.Font.Color:=clGray; Lbl.Caption:=FCaption; LbL.OnClick:=DoOnClick; timer:=TTimer.Create(Self); timer.Interval:=1; timer.OnTimer:=AnimationTimer; timer.Enabled:=true; shape.Parent:=(AOwner as TForm); Lbl.Parent:=(AOwner as TForm); Form:=(AOwner as TForm); Panel:=nil; end; procedure TBluBtn.SetCaption(const Value: String); begin FCaption:=Value; end; procedure TBluBtn.AnimationTimer(Sender: TObject); var pt: TPoint; ThisPanel: TPanel; begin ThisPanel:=TPanel.Create(self); ThisPanel.Top:=0; ThisPanel.Left:=0; if Panel <> nil then ThisPanel:=Panel; GetCursorPos(pt); if (pt.X > Form.Left+ThisPanel.Left+shape.Left+4) AND (pt.X < Form.Left+ThisPanel.Left+shape.Left+shape.Width+4) AND (pt.Y > Form.Top+ThisPanel.Top+shape.Top+23) AND (pt.Y < Form.Top+ThisPanel.Top+shape.Top+shape.Height+23) then begin shape.Visible:=true; Lbl.Font.Color:=clBlack; end else begin shape.Visible:=false; Lbl.Font.Color:=clGray; end; //Weil Left sonst nicht das Objekt neu zeichnet... ist zugegebenermaßen ein bissel unschön shape.Brush.Color:=FColor; shape.Pen.Color:=ColorAdjustLuma(Self.FColor,-70,false); shape.Left:=Self.Left; shape.Top:=Self.Top; shape.Width:=Lbl.Width+20; Lbl.Top:=Shape.Top+3; Lbl.Left:=Shape.Left+9; Lbl.Caption:=FCaption; end; procedure TBluBtn.SetColor(const Value: TColor); begin FColor:=Value; end; |
Re: Komponente zur Designzeit die Zweite
:gruebel:
Warum leitest du es denn von TButton ab, wenn du keinen Button willst? Auch wenn du den Konstruktor überschreibst. Mit Inherited rufst du den Konstruktor des Vorgängers ( TButton ) ja trotzdem auf. Und das wirst du auch müssen, sonst wirste ne Menge Exceptions fangen, weil die Eigenschaften nicht richtig initialisiert sind. Ich hab die Klasse von TButton nicht im Kopf, aber schau doch mal, ob du dich in die Paint-Methode hängen und das zeichnen des Buttons verhindern kannst. Oder du nimmst statt TButton einen Vorfahren desselbigen oder eine ganz andere Klasse. Zu den Properties schlag mal in der Delphi Hilfe nach und schau dir mal Default bei den Properties an! Und den Konstruktor bitte im Public-Teil. |
Re: Komponente zur Designzeit die Zweite
Zitat:
Zitat:
Zitat:
Zitat:
Wer hat das bloß erfunden..... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz