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 unterschiedliche Monitor-Größe (Pixel) (https://www.delphipraxis.net/112292-unterschiedliche-monitor-groesse-pixel.html)

Ines 18. Apr 2008 09:04


unterschiedliche Monitor-Größe (Pixel)
 
Hallo

Unsere Befund-Arbeitsplätze haben jetzt 3 stattt bisher 2 Monitore.
Das Fatale (für mich) daran ist, daß ein Monitor 1280x1024 Pixel hat, die anderen beiden haben je 1900x1200 Pixel.

Mein Prolem: Mit welchem Aufruf kann ich erfahren, auf welchem Monitor (Auflösung) das Programm gestartet wurde?

Vielen Dank für Eure Hilfe
Ines

Delphi7 Enterprise auf WinXP

DeddyH 18. Apr 2008 09:20

Re: unterschiedliche Monitor-Größe (Pixel)
 
Ich sag mal ganz blöd: Du könntest Screen.Width bzw. Screen.Height abfragen.

hathor 18. Apr 2008 09:24

Re: unterschiedliche Monitor-Größe (Pixel)
 
Hallo,

vermutlich garnicht, denn jeder Monitor kann (hardwareabhängig) zum Boot-Zeitpunkt den Fokus erhalten.
Anders sieht die Sache aus, wenn beim Shutdown ein definierter Monitor aktiv war und dieser Zustand gespeichert wurde.

Von welcher Hardware bekommen die 3 Monitore das Videosignal?

taaktaak 18. Apr 2008 09:38

Re: unterschiedliche Monitor-Größe (Pixel)
 
Moin, Moin,
warum sollte dies nicht möglich sein? Wenn du schreibts,
Zitat:

...auf welchem Monitor (Auflösung) das Programm gestartet wurde...
meinst du doch sicherlich, du möchtest ermitteln, auf welchem Monitor das Form angezeigt wird. Schau mal hier

Muetze1 18. Apr 2008 09:40

Re: unterschiedliche Monitor-Größe (Pixel)
 
MSDN-Library durchsuchenMonitorFromWindow(), MSDN-Library durchsuchenMonitorFromRect() und MSDN-Library durchsuchenMonitorFromPoint()

Ach so: Das HMONITOR Handle was du bekommst, findest du in Screen.Monitors[].Handle wieder. Damit wäre der Link von taaktaak auch deutlich vereinfachbarer.

taaktaak 18. Apr 2008 09:43

Re: unterschiedliche Monitor-Größe (Pixel)
 
Jooo, wenn man die Unit MultiMon.pas einbindet geht's auch so :mrgreen:

Muetze1 18. Apr 2008 09:44

Re: unterschiedliche Monitor-Größe (Pixel)
 
Zitat:

Zitat von taaktaak
Jooo, wenn man die Unit MultiMon.pas einbindet geht's auch so :mrgreen:

Die nötigen Funktionen kann man auch ohne die MultiMon.pas direkt einbinden mit GetProcAddress(). Die MultiMon.pas macht es ja nicht anders.

taaktaak 18. Apr 2008 09:52

Re: unterschiedliche Monitor-Größe (Pixel)
 
Auch hier keine Wiederrede :shock:

Ines 18. Apr 2008 10:37

Re: unterschiedliche Monitor-Größe (Pixel)
 
Zitat:

Zitat von DeddyH
Ich sag mal ganz blöd: Du könntest Screen.Width bzw. Screen.Height abfragen.

Liefert leider die falschen Werte


Zitat:

Zitat von hathor
Von welcher Hardware bekommen die 3 Monitore das Videosignal?

PC mit Windows XP und 2 Graphikkarten.



Zitat:

Zitat von taaktaak
...meinst du doch sicherlich, du möchtest ermitteln, auf welchem Monitor das Form angezeigt wird. Schau mal hier

Diese Routine werde ich in aller Ruhe in nächster Zeit testen. Versprochen.

Ich versuche mein Problem mit MonitorFromWindows zu lösen.

Vielen Dank für Eure schnelle Hilfe
Ines

bitsetter 18. Apr 2008 10:57

Re: unterschiedliche Monitor-Größe (Pixel)
 
Zitat:

Zitat von Muetze1
MSDN-Library durchsuchenMonitorFromWindow(), MSDN-Library durchsuchenMonitorFromRect() und MSDN-Library durchsuchenMonitorFromPoint()

Ach so: Das HMONITOR Handle was du bekommst, findest du in Screen.Monitors[].Handle wieder.

Warum soll man das über die API machen, wenn die Funktionen schon von der VCL unter Delphi-Referenz durchsuchenTScreen gekapselt worden sind, oder sehe ich da was falsch?

Sherlock 18. Apr 2008 11:08

Re: unterschiedliche Monitor-Größe (Pixel)
 
Seh ich wie Bitsetter, nicht nur Google sondern auch die VCL ist unser Freund.
Sonst könnte man ja gleich in C entwickeln.

Sherlock

Muetze1 18. Apr 2008 11:43

Re: unterschiedliche Monitor-Größe (Pixel)
 
Zitat:

Zitat von bitsetter
Warum soll man das über die API machen, wenn die Funktionen schon von der VCL unter Delphi-Referenz durchsuchenTScreen gekapselt worden sind, oder sehe ich da was falsch?

Ja, ich finde du siehst da was falsch. Wenn ich mir TScreen etc anschaue, habe ich keine Funktion mir zu einem Formular X den Monitor heraus zu bekommen. Ich müsste die Überschneidung testen wie vorgeschlagen, oder aber ich frage einfach Windows. Die VCL kapselt die WinAPI Aufrufe für MultiMon etc in der VCL, einen Teil dazu u.a. in der TScreen. Das Problem ist doch einfach nur, dass die von mir oben genannten Funktionen nicht gekapselt wurden. Warum auch immer - ob vergessen oder sonstwas.

Aber grundlegend die WinAPI als Teufelszeug zu verschreien, nur weil ich mit viel mehr Aufwand und beschränkter Funktionalität der VCL gleiches erreichen kann, warum? Es gibt eine einzige Funktion die genau und definiert die Aufgabenerstellung erfüllt.

Und ich habe schon extra darauf hingewiesen, dass der Rückgabewert der WinAPI Funktion sich in den TMonitor Instanzen in der Eigenschaft Handle wiederfindet. Ich habe nicht gesagt, dass man alles davon ausgehend mit der WinAPI lösen sollte. Die Kombination machts, schliesslich bietet die VCL auch genug - und für alles andere klappt das ja, nur halt an der einen Stelle bietet sie keine Lösung an.

Und einen zusätzlichen Ja Sager um es dann gleich ganz zu übertreiben braucht der Beitrag auch nicht. Schon allein sehe ich keinen Zusammenhang das Nutzung der WinAPI gleich C als Programmiersprache fordert. Nur weil die MSDN die Funktionen mit C dokumentiert, bedeutet dies nichts dahingehend.

Sherlock 18. Apr 2008 11:57

Re: unterschiedliche Monitor-Größe (Pixel)
 
1) Ich verschreie nichts als Teufelszeug.
2) Die von Dir genannten Methoden sind sehr wohl in TScreen implementiert (zumindest bei Delphi7).
3) Ich bin kein Jasager.
4) Sorry, daß ich den Thread zumülle.

