AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Kleine Testanwendung für Multi-Monitor-Systeme
Thema durchsuchen
Ansicht
Themen-Optionen

Kleine Testanwendung für Multi-Monitor-Systeme

Ein Thema von Codehunter · begonnen am 13. Dez 2012 · letzter Beitrag vom 4. Nov 2019
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#1

AW: Kleine Testanwendung für Multi-Monitor-Systeme

  Alt 13. Dez 2012, 14:45
Die Schubserei vom Sample Window funktioniert auch? Screenshots?
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

AW: Kleine Testanwendung für Multi-Monitor-Systeme

  Alt 13. Dez 2012, 15:27
Bei mir hat auch alles sauber funktioniert auf einem Windows 7 64Bit mit einer NVidia Geforce GTX670 mit vier Monitore.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#3

AW: Kleine Testanwendung für Multi-Monitor-Systeme

  Alt 13. Dez 2012, 19:01
soweit sogut funktioniert alles...
wenn ich den 2ten Monitor auswähle [Show sample window] wird das Fenster auf dem ersten Monitor angezeigt, gewollt so ?
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Kleine Testanwendung für Multi-Monitor-Systeme

  Alt 13. Dez 2012, 23:43
Bei mir funktioniert das auch. Win7 64 Bit Nvidia Karte aber nur 1 Monitor
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
576 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Kleine Testanwendung für Multi-Monitor-Systeme

  Alt 14. Dez 2012, 07:06
Die Screenshots funktionieren.
Nur Show Sample Window wird bei beiden Monitoren auf dem ersten angezeigt
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#6

AW: Kleine Testanwendung für Multi-Monitor-Systeme

  Alt 14. Dez 2012, 07:13
@freeway: Das kann ich dir nicht genau beantworten warum das bei dir so ist. Ich lese die Videotreiber und Monitore in der Reihenfolge aus, wie sie Windows intern gespeichert hat. Die Reihenfolge wird immer beibehalten, so wie sie ursprünglich bei der Treiberinstallation gefunden wurde. Hast du evtl. in deinen Grafikeinstellungen die beiden Bildschirme vertauscht?

Guck mal nach, wenn du in meinem Testprogramm im Baum auf den Grafikkarteneintrag oberhalb der Monitore klickst, bei welchem von beiden "Primary display: YES" angeizeigt wird. Standardmäßig sollte das der erste der Einträge sein. Wenn man irgendwann händisch mal was geändert hat kann es auch ein anderer sein. Ebenso sollte beim ersten (im Baum obersten) Monitor "Desktop anchor coordinates: 0x0" stehen. Steht da was anderes wurde wohl irgendwann mal händisch was geändert.

@v2afrank:
Der Button "Show Sample Window" erzeugt erstmal das Sample-Fenster und das immer auf dem primären Display. Das ist gewollt so um die anderen Buttons "Move" und "Center" verdeutlichen zu können.

EDIT: Hatte mich bei "freeway" verlesen. Daher die Streichung. Vielleicht hätte ich das "Show Sample Window" ein bissi anders machen sollen, scheint verwirrend zu sein. Aber es ist ja kein Anwenderprogramm wo es auf Usability ankommt

