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 Zwei Dialoge untereinander platzieren (https://www.delphipraxis.net/191709-zwei-dialoge-untereinander-platzieren.html)

TUX_der_Pinguin 13. Feb 2017 08:58

Zwei Dialoge untereinander platzieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

mir ist gerade etwas ganz merkwürdiges Aufgefallen ich möchte zwei Fenster die Beide als Dialog (bsDialog) eingestellt sind untereinander platzieren jedoch überlappen die Fenster sich um einige Pixel. Als erstes wird der erste Dialog erzeugt auf dem sich eine Schaltfläche befindet und durch drücken dieser wird der zweite Dialog erstellt und soll unterhalb des ersten positioniert werden. Jedoch klappt das nicht so wie erwartet, zu sehen im Screenshot.

Anhang 46639

Dazu dann der entsprechende Quelltext der OnClick Ereignisses der Schaltfläche.

Delphi-Quellcode:
  //Dialog erzeugen
  if frm2 = nil then frm2 := Tfrm2.Create(Application);
  try
    //Dialog Position anpassen
    frm2.Left := (frm1.Width - Width) div 2 + frm1.Left;
    frm2.Top := frm1.Top + frm1.Height;

    //Dialog anzeigen
    frm2.ShowModal;

  finally
    if frm2 <> nil then
    begin
      frm2.Release;
      frm2 := nil;
    end;{if}
  end;{try..finally}
Ich war immer davon ausgegangen das TForm.Height das Außenmaß für die Höhe sei, aber das scheint in diesem Fall irgendwie nicht zu zutreffen. Ich mein das ist kein großes Problem, ich rechne einfach ein paar Pixel drauf und habe die Dialoge untereinander. Ich würde halt nur gerne wissen warum das so ist. Entwicklungsumgebung ist Delphi 10.1 Berlin Update 2 unter Windows 7 Professional 64 Bit.

Wenn ich zum Testen frm2.Top = frm1.Top setze dann sind beide Dialoge exakt auf gleiche Höhe. Setze ich frm2.Top auf 0 verschiebt sich der Dialog sogar nach oben aus dem Bildschirm. Ergo sind weder TFrom.Top noch TFrom.Height das was sie zu seien scheinen.

himitsu 13. Feb 2017 09:16

AW: Zwei Dialoge untereinander platzieren
 
Mach einen Screenshot, öffne Paint und dann male ein Rechteck an die Stelle, wo laut Left/Top/Width/Height deine Form liegen sollte.

Und jetzt sei nicht überrascht, wenn Windows die Rahmen in manchen Windowsversionen größer Malt, als du denkst. :stupid:

TUX_der_Pinguin 13. Feb 2017 09:29

AW: Zwei Dialoge untereinander platzieren
 
Zitat:

Zitat von himitsu (Beitrag 1361393)
Mach einen Screenshot, öffne Paint und dann male ein Rechteck an die Stelle, wo laut Left/Top/Width/Height deine Form liegen sollte.

Und jetzt sei nicht überrascht, wenn Windows die Rahmen in manchen Windowsversionen größer Malt, als du denkst. :stupid:

Gut das Windows da irgendeinen Quatsch macht habe ich ja jetzt festgestellt. Ich guck mal ob ich irgendwie mit MSDN-Library durchsuchenGetSystemMetrics zum ziel komme und herausfinde was ich drauf rechnen muss damit das Fenster korrekt positioniert wird.

TUX_der_Pinguin 13. Feb 2017 09:39

AW: Zwei Dialoge untereinander platzieren
 
Keine Ahnung ob und wie verlässlich das ist aber für meine Anforderung ist das vollkommen ausreichend.

Delphi-Quellcode:
frm2.Top := frm1.Top + GetSystemMetrics(SM_CYSIZEFRAME)+
                           GetSystemMetrics(SM_CYCAPTION)+
                           frm1.ClientHeight+
                           GetSystemMetrics(SM_CYSIZEFRAME);

himitsu 13. Feb 2017 12:12

AW: Zwei Dialoge untereinander platzieren
 
Ich mach bei uns auch sowas, also zwei Fenster untereinander.

Meine Lösung, vorallem da unsere Fenster nicht gleich breit sind:
Ein bisschen Abstand lassen und dann ist es egal, ob dazwischen 12 oder 16 Pixel liegen.


PS: Die Delphi-IDE ist bezüglich der Positionierung selber nicht vorbildlich.
ALLE anderen Programme machen keine Probleme, aber nach jedem RDP-Login vergisst Delphi sein Vollbild und schiebt sein Fenster ein bissl nach Rechts-Unten, so daß dann ein Teil des Fensters auf dem rechten Monitor landet und sich das da nichtmal anklicken lässt.
Außerdem macht Delphi da noch soooooooo viele Refreschzyklen und scheint Vieles mehrmals neu zu zeichnen, so dass das Fenster dann mehrere Sekunden wild flackert und manchmal 1-2 Minuten auf nichts reagiert oder gar komplett für immer hängen bleibt.


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