AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Formular (Zur Laufzeit erzeugt) bring die Mainform in den Vordergrund
Thema durchsuchen
Ansicht
Themen-Optionen

Formular (Zur Laufzeit erzeugt) bring die Mainform in den Vordergrund

Ein Thema von Hobbycoder · begonnen am 6. Mär 2025 · letzter Beitrag vom 10. Mär 2025
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
998 Beiträge
 
#1

Formular (Zur Laufzeit erzeugt) bring die Mainform in den Vordergrund

  Alt 6. Mär 2025, 19:24
Hi,

ich hab folgendes Problem. Ich erzeuge eine Terminform zur Laufzeit, weil der Benutzer in der Lage sein soll, dass er mehrere Termin gleichzeitig geöffnet halten kann. In diese selbst erzeugten Formularen können Unterformulare angezeigt werden. Da diese aber im Vordergrund bleiben sollen, und die Bearbeitung im Termin erst weitergehen kann, wenn dieses Unterformular geschlossen wird lasse ich die Modal anzeigen.
(Auch diese Unterformulare werden dynamisch erzeugt, wo das schon mein Fehler sein könnte).
Werden nun die erzeugten Unterformulare mit ShowModal aufgerufen, springt die Mainform über das Terminforumlar, das Unterformular wird korrekt angezeigt, und nach Schließen des Unterformulars kommt die Terminform wieder in den Vordergund. Funktioniert einwandfrei, sieht aber bescheiden aus.

Jetzt gerade überlege ich, dass es ja nur ein Modals Fenster in einer Anwendung geben kann. Macht also überhaupt sinn, dass ich es dynamisch erzeuge? Denn sonst könnte ich es ja auch gleich automatisch erzeugen lassen, da es ja eh nur einmal angezeigt werden kann, egal wieviele Terminfenster geöffnet sind.

Es wäre natürlich auch superschick, wenn jedes Terminfenster quasi sein eigenes Modales Unterformular haben könnte, was eben dann den Fokus bekommt, wenn die Terminform selbst auch im Vordergrund wäre. Wobei das möglichweise nicht geht. Ich könnte natürlich auch einen Frame im Terminfenster einblenden/dynamisch erzeugen, was ggf. besser aussehen würde, sofern ich dem einen Rahmen verpasse.
Gibt es da irgendwelche Möglichkeiten, die ich nutzen könnte? Oder irgendeine andere Idee, wir ich das gewünscht realisieren könnte?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.836 Beiträge
 
Delphi 12 Athens
 
#2

AW: Formular (Zur Laufzeit erzeugt) bring die Mainform in den Vordergrund

  Alt 6. Mär 2025, 19:31
Du musst kein modales Fenster benutzen, damit ein Fenster vor einem anderen bleibt. Dafür kannst du ganz simpel den HWNDPARENT setzen:
Delphi-Quellcode:
SetWindowLong(SecondForm.Handle, GWL_HWNDPARENT, FirstForm.Handle);
// Das bewirkt, dass SecondForm immer vor FirstForm bleibt.
Das kannst du auch mit mehreren "Fensterduos" parallel machen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Formular (Zur Laufzeit erzeugt) bring die Mainform in den Vordergrund

  Alt 6. Mär 2025, 20:33
Delphi-Referenz durchsuchenPopupParent
Delphi-Referenz durchsuchenPopupMode
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
998 Beiträge
 
#4

AW: Formular (Zur Laufzeit erzeugt) bring die Mainform in den Vordergrund

  Alt 7. Mär 2025, 08:42
Danke, das hilft schon gut.

Du musst kein modales Fenster benutzen, damit ein Fenster vor einem anderen bleibt. Dafür kannst du ganz simpel den HWNDPARENT setzen:
Delphi-Quellcode:
SetWindowLong(SecondForm.Handle, GWL_HWNDPARENT, FirstForm.Handle);
// Das bewirkt, dass SecondForm immer vor FirstForm bleibt.
Das kannst du auch mit mehreren "Fensterduos" parallel machen.
Danke, das ist mega. Genau das, was ich mir gewünscht habe
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
998 Beiträge
 
#5

AW: Formular (Zur Laufzeit erzeugt) bring die Mainform in den Vordergrund

  Alt Heute, 10:13
Hi,
soweit funktioniert das perfekt, nur ein Problem taucht plötzlich auf: Die Fenstergröße verändert sich von allein.
Das Fenster in der IDE ist Height: 599 und Width: 568.
Nach dem es in der Methode (s.unten) erzeugt und angezeigt wird ist Height: 1014 und Width: 1920.
An keiner Stelle wird die Größe der Form im Code bearbeitet oder sonst was. Lediglich die Position.
Woran könnte das liegen? Ich könnte zwar dann im Code der Zielform die Größe anpassen, jedoch möchte ich ungerne statische Information fest im Code verankern.

Delphi-Quellcode:
  if not Assigned(frmKundendaten) then
  begin
    frmKundendaten:=TfrmKundendaten.Create(self);
    frmKundendaten.OnMoved:=OnKundendatenWindowMoved;
    frmKundendaten.OnFinished:=OnKundendatenWindowsFinished;
    frmKundendaten.lblKundenname.Caption:=edtKundenname.Text;
    SetWindowLong(frmKundendaten.Handle, GWL_HWNDPARENT, Self.Handle);
    frmKundendaten.Show;
    frmKundendaten.Left:=self.Left+grpKundendaten.Left+grpIntern.Left+btnKundendaten.Left;
    frmKundendaten.Top:=self.Top+grpKundendaten.Top+grpIntern.Top+btnKundendaten.top+(btnKundendaten.Height*2);
  end;
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.836 Beiträge
 
Delphi 12 Athens
 
#6

AW: Formular (Zur Laufzeit erzeugt) bring die Mainform in den Vordergrund

  Alt Heute, 10:30
Du könntest z.B. einen Haltepunkt auf OnResize setzen, um zu sehen, wo die Änderung herkommt.

Wenn das nicht klappt (während csLoading wird das Event noch nicht ausgelöst, aber ich denke nicht, dass das der Fall ist), kannst du SetBounds überschreiben und dort den Haltepunkt setzen.

Du kannst im Haltepunkt in den Eigenschaften als Bedingung die Größe prüfen, damit der Haltepunkt nicht so oft ausgelöst wird, wenn das zu oft ist, um es gut zu debuggen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.367 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Formular (Zur Laufzeit erzeugt) bring die Mainform in den Vordergrund

  Alt Heute, 10:54
Prüfe mal im Objektinspektor, was du dort bei der Eigenschaft "Position" stehen hast. Vermutlich musst du das auf poDesigned umstellen.
Peter
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
998 Beiträge
 
#8

AW: Formular (Zur Laufzeit erzeugt) bring die Mainform in den Vordergrund

  Alt Heute, 11:17
Prüfe mal im Objektinspektor, was du dort bei der Eigenschaft "Position" stehen hast. Vermutlich musst du das auf poDesigned umstellen.
Danke, das war es. Ich hatte es auf poDefault stehen und dachte in meinem jugendlichem Leichtsinn, dass würde reichen
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:57 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 by Thomas Breitkreuz