Geändert von Codehunter (14. Dez 2012 um 07:27 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Kleine Testanwendung für Multi-Monitor-Systeme

  Alt 14. Dez 2012, 07:28
An Win 7 64
Sieht ok aus, aber was macht "move relative.."?
Ich hab's geschnallt, ist ok!


Was die Details bedeuten ist mir nicht klar, aber sicher sagt es Dir was.
Es gäbe mit den gleichen Monis noch ein XP 32 bit, dann müsste ich aber unter den Tisch krabbeln und ein Kabel einstecken. Könnte ich auf Wunsch auch machen.

Daten:
Code:
Device name: \\.\DISPLAY1
Device string: ATI Radeon HD 5450
Active: YES
Primary display: YES
Screen is attached to desktop: YES
Screen mirrors the desktop: NO
Supports more modes than attached monitor: YES
Removable device: NO
VGA compatible video mode: NO

Device name: \\.\DISPLAY1\Monitor0
Device string: PnP-Monitor (Standard)
Height: 1200
Width: 1600
Desktop anchor coordinates: 0x0
Monitor rect (Left x Top : Right x Bottom): 0x0:1600x1200
Work rect without toolbars (Left x Top : Right x Bottom): 118x0:1600x1200
Current frequency: 60 Hz
Current color depth: 32 Bit


Device name: \\.\DISPLAY2
Device string: ATI Radeon HD 5450
Active: YES
Primary display: NO
Screen is attached to desktop: YES
Screen mirrors the desktop: NO
Supports more modes than attached monitor: YES
Removable device: NO
VGA compatible video mode: NO

Device name: \\.\DISPLAY2\Monitor0
Device string: PnP-Monitor (Standard)
Height: 1024
Width: 1280
Desktop anchor coordinates: 1600x0
Monitor rect (Left x Top : Right x Bottom): 1600x0:2880x1024
Work rect without toolbars (Left x Top : Right x Bottom): 1600x0:2880x1024
Current frequency: 75 Hz
Current color depth: 32 Bit
Gruß, Jo

Geändert von jobo (14. Dez 2012 um 07:32 Uhr) Grund: Wach geworden
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.233 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Kleine Testanwendung für Multi-Monitor-Systeme

  Alt 14. Dez 2012, 07:45
Hast du/jemand schon getestet was passiert wenn während der Laufzeit der Anwendung Monitore (Beamer bei Laptop) dazu bzw. weggenommen werden.
Hier hatte ich auch schon Problem da die Delphi-Interne Montorliste AFAIK nicht während der Laufzeit aktualisiert wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#9

AW: Kleine Testanwendung für Multi-Monitor-Systeme

  Alt 14. Dez 2012, 09:49
Sieht ok aus, aber was macht "move relative.."?
Verschiebt ein Fenster unter Beibehaltung seiner zum Monitor relativen Koordinaten auf einen anderen Bildschirm. Wenn ein Fenster also z.B. Left=10 und Top=10 gesetzt hat, dann werden mit dieser Funktion die Koordinaten auf den anderen Monitor umgerechnet und das Fenster dort hin verschoben. So ähnlich wie man das in der VCL mit ScreenToClient und ClientToScreen hat.

Was die Details bedeuten ist mir nicht klar
Kurze Erläuterung:

Die Grafikkarte bzw. der Schnittstellentreiber
Device name: \\.\DISPLAY1 --> Windows-interner Treibername
Device string: ATI Radeon HD 5450 --> Gerätename so wie er im Gerätemanager angezeigt wird
Active: YES --> Wird im Moment verwendet
Primary display: YES --> Primäre Displayschnittstelle
Screen is attached to desktop: YES --> Bildschirm ist Teil des Desktops (= "Anzeige auf diesen Bildschirm erweitern" bei Windows)
Screen mirrors the desktop: NO --> Bildschirm spiegelt den Desktop (trifft oft auf Beamer zu)
Supports more modes than attached monitor: YES --> Grafikkarte kann mehr Auflösungen, Farbtiefen, Refreshraten als der angeschlossene Monitor
Removable device: NO --> Weiß ich auch nicht genau, ich vermute das bezieht sich auf USB-Grafikkarten (siehe DISPLAY_DEVICE structure im MSDN)
VGA compatible video mode: NO --> Wird wohl nur im abgesicherten Modus als YES angezeigt (^= 640x480-8Bit@60Hz)

Der Monitor, Beamer etc.
Device name: \\.\DISPLAY1\Monitor0 --> Windows-interner Treibername
Device string: PnP-Monitor (Standard) --> Gerätename so wie er im Gerätemanager angezeigt wird
Height: 1200 --> Vertikale Auflösung
Width: 1600 --> Horizontale Auflösung
Desktop anchor coordinates: 0x0 --> Linke obere Ecke relativ zum gesamten Desktop
Monitor rect (Left x Top : Right x Bottom): 0x0:1600x1200 --> Kompletter Bereich relativ zum gesamten Desktop, der auf diesem Bildschirm dargestellt wird
Work rect without toolbars (Left x Top : Right x Bottom): 118x0:1600x1200 --> Bereich ohne z.B. die Taskleiste relativ zum gesamten Desktop, der auf diesem Bildschirm dargestellt wird
Current frequency: 60 Hz --> Refresh-Rate
Current color depth: 32 Bit --> Farbtiefe

Interessant bei der ganzen Sache: Windows unterscheidet nicht strikt zwischen Videotreiber (im Baum als Karte dargestellt) und Bildschirmen (im Baum als blauer Flatscreen). Vielmehr sieht Windows beides als Einheit an, wobei der Monitor eine Untermenge der Grafikkarte ist. Es gibt auch virtuelle Grafiktreiber die keinen Monitor kennen (z.B. der VNC-Videotreiber).

@Bernhard: Genau an dem Problem bastel ich gerade. Ich müsste die Message WM_DISPLAYCHANGE hooken. Allerdings beiß ich da im Moment noch auf Granit:
Delphi-Quellcode:
var
  Form1: TForm1;
  MainHook : HHOOK;

  function SysMsgHook(Code: Integer; wParam : WPARAM; lParam : LPARAM): Longint; stdcall;

implementation

{$R *.dfm}

function SysMsgHook(Code: Integer; wParam : WPARAM;
   lParam : LPARAM): Longint; stdcall;
var
  Buffer: TEventMsg;
begin
  result:= 0;
  Buffer:= PEventMsg(lParam)^;

  if Buffer.Message = WM_DISPLAYCHANGE then begin
    ShowMessage('OK');
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MainHook:= SetWindowsHookEx(WH_SHELL, SysMsgHook, hInstance, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnhookWindowsHookEx(MainHook);
end;
Ich hab schon die verschiedensten Hook-IDs für SetWindowsHookEx ausprobiert, die Hook-Proc SysMsgHook wird nie aufgerufen wenn sich die Bildschirmeinstellungen ändern. Entweder hab ich den Hook vermurkst (wahrscheinlich) oder Windows sendet einfach kein WM_DISPLAYCHANGE (unwahrscheinlich). Any suggestions?

Geändert von Codehunter (14. Dez 2012 um 09:54 Uhr)
  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 09:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz