Skip to content

Commit

Permalink
Implement Screen Change
Browse files Browse the repository at this point in the history
  • Loading branch information
reckel-jm committed Apr 16, 2024
1 parent b2c912a commit 99ff99b
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/forms/present.lfm
Expand Up @@ -16,7 +16,6 @@ object frmPresent: TfrmPresent
OnShow = FormShow
PopupMenu = PresentationMenu
Position = poScreenCenter
LCLVersion = '3.2.0.0'
WindowState = wsMaximized
object imageShower: TImage
AnchorSideLeft.Control = Owner
Expand Down Expand Up @@ -44,6 +43,7 @@ object frmPresent: TfrmPresent
end
object MenuItemMoveToScreen: TMenuItem
Caption = 'Move to other screen'
OnClick = MenuItemMoveToScreenClick
end
object MenuItemQuitPresentation: TMenuItem
Caption = 'Quit Presentation'
Expand Down
49 changes: 49 additions & 0 deletions src/forms/present.pas
Expand Up @@ -32,6 +32,7 @@ TfrmPresent = class(TForm)
procedure FormResize(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure imageShowerClick(Sender: TObject);
procedure MenuItemMoveToScreenClick(Sender: TObject);
procedure MenuItemQuitPresentationClick(Sender: TObject);
procedure MenuItemToggleFullScreenClick(Sender: TObject);
procedure showItem(index: Integer);
Expand Down Expand Up @@ -142,6 +143,54 @@ procedure TfrmPresent.imageShowerClick(Sender: TObject);
self.GoNext;
end;

procedure TfrmPresent.MenuItemMoveToScreenClick(Sender: TObject);
var
ActiveMonitor: TMonitor;
i, ActiveMonitorIndex, MoveToMonitorIndex: Integer;
FullScreenWasActive: Boolean;
BeforeWindowState: TWindowState;
begin
Screen.UpdateMonitors;
if Screen.MonitorCount <= 1 then Exit;

BeforeWindowState := Self.WindowState;

ActiveMonitor := Screen.MonitorFromWindow(Self.Handle);

for i := 0 to Screen.MonitorCount -1 do
begin
if ActiveMonitor = Screen.Monitors[i] then
begin
ActiveMonitorIndex := i;
Break;
end;
end;

if ActiveMonitorIndex < Screen.MonitorCount-1 then
MoveToMonitorIndex := ActiveMonitorIndex + 1
else MoveToMonitorIndex := 0;

FullScreenWasActive := Self.FullScreen;

if Self.FullScreen then
begin
Self.SwitchFullScreen(False);
Application.ProcessMessages;
end;
Self.Left:=Screen.Monitors[MoveToMonitorIndex].Left;
Self.Top:=Screen.Monitors[MoveToMonitorIndex].Top;
Self.Refresh;
Self.Invalidate;
Application.ProcessMessages;

If FullScreenWasActive then
begin
Self.SwitchFullScreen(True);
Application.ProcessMessages;
end else
Self.WindowState := BeforeWindowState;
end;

procedure TfrmPresent.MenuItemQuitPresentationClick(Sender: TObject);
begin
Self.Hide;
Expand Down

0 comments on commit 99ff99b

Please sign in to comment.