Autor Beitrag
tortom1000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: Do 26.01.17 10:30 
Hallo,
ich habe das Problem, das ich mehrere Panels exakt übereinander angeordnet habe, die die identische Größe und den identischen Ursprung haben.
Somit komme ich an die unteren Panels "quasi nicht mehr ran", um sie nach oben zu holen.

Hier im Forum wurde dieses Problem schon mal angefragt, leider funktionieren die Lösungen bei mir bzw. bei meiner Delphi-Installation nicht.
Ich benutze Delphi 7.

"Im Object Treeview auswählen (zumindest bei D7 und älter), denke aber in den neueren Versionen wird es auch so etwas geben."
-> Dort kann ich das Panel natürlich anwählen, aber ich kann es darüber nicht nach vorne holen

"Rechte Maustaste auf das verdeckende Steuerelement und "Element\Nach vorne bringen" auswählen."
-> die Funktion "Element\Nach vorne bringen" gibt es in der "Object-Hierarchie" nicht und direkt anklicken geht
ja nicht, da ja andere Panels drüber liegen.

Ich habe auf jedem Panel noch einen Gradienten (Farbverlauf) liegen, so das ich auch nicht umgekehrt das zu oberst liegende Panel in
den Hintergrund bringen kann, was ja, wenn ich es mit jedem der Panels so machen könnte, auch das gewünschte Panel nach oben holen würde.
Wäre zwar etwas umständlich, aber zielführend.
Wie gesagt, das geht ja leider nicht, ohne die Gradienten zu verändern, damit ich an die Panels zum Rechtklick komme, um dann über
Element\Nach hinten setzen zum Ziel zu kommen...


Gibt es dazu noch andere Möglichkeiten?

Gruß
Tom
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 26.01.17 12:53 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1321
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 26.01.17 13:42 
Hey, nimm einfach ein PageControl und packe jedes Panel in eine neue Page. Dann kannst Du zur Designzeit einfach via Tabs umschalten. Zur Laufzeit schaltest Du die Tabs einfach aus und hast dann im Hintergrund auch eine ordentliche Methode mit der Du die Panel via ActivePage Property wechseln kannst.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Do 26.01.17 13:43 
Hallo user profile icontortom1000,

um das ganze bearbeiten zu können würde mir einfalle, mit rechts auf das Formular zu klicken und dann "Ansicht als Text" zu wählen. Dann erhältst du Quasi den Quelltext des Formulars, welchen du bearbeiten kannst.

Generell würde ich dir aber empfehlen auf solche Konstruktionen zu verzichten. Wahrscheinlich willst du zur Laufzeit mal das eine, mal das Andere Panel Anzeigen, oder? In dem Fall würde ich dir empfehlen eine PageControl zu nehmen und jedes Panel auf eine Seite des Page Controls zu legen. Dann kannst du zur Designezeit bequem zwischen den Seiten umschalten. Die einzelnen Tabreiter würde ich dann erst zur Laufzeit per Code ausblenden.

Das kannst du z.B. im Form Create machen, dort würde ich auch die "Start Seite" festlegen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm2.FormCreate(Sender: TObject);
var
  i : integer;
begin
  for i := 0 to PageControl1.PageCount - 1 do
    PageControl1.Pages[i].TabVisible := False;
  PageControl1.ActivePage := TabSheet1;
end;


Natürlich darfst die Komponenten auch sinniger benennen.

Edit: @user profile iconSinspin: Zwei dumme ein Gedanke ;).
Slipstream
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 26
Erhaltene Danke: 5



BeitragVerfasst: Sa 28.01.17 15:17 
user profile icontortom1000 hat folgendes geschrieben Zum zitierten Posting springen:
"Im Object Treeview auswählen (zumindest bei D7 und älter), denke aber in den neueren Versionen wird es auch so etwas geben."
-> Dort kann ich das Panel natürlich anwählen, aber ich kann es darüber nicht nach vorne holen


Mit Object Treeview meinst du sicher den Objektinspektor OI, wo man all die Eigenschaften, die man Properties nennt, eintragen kann. Du kannst dir damit behelfen, dass du die im OI ausgewählte Komponente über den OI verschiebst, indem du die Properties LEFT und TOP vorübergehend veränderst, so dass dein Panel, an dem du gerade herumfummeln willst, sichtbar wird.

Wenn ich davon ausgehe, dass du zur Laufzeit im Programm immer nur eines dieser übereinanderliegenden Panels anzeigst (Visible := True) und die anderen verbirgst (Visible := False), kannst du die gewünschte Position und Grösse auch erst zur Laufzeit zuweisen. Der Vorteil: Du musst dann nicht im Formulareditor alle Panels exakt übereinander legen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 28.01.17 17:24 
user profile iconSlipstream hat folgendes geschrieben Zum zitierten Posting springen:
Mit Object Treeview meinst du sicher den Objektinspektor OI, wo man all die Eigenschaften, die man Properties nennt, eintragen kann.
Nein, er meint den visuellen Baum mit allen auf dem Formular vorhandenen Komponenten. ;-)

ObjectTreeview
Einloggen, um Attachments anzusehen!