AGB  ·  Datenschutz  ·  Impressum  







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

Zwei Dialoge untereinander platzieren

Ein Thema von TUX_der_Pinguin · begonnen am 13. Feb 2017 · letzter Beitrag vom 13. Feb 2017
Antwort Antwort
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#1

Zwei Dialoge untereinander platzieren

  Alt 13. Feb 2017, 09:58
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.

zwischenablage01.png

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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zwei Dialoge untereinander platzieren

  Alt 13. Feb 2017, 10:16
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Zwei Dialoge untereinander platzieren

  Alt 13. Feb 2017, 10:29
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.
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.
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
609 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zwei Dialoge untereinander platzieren

  Alt 13. Feb 2017, 10:39
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);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zwei Dialoge untereinander platzieren

  Alt 13. Feb 2017, 13:12
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 14: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