Sherlock

Edit: Ah, Delphi 5...ok. Sorry!

Muetze1 18. Apr 2008 12:03

Re: unterschiedliche Monitor-Größe (Pixel)
 
Zitat:

Zitat von Sherlock
1) Ich verschreie nichts als Teufelszeug.

War nicht auf dich bezogen.

Zitat:

Zitat von Sherlock
2) Die von Dir genannten Methoden sind sehr wohl in TScreen implementiert (zumindest bei Delphi7).

Wie du meinem Profil entnehmen kannst, Delphi 5 und dort sind diese Funktionen nicht enthalten.

Somit ist meine Lösung der gehbare Weg für Delphi 5 und Delphi 7 hat diese implementiert, aber woher sollte ich das Wissen?

bepe 18. Apr 2008 12:16

Re: unterschiedliche Monitor-Größe (Pixel)
 
Ähm.. vielleicht habe ich etwas überlesen aber warum so umständlich? :-D

Wenn du wissen möchtest auf welchem Monitor ein Form angezeigt wird, frag es einfach :lol:

Delphi-Quellcode:
Screen.MonitorCount
Screen.Monitors

TForm.Monitor // Das hier suchst du wohl...

bitsetter 18. Apr 2008 13:31

Re: unterschiedliche Monitor-Größe (Pixel)
 
Zitat:

Zitat von Muetze1
Ja, ich finde du siehst da was falsch. Wenn ich mir TScreen etc anschaue, habe ich keine Funktion mir zu einem Formular X den Monitor heraus zu bekommen. Ich müsste die Überschneidung testen wie vorgeschlagen, oder aber ich frage einfach Windows. Die VCL kapselt die WinAPI Aufrufe für MultiMon etc in der VCL, einen Teil dazu u.a. in der TScreen. Das Problem ist doch einfach nur, dass die von mir oben genannten Funktionen nicht gekapselt wurden. Warum auch immer - ob vergessen oder sonstwas.

Aber grundlegend die WinAPI als Teufelszeug zu verschreien, nur weil ich mit viel mehr Aufwand und beschränkter Funktionalität der VCL gleiches erreichen kann, warum? Es gibt eine einzige Funktion die genau und definiert die Aufgabenerstellung erfüllt.

Und ich habe schon extra darauf hingewiesen, dass der Rückgabewert der WinAPI Funktion sich in den TMonitor Instanzen in der Eigenschaft Handle wiederfindet. Ich habe nicht gesagt, dass man alles davon ausgehend mit der WinAPI lösen sollte. Die Kombination machts, schliesslich bietet die VCL auch genug - und für alles andere klappt das ja, nur halt an der einen Stelle bietet sie keine Lösung an.

