Servus @All,
ich hätte da mal ein kleines Problem:
Ich schreibe derzeit an einem Programm, welches aus einem BarCode den GesamtPreis ausliest, abspeichert und
an einen Bezahlautomaten übergibt. Funktioniert alles.
Nur: Ich würde gerne eine zweite Form auf einem zweiten Monitor anzeigen lassen, wo der Kunde quasi den
Zahlbetrag, Gegebenen Betrag und das Rückgeld, sowie eventuell etwas Werbung (ipg, etc.) sehen kann.
Habe zwar mit "screen.MonitorCount" die Anzahl meiner Monitore anzeigen können, weiss aber jetzt aber leider
nicht weiter, wie ich "Form2" auf "Monitor2" anzeigen lassen kann.
Kann mir da jemand einen Tip geben?
1 Programm - 2 Bildschirme
Re: 1 Programm - 2 Bildschirme
Hallo!
Du könntest versuchen die Positionen Top und Left der jeweiligen Form händisch zu stellen. Wenn du weißt wie groß die Monitore sind (zb. 1920x1080) kannst du die Form2->Left auf über 1920 setzen. Somit erscheint es auf Desktop2.
Du könntest versuchen die Positionen Top und Left der jeweiligen Form händisch zu stellen. Wenn du weißt wie groß die Monitore sind (zb. 1920x1080) kannst du die Form2->Left auf über 1920 setzen. Somit erscheint es auf Desktop2.
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: 1 Programm - 2 Bildschirme
In der Unit Forms hast du über die globale Variable Screen Zugriff auf die Bildschirminformationen.
Damit kannst du dann die Position der Forms selbst setzen.
Ergibt bei mir z.B.
Nachtrag:
Gerade habe ich die Methode MakeFullyVisible entdeckt.
Du kannst also auch schreiben:
Damit kannst du dann die Position der Forms selbst setzen.
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
Msg: String;
begin
// aktuelle Informationen vom OS abfragen,
// falls Bildschirme während der Programmlaufzeit angeschlossen/entfernt wurden
Screen.UpdateMonitors;
for i := 0 to Screen.MonitorCount - 1 do
begin
Msg := Format('Monitor %d: %dx%d X:%d Y:%d', [
i,
Screen.Monitors[i].Width,
Screen.Monitors[i].Height,
Screen.Monitors[i].Left,
Screen.Monitors[i].Top
]);
ListBox1.AddItem(Msg, nil);
end;
end;
Code: Alles auswählen
Monitor 0: 1920x1080 X:0 Y:0
Monitor 1: 1440x900 X:1920 Y:0
Gerade habe ich die Methode MakeFullyVisible entdeckt.
Du kannst also auch schreiben:
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
begin
if Screen.MonitorCount >= 2 then
Self.MakeFullyVisable(Screen.Monitor[1]);
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 2
- Registriert: Fr 24. Mai 2019, 11:41
- OS, Lazarus, FPC: Lazarus 2.0.12, FireBird, MariaDB
- Wohnort: Westerwald und Allgäu
Re: 1 Programm - 2 Bildschirme
Hallo Ihr zwei Beiden,
vielen lieben Dank für Eure Hilfe.
Ich habe es jetzt so gelöst:
1. In der Haupt-Form:
2. In der Anzeige-Form:
Bin zwar noch nicht so ganz glücklich, aber dann muss ich schauen, dass die "Anzeigen-Monitore" die gleiche Größe/Auflösungen haben. Aber das sollte kein Problem sein.
vielen lieben Dank für Eure Hilfe.
Ich habe es jetzt so gelöst:
1. In der Haupt-Form:
Code: Alles auswählen
procedure TForm1.FormShow(Sender: TObject);
begin
if Screen.MonitorCount > 1 then
begin
Form3.Left:=Screen.Monitors[2].Left;
Form3.Show;
end;
end;
Code: Alles auswählen
procedure TForm3.FormCreate(Sender: TObject);
begin
Form3.Color:=clLime;
Form3.WindowState:=wsMaximized;
end;