Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Zwei Forms - Zwei Monitore (https://www.delphipraxis.net/174135-zwei-forms-zwei-monitore.html)

musicman56 5. Apr 2013 19:33

Zwei Forms - Zwei Monitore
 
Hallo,

erst mal: ich hoffe, dass ich mit meinem Problem in der richtigen Abteilung gelandet bin.

Wie das Thema schon kurz beschreibt: Ich habe eine Anwendung mit zwei Formularen, wobei das zweite Formular auf einem zweiten Monitor angezeigt werden soll, wenn denn ein 2. Monitor überhaupt vorhanden ist.

Bisher hatte ich mit dieser Thematik nichts zu tun, und darum hab ich auch das Forum nach diesbezüglichen Informationen durchsucht. Was mich aber nicht weiter gebracht hat.

Über Screen.Monitors kann ich Infos über die angeschlossenen Monitore erhalten, aber wie weise ich meiner Form einen Monitor zu? Mit "DefaultMonitor" funktioniert es nicht.

Ich habe ausprobiert
- die 2. Form zur Laufzeit zu erzeugen oder automatisch
- die erste Form auf den Primär-Monitor und den 2.Monitor gezogen, und von dort aus Form2 erzeugt

Code:
procedure TFrmMoni1.Button2Click(Sender: TObject);
begin
  with TFrmMoni2.Create(Application) do
  try
    DefaultMonitor := dmDesktop; // und alle anderen auch ausprobiert...
    ShowModal;
  finally
    Release;
  end;
end;
Es ändert sich nichts. Die Frage ist also, was mache ich falsch?

Nachtrag: Wenn ich Form1 auf Monitor2 ziehe, und Form2 DefaultMonitor := dmDesktop zuweise, dann funktioniert es. Aber so soll es ja nicht sein: Form1 soll "automatisch" auf Monitor1 sein und Form2 auf Monitor2.

Bummi 5. Apr 2013 20:14

AW: Zwei Forms - Zwei Monitore
 
Das wäre ein Beispiel für eine Zentrierte Ausgabe auf dem ersten nicht primären Monitor.

Delphi-Quellcode:
var
 i:Integer;
begin
  if Screen.MonitorCount > 1 then
    begin
       for i := 0 to Screen.MonitorCount-1 do
        begin
         if not Screen.Monitors[i].Primary then
            begin
              Left := Screen.Monitors[i].BoundsRect.Left + ((Screen.Monitors[i].BoundsRect.Right - Screen.Monitors[i].BoundsRect.Left) - Width) div 2;
              Top := Screen.Monitors[i].BoundsRect.Top + ((Screen.Monitors[i].BoundsRect.Bottom - Screen.Monitors[i].BoundsRect.Top) - Height) div 2;

              break;
            end;
        end;
    end;
end;

sx2008 5. Apr 2013 20:17

AW: Zwei Forms - Zwei Monitore
 
Delphi-Quellcode:
procedure TForm2.MoveTo2ndMonitor;
begin
   if Screen.MonitorCount > 1 then
      with Screen.Monitors[1] do
      begin
         self.left := left;
         self.top := top;
      end;
end;

procedure TForm2.ToggleWindowState;
begin
   if WindowState = wsMaximized then
   begin
      WindowState := wsNormal;
      BorderStyle := bsSizeable;
   end
   else
   begin
      // ohne Rand im Vollbild auf 2. Monitor verlegen
      MoveTo2ndMonitor;
      BorderStyle := bsNone;
      WindowState := wsMaximized;
   end;
end;


// Doppelklick auf Formular schiebt Fenster im Vollbild auf 2. Monitor
// bzw. wieder zurück
procedure TForm2.FormDblClick(Sender: TObject);
begin
   ToggleWindowState;
end;

musicman56 5. Apr 2013 20:47

AW: Zwei Forms - Zwei Monitore
 
Hallo,

wooowww...das ging aber schnell.

@Bummi: Ja, das war es! Im "OnCreate" ausgeführt, funktioniert prächtig!

@sx2008: Das probier ich auch noch aus.

Vielen Dank euch beiden!!! :-D


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