AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem im constructor einer Komponente

Ein Thema von runningsoft · begonnen am 26. Mai 2021 · letzter Beitrag vom 26. Mai 2021
Antwort Antwort
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#1

Problem im constructor einer Komponente

  Alt 26. Mai 2021, 18:20
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:
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;
Danke für Eure Hinweise
Miniaturansicht angehängter Grafiken
tippanelrounded.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Problem im constructor einer Komponente

  Alt 26. Mai 2021, 18:22
Hast Du es mal mit self versucht?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Problem im constructor einer Komponente

  Alt 26. Mai 2021, 18:30
Dachte ich auch erst, aber da hängt das Programm in einer Endlosschleife fest und lässt sich noch nicht mal compilieren.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Problem im constructor einer Komponente

  Alt 26. Mai 2021, 18:37
Es lässt sich nicht kompilieren, hängt aber in einer Endlosschleife?

[edit] Ich kann das Problem nicht nachvollziehen, mein Testcode:
Delphi-Quellcode:
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.
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (26. Mai 2021 um 18:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Problem im constructor einer Komponente

  Alt 26. Mai 2021, 18:47
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 FCloseImage.Parent := AOwner as TWinControl; , dann läuft es. Aber natürlich ist dann das TImage auf der Form platziert und nicht auf meinem Panel.
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
108 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Problem im constructor einer Komponente

  Alt 26. Mai 2021, 19:09
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Problem im constructor einer Komponente

  Alt 26. Mai 2021, 20:21
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#8

AW: Problem im constructor einer Komponente

  Alt 26. Mai 2021, 20:22
Lass mal probehalber das Parent := AOwner as TWinControl; weg.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz