![]() |
Problem im constructor einer Komponente
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich bastele gerade an einer Komponente, abgeleitet von TCustomControl (siehe Grafik). Probleme bereitet mir momentan die Positionierung des als Schließsymbol vorgesehenen TImages. Ich habe keine Idee, wie die Syntax dafür lautet, im constructor der Komponente die soeben erzeugte Komponente dem ebenfalls im constructor erzeugten TImage als Parent zuzuweisen. Hier mein bisheriger Code:
Delphi-Quellcode:
Danke für Eure Hinweise
constructor TSDTipPanel.Create(AOwner: TComponent);
begin inherited Create(AOwner); //TArrowShape (Pfeildreieck) FArrow := TArrowShape.Create; FArrow.FArrHeight := 20; FArrow.FArrLeft := 20; FArrow.FArrWidth := 20; FArrow.FArrType := atLeft; FArrow.FArrPos := apTop; FArrow.OnChange := StyleChanged; //zusätzliche Initialisierungen Self.Color := clWhite; Self.Height := 100; Self.Width := 200; Self.Caption := ''; Parent := AOwner as TWinControl; FRadius := 10; FBrush := TBrush.Create; FBrush.OnChange := StyleChanged; FBorderBrush := TBrush.Create; FBorderBrush.Style := bsSolid; FBorderWidth := 1; FBorderColor := clSilver; //Image als Schließsymbol FCloseImage := TImage.Create(Self); FCloseImage.Parent := ???; //<-- hier klemmts, was muss hier stehen FCloseImage.Canvas.Pen.Color := clBlack; FCloseImage.Canvas.Pen.Width := 1; FCloseImage.Top := 35; FCloseImage.Left := 60; FCloseImage.Width := 20; FCloseImage.Height := 20; Visible := true; end; |
AW: Problem im constructor einer Komponente
Hast Du es mal mit self versucht?
|
AW: Problem im constructor einer Komponente
Dachte ich auch erst, aber da hängt das Programm in einer Endlosschleife fest und lässt sich noch nicht mal compilieren.
|
AW: Problem im constructor einer Komponente
Es lässt sich nicht kompilieren, hängt aber in einer Endlosschleife?
[edit] Ich kann das Problem nicht nachvollziehen, mein Testcode:
Delphi-Quellcode:
[/edit]
unit Unit2;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.ExtCtrls; type TDingens = class(TCustomControl) private FImage: TImage; public constructor Create(AOwner: TComponent); override; end; TForm2 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } FDingens: TDingens; public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} { TDingens } constructor TDingens.Create(AOwner: TComponent); begin inherited; Width := 400; Height := 300; FImage := TImage.Create(self); FImage.Parent := self; FImage.Left := 0; FImage.Top := 0; FImage.AutoSize := true; FImage.Picture.LoadFromFile(...); // Irgendeine Grafik, in meinem Fall ein Icon end; procedure TForm2.FormCreate(Sender: TObject); begin FDingens := TDingens.Create(self); FDingens.Parent := self; FDingens.Left := 10; FDingens.Top := 10; end; end. |
AW: Problem im constructor einer Komponente
Die Komponente selbst lässt sich noch compilieren und auch installieren. Aber sobald ich sie in meinem Testprogramm auf der Form platziere, flackert die Grafik und die Testanwendung lässt sich nicht compilieren. Es lässt sich noch nicht mal die IDE beenden.
Ich hab spaßeshalber als Parent des TImages mal das gleiche wie für die Komponente selbst eingetragen
Delphi-Quellcode:
, dann läuft es. Aber natürlich ist dann das TImage auf der Form platziert und nicht auf meinem Panel.
FCloseImage.Parent := AOwner as TWinControl;
|
AW: Problem im constructor einer Komponente
Das Problem hat sich wohl erledigt. Ich hatte die Grafik für das Schließsymbol nicht gleich beim Createn gezeichnet, sondern erst in der Paint-Prozedur der "Mutter"-Komponente. Da hing das ganze wohl dann in einer Endlosschleife fest.
Jetzt male ich gleich im constructor auf dem Canvas des TImages, dann funktionierts. Danke für die Hilfe und den Beispielcode, der hat mich auf die richtige Spur gebracht :thumb: |
AW: Problem im constructor einer Komponente
Aber wenn Du sowieso selber zeichnest, wäre da eine TPaintBox nicht einem TImage vorzuziehen? Oder alternativ die Unterkomponente ganz weglassen und die Paint-Methode Deines TCustomControl benutzen.
|
AW: Problem im constructor einer Komponente
Lass mal probehalber das
Delphi-Quellcode:
weg.
Parent := AOwner as TWinControl;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:09 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