Und einen zusätzlichen Ja Sager um es dann gleich ganz zu übertreiben braucht der Beitrag auch nicht. Schon allein sehe ich keinen Zusammenhang das Nutzung der WinAPI gleich C als Programmiersprache fordert. Nur weil die MSDN die Funktionen mit C dokumentiert, bedeutet dies nichts dahingehend.

@Muetze1 Mit meinem Beitrag wollte ich lediglich darauf hinweisen, dass die Funktionen auch in der VCL (demnach ab Delphi 6) enthalten sind. Immerhin befinden wir uns in der Rubrik "VCL / WinForms / Controls".
Keine Ahnung warum du dann gleich so gereizt reagiert.

bepe 18. Apr 2008 13:53

Re: unterschiedliche Monitor-Größe (Pixel)
 
Wenn ich mich an der Stelle dann einmischen darf um hier evtl. Verwirrung für unwissende Mitlesende zu lichten....

Zitat:

MonitorFromWindow() , MonitorFromRect() und MonitorFromPoint()
Die genannten Funktionen sind in der Unit MultiMon gekapselt. TScreen stellt keine der Funktionen zur Verfügung. Das gilt für D5-D2007. Die VCL-Alternative (die Eigenschaft Monitor von TForm) ist ebenfalls in D5 schon vorhanden

Muetze1 18. Apr 2008 15:31

Re: unterschiedliche Monitor-Größe (Pixel)
 
Zitat:

Zitat von bepe
Wenn ich mich an der Stelle dann einmischen darf um hier evtl. Verwirrung für unwissende Mitlesende zu lichten....

Bzw. zu erhöhen

bepe
Zitat:

MonitorFromWindow() , MonitorFromRect() und MonitorFromPoint()
Die genannten Funktionen sind in der Unit MultiMon gekapselt. TScreen stellt keine der Funktionen zur Verfügung. Das gilt für D5-D2007. Die VCL-Alternative (die Eigenschaft Monitor von TForm) ist ebenfalls in D5 schon vorhanden


Falsch.

D7: Classes.pas, TScreen, Public:
Delphi-Quellcode:
    function MonitorFromPoint(const Point: TPoint;
      MonitorDefault: TMonitorDefaultTo = mdNearest): TMonitor;
    function MonitorFromRect(const Rect: TRect;
      MonitorDefault: TMonitorDefaultTo = mdNearest): TMonitor;
    function MonitorFromWindow(const Handle: THandle;
      MonitorDefault: TMonitorDefaultTo = mdNearest): TMonitor;
Copyright (c) 1995-2002 Borland Software Corporation

Und ja, die Monitor-Eigenschaft ist die richtige Eigenschaft welche zu nutzen ist, da sie genau das gesuchte macht:

Delphi-Quellcode:
  ...
  Result := nil;
  HM := MonitorFromWindow(Handle, MONITOR_DEFAULTTONEAREST);
  for I := 0 to Screen.MonitorCount - 1 do
    if Screen.Monitors[I].Handle = HM then
    begin
      Result := Screen.Monitors[I];
      Exit;
    end;
  ...
Copyright (c) 1995-2002 Borland Software Corporation

Zitat:

Zitat von bitsetter
Keine Ahnung warum du dann gleich so gereizt reagiert.

Ich empfehle dir eine Mail an Moderatoren zu schreiben oder den Beitrag zu melden. Dann kann dieser entfernt werden bzw. ich anderweitig abgemahnt bzw. gesperrt werden - dein Einwand ist schliesslich nicht unberechtigt.

bitsetter 18. Apr 2008 17:04

Re: unterschiedliche Monitor-Größe (Pixel)
 
Zitat:

Zitat von bepe
Wenn ich mich an der Stelle dann einmischen darf um hier evtl. Verwirrung für unwissende Mitlesende zu lichten....

Zitat:

MonitorFromWindow() , MonitorFromRect() und MonitorFromPoint()
Die genannten Funktionen sind in der Unit MultiMon gekapselt. TScreen stellt keine der Funktionen zur Verfügung. Das gilt für D5-D2007.

Da muss ich dir auch widersprechen, die Funktionen sind in Delphi 6 sowie Delphi 2006 in der Komponente TScreen vorhanden.

Zitat:

Zitat von Muetze1
Zitat:

Zitat von bitsetter
Keine Ahnung warum du dann gleich so gereizt reagiert.

Ich empfehle dir eine Mail an Moderatoren zu schreiben oder den Beitrag zu melden. Dann kann dieser entfernt werden bzw. ich anderweitig abgemahnt bzw. gesperrt werden - dein Einwand ist schliesslich nicht unberechtigt.

:shock: Wegen so einer Kleinigkeit, hätte ohnehin kein Grund dazu. Außerdem wird ausgerechnet dich hier deswegen niemand sperren. :)
:cheers:


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