AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Formular auf zweitem Monitor starten?
Thema durchsuchen
Ansicht
Themen-Optionen

Formular auf zweitem Monitor starten?

Ein Thema von a.def · begonnen am 19. Dez 2016 · letzter Beitrag vom 19. Dez 2016
Antwort Antwort
a.def
(Gast)

n/a Beiträge
 
#1

Formular auf zweitem Monitor starten?

  Alt 19. Dez 2016, 09:02
Ich habe jetzt endlich mal meinen zweiten Monitor angeschlossen um eine Funktionalität prüfen zu können.
Leider ging das total in die Hose denn das gewünschte Ergebnis bleibt aus.

In einer Datei sind die Koordinaten meines Formulars gespeichert (es ist in etwa -1600 und 100). Mein Formular war auf dem Monitor LINKS neben meinem Hauptmonitor.

Folgende Funktion sollte nun eigentlich mein Formular auf den zweiten Monitor bringen, tut es aber nicht.
Fast alles was die Ini-Datei angeht habe ich rausgenommen.
Die Variablen X und Y haben am Ende genau die Werte die sie haben sollen nämlich -1600 und 100.
Woran liegt es, dass das Hauptformular frmMain nicht auf dem zweiten Monitor gestartet wird so wie die Variablen X und Y es vorsehen?
loadFOrmPosition rufe ich im FormCreate auf genau so dort Width und Height gesetzt.

Delphi-Quellcode:
procedure loadFormPosition(aFormToSetPos: TForm; sIniSection: string);
var
 x, y: Integer;
 aScreen: TMonitor;
begin
  aScreen := Screen.MonitorFromWindow(frmMain.Handle);
  
  // if IniF.ValueExists(sIniSection, 'posx') and IniF.ValueExists(sIniSection, 'posy') then
  // (alles was die Ini angeht, habe ich der Einfachheit halber rausgenommen)
  // >> Wenn in Ini-Datei die Werte posx und posy vorhanden sind, Position zu poDesigned setzen (verhindert hässliches Flickern unter Windows XP)
   begin
    aFormToSetPos.Position := poDesigned;

    x := IniF.ReadInteger(sIniSection, 'posx', (aScreen.Width - aFormToSetPos.Width) div 2);
    y := IniF.ReadInteger(sIniSection, 'posy', (aScreen.Height - aFormToSetPos.Height) div 2);
   end
  else
   begin
    // Wenn Werte nicht vorhanden, dann zentriere das Formular auf dem Hauptmonitor
    x := (aScreen.Width - aFormToSetPos.Width) div 2;
    y := (aScreen.Height - aFormToSetPos.Height) div 2;
   end;

  aFormToSetPos.Left := x; // -1600
  aFormToSetPos.Top := y; // 100
end;

Geändert von a.def (19. Dez 2016 um 09:24 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: Formular auf zweitem Monitor starten?

  Alt 19. Dez 2016, 09:29
Mach doch mal ein Formular, dass du auf dem Bildschirmen hin und herschieben kannst mit einem Button, der bei Betätigung Top und Left in ein Memo oder so schreibt.
Ralph
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#3

AW: Formular auf zweitem Monitor starten?

  Alt 19. Dez 2016, 09:33
Habe ich gerade mal gemacht.
Es werden immer die korrekten Koordinaten in das Memo geschrieben.
Also positive und negative Werte auf der x-Achse.

Beim Laden ist mir jetzt aufgefallen, dass das Hauptformular immer nur wieder auf dem Hauptbildschirm zentriert ausgegeben wird, wenn der Wert der x-Achse so weit negativ ist, dass das ganze Formular NICHT mehr auf dem Hauptmonitor wäre.
-500 z.B. (halb auf Monitor 1 und 2) funktioniert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Formular auf zweitem Monitor starten?

  Alt 19. Dez 2016, 10:25
Erst beim Anzeigen der Form (Show bzw. Visible=True) werden die Property DefaultMonitor und Position ausgewertet.
Will man sowas "manuell" vor dem Anzeigen setzen, dann sollte Position=poDesignd und DefaultMonitor=dmDesktop eingestellt sein, sonst überschreibt die böse VCL deine Vorgaben, weil sie zu blöd ist das bereits im Constructor zu erledigen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#5

AW: Formular auf zweitem Monitor starten?

  Alt 19. Dez 2016, 12:31
Zitat:
Erst beim Anzeigen der Form (Show bzw. Visible=True) werden die Property DefaultMonitor und Position ausgewertet.
Danke für die Information.
Das bedeutet dann wohl auch leider, dass man unter Windows XP das gewisse Flickern, wenn das Formular platziert wird, nicht weg bekommt auf diese Weise.

Ich habe nun Position auf poDesigned gesetzt - im Objektinspektor.
DefaultMonitor habe ich auf ActiveForm gelassen.

Ich hatte Position zwar schon auf poDesigned gesetzt, aber erst im OnCreate was wohl nicht die richtige Stelle war. Nun die Änderung im Objektinspektor brachte das gewünschte Ergebnis.
Dank meiner folgenden Prozedur wird ein Formular immer auf den Hauptmonitor zentriert ausgegeben, wenn es irgendwo im Nirvana rumfliegt

Delphi-Quellcode:
 if Screen.MonitorFromWindow(aFormToSetPos.Handle, mdNull) = nil then
  begin
   // Form is outside of any monitor. Move to center of main monitor
   aFormToSetPos.Top := (Screen.Height - aFormToSetPos.Height) div 2;
   aFormToSetPos.Left := (Screen.Width - aFormToSetPos.Width) div 2;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Formular auf zweitem Monitor starten?

  Alt 19. Dez 2016, 13:56
Screen ist die Gesamtheit aller Monitore. Um sicherzugehen würde ich das so formulieren:
aFormToSetPos.Top := (Screen.Monitors[0].Height - Screen.Monitors[0].Height) div 2; etc.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#7

AW: Formular auf zweitem Monitor starten?

  Alt 19. Dez 2016, 16:07
Danke für den Hinweis.
Sicher ist sicher.
  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 03:59 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