AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form über anderer Form zentrieren

Ein Thema von striderx · begonnen am 27. Feb 2017 · letzter Beitrag vom 1. Mär 2017
Antwort Antwort
Seite 1 von 3  1 23      
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
207 Beiträge
 
Delphi 10.4 Sydney
 
#1

Form über anderer Form zentrieren

  Alt 27. Feb 2017, 22:07
folgende Situation:

Form1 ruft Form2 auf, die wiederum ruft Form3 auf, jeweils mit ShowModal. Form2 ist dabei nicht immer dieselbe Form.

Form 3 soll über Form 2 zentriert werden. Ich hätte gedacht, dass das mit Position = poOwnerFormCenter geht; allerdings wird Form3 damit immer über Form1 zentriert.
Um das Zentrieren 'zu Fuß' zu machen, habe ich versucht, mit GetParentForm(Self) an die Top- und Left-Werte der aufrufenden Form2 zu kommen, die sind jedoch immer 0.

Hat jemand eine Idee?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Form über anderer Form zentrieren

  Alt 27. Feb 2017, 22:49
Berechne doch in Form2 die Position von Form3, bevor Du es anzeigst.
Delphi-Quellcode:
Form3.Left := (Width - Form3.Width) div 2;
Form3.Top := (Height - Form3.Height) div 2;
Form3.ShowModal;
Ungetestet, sollte aber ungefähr so funktionieren.
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
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
207 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Form über anderer Form zentrieren

  Alt 27. Feb 2017, 22:53
Das geht leider nicht, weil die Größe von Form3 bei jedem Aufruf von Form3 neu ermittelt wird.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Form über anderer Form zentrieren

  Alt 27. Feb 2017, 22:54
Da fehlt jeweils noch eine Addition der Fensterposition.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

AW: Form über anderer Form zentrieren

  Alt 27. Feb 2017, 23:00
Stimmt, aber das Prinzip bleibt gleich. Und was spricht dagegen, erst die Größe zu berechnen, bevor man das Formular positioniert?
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
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
207 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Form über anderer Form zentrieren

  Alt 27. Feb 2017, 23:11
Zur Erläuterung:

Form3 ist meine Alternative zum Windows Message-Dialog. Je nach Aufruf werden in Form3 die Anzahl der Buttons und der angezeigte Text festgelegt und daraus dann die Größe des Dialogs ermittelt.

Ich habe es jetzt mal so probiert:

Delphi-Quellcode:
  F := GetParentForm(Self);
  dlgShowMsg.Top := F.Top + Trunc((F.Height - dlgShowMsg.Height) / 2);
  dlgShowMsg.Left := F.Left + Trunc((F.Width - dlgShowMsg.Width) / 2);
edit: Aber damit erscheint der Dialog immer in der oberen linken Ecke.

Geändert von striderx (27. Feb 2017 um 23:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Form über anderer Form zentrieren

  Alt 27. Feb 2017, 23:19
GetParentForm?
Bzw. was ist Self?

Also als Subkomponente genutzt (Parent gesetzt) und nicht als eigenständige Form?
Dann natürlich ohne die Addition der Position des äußeren Fensters, da hier das Offset 0 ist.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
207 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Form über anderer Form zentrieren

  Alt 27. Feb 2017, 23:22
GetParentForm?

Also als Subkomponente genutzt (Parent gesetzt) und nicht als eigenständige Form?
Doch, das ist eine eigenständige Form. Self müsste Form3 sein.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: Form über anderer Form zentrieren

  Alt 27. Feb 2017, 23:24
Spontan fallen mir 2 Möglichkeiten ein:
- Form3 bekommt eine öffentliche Methode, die die Größenberechnung anstößt
- Form3 bekommt eine Property vom Typ TForm, in der sich das aufrufende Formular einträgt und berechnet seine Position anhand dieser Property dann selbst
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
striderx

Registriert seit: 11. Feb 2007
Ort: Bergisch Gladbach
207 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Form über anderer Form zentrieren

  Alt 27. Feb 2017, 23:34
Spontan fallen mir 2 Möglichkeiten ein:
- Form3 bekommt eine öffentliche Methode, die die Größenberechnung anstößt
- Form3 bekommt eine Property vom Typ TForm, in der sich das aufrufende Formular einträgt und berechnet seine Position anhand dieser Property dann selbst
Form3 hat bereits eine öffentliche Methode, in der die Form zusammengebastelt wird und die das ModelResult zurück liefert.

function ShowMsg(MsgText, HeaderText: String; mButtons, mIcon: Word): Integer;

Ich könnte die Werte der aufrufenden Form noch als Parameter aufnehmen, das wäre aber nicht besonders elegant.

Geändert von striderx (27. Feb 2017 um 23:36 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 16:22 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