Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente:Mit Create auf erstelltes Panel zugreifen (https://www.delphipraxis.net/82978-komponente-mit-create-auf-erstelltes-panel-zugreifen.html)

Helmi 23. Dez 2006 15:05


Komponente:Mit Create auf erstelltes Panel zugreifen
 
Hallo und frohe Weihnachten,

ich steh gerade auf dem Schlauch:

Ich erzeuge eine Komponente abgeleitet von TPanel.

Im constructor werden neben 1 StaticText auch ein Panel und in diesem Panel ein Image erzeugt.

Delphi-Quellcode:
constructor TMaskFrame.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  //interne Variablen erzeugen
  FPicture           := TPicture.Create;


  //feste Werte für MaskFrame
  BevelInner         := bvNone;
  BevelOuter         := bvRaised;
  BevelWidth         := 1;
  BorderWidth        := 1;
  BorderStyle        := bsNone;
  Enabled            := true;
  Visible            := false;
  Caption            := '';

  //StaticText erzeugen
  FStatic_Caption    := TStaticText.Create(self);
  with FStatic_Caption do
    begin
      Parent := self;
{ .. }
    end;

  //Panel erzeugen
  FWork_Panel        := TPanel.Create(self);
  with FWork_Panel do
    begin
      Parent := self;
{ .. }
    end;

  //Image erzeugen
  FBackground_Image  := TImage.Create(FWork_Panel);
  with FBackground_Image do
    begin
      Parent         := FWork_Panel;
{ .. }
end;
Soweit so gut - nur wenn ich diese Komponente erzeuge, z. B.:
Delphi-Quellcode:
Maske := TMaskFrame.Create(Form1);
wird ja auf das erste Panel zugegriffen.
Ich möchte aber auf das Work_Panel mit dem o. s. Create zugreifen können.
Dies wird leider aber erst erzeugt, wenn das HauptPanel erzeugt wird.

wie könnte ich das realisieren? (ich hoffe es ist verständlich was für ein Problem ich hab)

mkinzler 23. Dez 2006 15:18

Re: Komponente:Mit Create auf erstelltes Panel zugreifen
 
Zitat:

wie könnte ich das realisieren? (ich hoffe es ist verständlich was für ein Problem ich hab)
Nicht ganz. Wann und von wo willst du darauf Zugreifen?

Christian Seehase 23. Dez 2006 15:20

Re: Komponente:Mit Create auf erstelltes Panel zugreifen
 
Moin Helmi,

Zitat:

Zitat von Helmi
(ich hoffe es ist verständlich was für ein Problem ich hab)

Wenn ich die Wahrheit sagen sollte, müsste ich lügen ;-)

Also ich habe das Problem nicht verstanden, zumal sich mir der Sinn verschliesst.

Helmi 23. Dez 2006 15:32

Re: Komponente:Mit Create auf erstelltes Panel zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
na gut

Ich versuchs mal bildlich (siehe Anhang):

Das ganze ist das erstellte Panel (nennen wir es HauptPanel).
Das gelbe Feld oben ist das StaticText, es wird auf dem HauptPanel und wird im Create des HauptPanels erzeugt.
Das blaue Feld ist das 2. Panel (nennen wir es WorkPanel).
Das liegt auch auf dem HauptPanel und wird auch im Create des HauptPanels erzeugt.

Das ganze ist eine Komponente.

Wenn ich nun diese Komponente erzeuge, und z. B. Color verändern möchte, dann passiert das auf dem HauptPanel.

Es soll aber sein, dass die erzeugte Komponente nicht auf das HauptPanel zeigt, sondern auf das Workpanel (also auf den blauen Bereich)

pacman1986 23. Dez 2006 15:37

Re: Komponente:Mit Create auf erstelltes Panel zugreifen
 
schreib ne funtion die darauf zugreift. :D

mkinzler 23. Dez 2006 15:37

Re: Komponente:Mit Create auf erstelltes Panel zugreifen
 
Also entweder eine Property für das Workpanel oder die Properties für die Eigenschaften neu Implemnetieren.

Christian Seehase 23. Dez 2006 15:41

Re: Komponente:Mit Create auf erstelltes Panel zugreifen
 
Moin Helmi,

also ich würde dieses Workpanel einfach als Eigenschaft veröffentlichen, so das die Eigenschaften für beide getrennt eingestellt werden können.
Ausserdem könntest Du auch die jeweiligen Eigenschaften direkt nach aussen führen.

Sollte das Hauptpanel aber eigentlich sowieso nicht direkt zur Verfügung stehen, frage ich mich, warum Du dann von TPanel ableitest, und nicht, z.B., von TComponent.

Helmi 23. Dez 2006 16:32

Re: Komponente:Mit Create auf erstelltes Panel zugreifen
 
Zitat:

Zitat von Christian Seehase
Moin Helmi,

also ich würde dieses Workpanel einfach als Eigenschaft veröffentlichen, so das die Eigenschaften für beide getrennt eingestellt werden können.
Ausserdem könntest Du auch die jeweiligen Eigenschaften direkt nach aussen führen.

Sollte das Hauptpanel aber eigentlich sowieso nicht direkt zur Verfügung stehen, frage ich mich, warum Du dann von TPanel ableitest, und nicht, z.B., von TComponent.

Ich hab jetzt eine property erstellt, die auf mein WorkPanel zeigt:
Delphi-Quellcode:
    property WorkPanel: TPanel   read FWork_Panel;
Auch wenn man es nicht sieht, aber das HauptPanel ist sichtbar und macht den äusseren Rand.

Aber mal blöd gefragt: Wie könnte man das mit TComponent machen?

mkinzler 23. Dez 2006 16:37

Re: Komponente:Mit Create auf erstelltes Panel zugreifen
 
Zitat:

Aber mal blöd gefragt: Wie könnte man das mit TComponent machen?
Einfach statt TPanel TComponent als Superklasse nehmen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 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