Monitorpositionen
-
Ich habe folgendes Problem:
Ich möchte auf jedem Monitor (ich hab momentan 2) ein Bild zeigen, als Vollbild,
sodass auf allen Monitoren das selbe Bild zu sehen ist.Ich erstelle dazu eine Form mit einem Bild darauf (ist schon vorbereitet).
Problematik: die Position des Bildschirms - die Position der Form
Die Monitore können ja über, unter, neben und sonstewo sein (gesehen vom Hauptmonitor). Screen->Monitors[int]->Left oder Screen->Monitors[int]->Top
liefern nicht das was ich brauche.Ich muss die Form oben in die Bildschirmecke kriegen, oder zumindest auf den richtigen Monitor und dann mit wsMaximized maximieren.
KEIN Problem: Bildgröße lässt sich einfach mit Monitors[int]->Length/Width lesen.
Mein ansatz: (wird leider alles auf hauptbildschirm angezeigt)
im header:
TPictureOverlay* overlay[16];
in der cpp:
int i = 0; while (i < Screen->MonitorCount) { i++; overlay[i-1] = new TPictureOverlay(Toolbox->Owner); overlay[i-1]->Fullscreen->Picture->Bitmap = PicMod->Image->Picture->Bitmap; overlay[i-1]->Height = Screen->Monitors[i-1]->Height; overlay[i-1]->Width = Screen->Monitors[i-1]->Width; overlay[i-1]->Fullscreen->Height = Screen->Monitors[i-1]->Height; overlay[i-1]->Fullscreen->Width = Screen->Monitors[i-1]->Width; //overlay[i-1]->WindowState = wsMaximized; overlay[i-1]->Show(); }
dazwischen sind noch Versuche, einer funktioniert... aber nur wenn der Bildschirm links daneben ist.
Bitte um geistige Unterstützung
-
Hallo,
versteh ich nicht! Woher soll denn das Programm wissen wo die Monitore stehen? Und wieso erhöhst du i um dann wieder 1 abzuziehen? (i++ // [i-1])
Ich glaube beide Monitore zusammen ergeben einen großen Monitor. Du müsstest also Monitors[0]->Width als Left für dein Form geben.
VlG
-
RandomAccess85 schrieb:
Hallo,
Ich glaube beide Monitore zusammen ergeben einen großen Monitor. Du müsstest also Monitors[0]->Width als Left für dein Form geben.
VlGSinnbefreiung von Monitors[], also so ganz kann das ja nicht stimmen.
btw: schon mal dran gedacht, dass der Monitor 2 über dem Hauptmonitor ist ?RandomAccess85 schrieb:
Hallo,
versteh ich nicht! Woher soll denn das Programm wissen wo die Monitore stehen? Und wieso erhöhst du i um dann wieder 1 abzuziehen? (i++ // [i-1])
1. von Screen->Monitors[] ? In den Windows Eigenschaften muss man doch die Position der Bildschirme angeben, klar kann der zweite links vom Hauptmonitor stehen, aber eingestellt ist rechts, wenn man Fenster X von Monitor a auf monitor b ziehen will, muss das ja über eine Bildschirmkante laufen, die muss windows ja kennen !
2. vergiss das, hätte for(;;) nehmen sollen (& und weil Monitors[] bei 0 beginnt und nicht bei 1 - das i++ kann auch ans ende, aber wie gesagt for ist besser !)
-
Hallo,
Die TScreen Klasse kapselt ja letztendlich auch nur WinAPI-Funktionen (GetSystemMetrics, GetDeviceCaps, SystemParametersInfo etc.).
Wenn du darüber mehr wissen willst schau mal hier rein.
http://msdn.microsoft.com/en-us/library/dd145071.aspx
-
Hab dir mal ein Beispielprojekt hochgeladen.
Im ListView werden nach dem Start die Bildschirme aufgelistet.
Der primäre Bildschirm wird mit * gekennzeichnet durch klick auf die CheckBoxen kann man auswählen auf welchen Bildschirmen die Bilder dargestellt werden sollen.
-
Vielen Dank, das Beispielprogramm (sicher hattest du das schon rumliegen, siehe quotations) zeigt genau das was ich brauche und suchte.
Folgendes Löst das Positionsproblem:
Screen->Monitors[i]->BoundsRect.Left Screen->Monitors[i]->BoundsRect.Top Screen->Monitors[i]->BoundsRect.Right Screen->Monitors[i]->BoundsRect.Bottom
Hab mir das ganze mal genauer angesehen (muss ich in der Hilfe wohl übersehen haben)
Das ist für mich auch einigermaßen wichtig, da mir das sicher immer wieder über den Weg laufen wird.