Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Panel im Hintergrund (https://www.delphipraxis.net/178403-panel-im-hintergrund.html)

machstuhl 6. Jan 2014 13:39

Panel im Hintergrund
 
Hallo,
ich habe schon einige Zeit im Internet mit Suchen verbracht, aber leider nichts passendes gefunden.

Ich erstelle ein Panel inkl. TImage zur Laufzeit. Sobald dieses Panel erstellt wird, liegt es allerdings unter den zur Designzeit platzierten Editfeldern.

Das Panel wird nach den Edits erstellt (da es ja zur Laufzeit erstellt wird), "BringToFront" und "in den Hintergrund setzen" bringen nichts.

Mir ist klar das ein TGraphicControl immer hinter einem TWinControl liegt, allerdings erstelle ich mit TPanel ja ein TWinControl. Wo liegt hier mein Fehler?

Danke im vorraus

stahli 6. Jan 2014 13:57

AW: Panel im Hintergrund
 
Ich könnte mir nur vorstellen, dass beide nicht die gleichen Parents haben.
Evtl. liegen Deine Edits direkt auf dem Formular und Dein nachträglich erzeugtes Panel auf einem anderen Control (TabItem oder so)?

Oder hast Du irgendwo doch ein SendToBack, das Du übersehen hast?

Der schöne Günther 6. Jan 2014 14:06

AW: Panel im Hintergrund
 
Was wäre mit TWinControl.SetZOrder?

machstuhl 6. Jan 2014 14:13

AW: Panel im Hintergrund
 
Zitat:

Zitat von stahli (Beitrag 1242391)
Ich könnte mir nur vorstellen, dass beide nicht die gleichen Parents haben.
Evtl. liegen Deine Edits direkt auf dem Formular und Dein nachträglich erzeugtes Panel auf einem anderen Control (TabItem oder so)?

So ist es. Ich kann als Parent allerdings nicht das Formular angeben. Dann erhalte ich eine Exception.
Aber danke für den Tipp. Bringt mich hoffentlich weiter :cyclops:

nahpets 6. Jan 2014 14:21

AW: Panel im Hintergrund
 
Dashier überdeckt (unter Delphi 7) bei mir alles im Formular, was sich im Bereich des Panels befindet.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 pn : TPanel;
 im : TImage;
begin
 pn := TPanel.Create(self);
 pn.Color := clGreen;
 pn.Width := 1000;
 pn.Height := 400;
 pn.Left  := 100;
 pn.Top   := 100;
 pn.Parent := Self;
 im       := TImage.Create(Self);
 im.Top   := 4;
 im.Left  := 4;
 im.Height := pn.Height - 8;
 im.Width := pn.Width - 8;
 im.Parent := pn;
 im.Canvas.FloodFill(0,0,clRed,fsBorder);
end;
Als Ergebnis habe ich einen grünen Rahmen um ein Image.

Wo und wann erhältst Du denn welche Exception?

Zeig' doch bitte mal Deinen Quelltext, dann brauchen wir nicht so zu :glaskugel:.

machstuhl 6. Jan 2014 14:54

AW: Panel im Hintergrund
 
Der ist ein bisschen kompliziert. Aber ich versuchs mal.

So erstelle ich das Panel. Diese Prozedur befindet sich in meiner MDI-Form und soll in diversen Childs aufgerufen werden.
Delphi-Quellcode:
procedure Tfm_haupt.image_status_erstellen(myTop, myLeft : Integer; Besitzer: TComponent; Vater: TWinControl);
Var
  PNL : TPanel;
begin
  PNL := TPanel.create(Besitzer);
  PNL.top := myTop;
  PNL.left := myLeft;
  PNL.Height := 256;
  PNL.Width := 256;
  PNL.Name := 'pnl_status';
  PNL.Parent := Vater;
  PNL.BevelOuter := bvNone;
  PNL.Visible := true;
  PNL.Caption := 'TESTTESTETESTSTSET';
end
Im Child (fm_personen) habe ich folgenden Code:
Delphi-Quellcode:
procedure Tfm_personen.Button1Click(Sender: TObject);
VAR PNL : TPanel;
begin
  fm_haupt.image_status_erstellen(50, 25, fm_personen, pnl_Inhalt);
  PNL := pnl_inhalt.FindChildControl('pnl_status') as TPanel;
end;
Das interessante ist: Die MDI-Children werden alle von einem Formular (Tfm_vorlage) abgeleitet, welches ein pnl_Inhalt mit align := alClient beinhaltet.

Wenn ich was anderes als "pnl_Inhalt" als Parent übergebe (bspw. self, fm_personen oder fm_vorlage:stupid:), erhalte ich exceptions beim erstellen.

Mir ist mittlerweile klar, dass die Editfelder das Panel überlagern, da die Parents nicht übereinstimmen. Allerdings kann ich auch nix anderes als Parent angeben.


edit: wenn ich self übergebe, geht es doch. hatte noch ne ehemals auskommentierte zeile vergessen.


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