diff --git a/PrimaryFormParts/PrimaryForm.Favorite.cs b/PrimaryFormParts/PrimaryForm.Favorite.cs index c52c9f5..0c7da50 100644 --- a/PrimaryFormParts/PrimaryForm.Favorite.cs +++ b/PrimaryFormParts/PrimaryForm.Favorite.cs @@ -26,19 +26,19 @@ namespace DualScreenDemo private void InitializeButtonsForFavoritePictureBox() { - + // 我的最愛數字座標按鈕 int[,] coords = new int[,] { - {799, 508, 70, 65}, - {878, 508, 70, 65}, - {957, 508, 70, 65}, - {1036, 508, 70, 65}, - {1115, 508, 70, 65}, - {799, 580, 70, 65}, - {878, 580, 70, 65}, - {957, 580, 70, 65}, - {1036, 580, 70, 65}, - {1115, 580, 70, 65} + {794, 508, 70, 65}, + {873, 508, 70, 65}, + {952, 508, 70, 65}, + {1031, 508, 70, 65}, + {1110, 508, 70, 65}, + {794, 580, 70, 65}, + {873, 580, 70, 65}, + {952, 580, 70, 65}, + {1031, 580, 70, 65}, + {1110, 580, 70, 65} }; int screenW = Screen.PrimaryScreen.Bounds.Width; @@ -89,7 +89,7 @@ namespace DualScreenDemo { Name = "enterFavoriteButton" }; - ResizeAndPositionButton(enterFavoriteButton, 842, 652, 70, 65); + ResizeAndPositionButton(enterFavoriteButton, 837, 652, 70, 65); enterFavoriteButton.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, @"themes\superstar\我的最愛\我的最愛-12.png")); enterFavoriteButton.BackgroundImageLayout = ImageLayout.Stretch; enterFavoriteButton.FlatStyle = FlatStyle.Flat; @@ -104,7 +104,7 @@ namespace DualScreenDemo { Name = "newFavoriteButton" }; - ResizeAndPositionButton(newFavoriteButton, 921, 652, 70, 65); + ResizeAndPositionButton(newFavoriteButton, 916, 652, 70, 65); newFavoriteButton.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, @"themes\superstar\我的最愛\我的最愛-13.png")); newFavoriteButton.BackgroundImageLayout = ImageLayout.Stretch; newFavoriteButton.FlatStyle = FlatStyle.Flat; @@ -119,7 +119,7 @@ namespace DualScreenDemo { Name = "refillFavoriteButton" }; - ResizeAndPositionButton(refillFavoriteButton, 999, 652, 70, 65); + ResizeAndPositionButton(refillFavoriteButton, 994, 652, 70, 65); refillFavoriteButton.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, @"themes\superstar\我的最愛\我的最愛-14.png")); refillFavoriteButton.BackgroundImageLayout = ImageLayout.Stretch; refillFavoriteButton.FlatStyle = FlatStyle.Flat; @@ -134,7 +134,7 @@ namespace DualScreenDemo { Name = "closeFavoriteButton" }; - ResizeAndPositionButton(closeFavoriteButton, 1078, 652, 70, 65); + ResizeAndPositionButton(closeFavoriteButton, 1073, 652, 70, 65); closeFavoriteButton.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, @"themes\superstar\我的最愛\我的最愛-15.png")); closeFavoriteButton.BackgroundImageLayout = ImageLayout.Stretch; closeFavoriteButton.FlatStyle = FlatStyle.Flat; diff --git a/PrimaryFormParts/PrimaryForm.cs b/PrimaryFormParts/PrimaryForm.cs index c09f26b..903196b 100644 --- a/PrimaryFormParts/PrimaryForm.cs +++ b/PrimaryFormParts/PrimaryForm.cs @@ -266,6 +266,7 @@ namespace DualScreenDemo private Dictionary initialControlPositions = new Dictionary(); private Panel sendOffPanel; + private Panel firePanel; private static Bitmap normalStateImageHotSong; private static Bitmap mouseDownImageHotSong; @@ -334,7 +335,9 @@ namespace DualScreenDemo InitializeHandWritingForSongs(); InitializeSendOffPanel(); - + //火災畫面 初始化 + InitializeFirePanel(); + InitializePromotionsAndMenuPanel(); SaveInitialControlStates(this); // 包廂 + port 名稱 @@ -444,12 +447,21 @@ namespace DualScreenDemo buttonTopLeft.BringToFront(); buttonThanks.BringToFront(); } + public void ShowFireScreen() + { + firePanel.BringToFront(); + firePanel.Visible = true; + + } public void HideSendOffScreen() { sendOffPanel.Visible = false; } - + public void HideFireScreen() + { + firePanel.Visible = false; + } private void HideAllButtons() { HideControlsRecursively(this); @@ -3367,6 +3379,15 @@ public class MultiPagePanel : Panel } } + private void InitializeFirePanel(){ + firePanel = new Panel{ + Dock = DockStyle.Fill, + //BackColor = Color.Black, + BackgroundImage = LoadFireImage(), + BackgroundImageLayout = ImageLayout.Stretch + }; + this.Controls.Add(firePanel); + } private void InitializeSendOffPanel() { sendOffPanel = new Panel @@ -3460,9 +3481,13 @@ public class MultiPagePanel : Panel }; this.Controls.Add(sendOffPanel); } + + + /// /// 動態按鈕座標位置設定(依據螢幕大小) /// + private void UpdateSendOffButtonPositions() { Size designSize = new Size(1920, 1080); var panelWidth = sendOffPanel.Width; @@ -3560,7 +3585,27 @@ public class MultiPagePanel : Panel return null; } } - + private Image LoadFireImage() + { + try + { + string filePath = Path.Combine(Application.StartupPath, "themes\\superstar\\VOD_消防畫面.jpg"); + if (File.Exists(filePath)) + { + return Image.FromFile(filePath); + } + else + { + Console.WriteLine("VOD_消防畫面.jpg 文件未找到。"); + return null; + } + } + catch (Exception ex) + { + Console.WriteLine($"加載消防畫面圖片時發生錯誤: {ex.Message}"); + return null; + } + } // 將 SequenceManager 類保留在這裡 private class SequenceManager { diff --git a/TCPServer.cs b/TCPServer.cs index f1e3ef0..48ce14a 100644 --- a/TCPServer.cs +++ b/TCPServer.cs @@ -155,6 +155,9 @@ namespace DualScreenDemo await SafeInvoke(PrimaryForm.Instance, () => { PrimaryForm.Instance.ShowSendOffScreen(); + PrimaryForm.Instance.HideFireScreen(); + string marqueeMessage= "歡迎使用超級巨星歡唱網路版系統,與你共度美好時光。"; + OverlayForm.MainForm.UpdateMarqueeText(marqueeMessage, OverlayForm.MarqueeStartPosition.Middle, Color.White); Console.WriteLine("開始設置新的播放列表"); string closePath = @"C:\video\CLOSE.MPG"; @@ -213,6 +216,9 @@ namespace DualScreenDemo _ = SafeInvoke(PrimaryForm.Instance, () => { PrimaryForm.Instance.HideSendOffScreen(); + PrimaryForm.Instance.HideFireScreen(); + string marqueeMessage= "歡迎使用超級巨星歡唱網路版系統,與你共度美好時光。"; + OverlayForm.MainForm.UpdateMarqueeText(marqueeMessage, OverlayForm.MarqueeStartPosition.Middle, Color.White); }); VideoPlayerForm.publicPlaylist = new List(); VideoPlayerForm.playingSongList = new List(); @@ -221,6 +227,22 @@ namespace DualScreenDemo UpdateStateFile(stateFilePath, "OPEN"); continue; } + if (command.Trim().Equals("F", StringComparison.OrdinalIgnoreCase)) + { + _ = SafeInvoke(PrimaryForm.Instance, () => + { + PrimaryForm.Instance.HideSendOffScreen(); + PrimaryForm.Instance.ShowFireScreen(); + VideoPlayerForm.Instance.Pause(); + string marqueeMessage = "發生火災,請跟隨引導至逃生出口!!!"; + OverlayForm.MainForm.UpdateMarqueeText(marqueeMessage, OverlayForm.MarqueeStartPosition.Middle, Color.Red); + }); + + // 更新狀態檔案(可選,若你要記錄狀態) + UpdateStateFile(stateFilePath, "PAUSE"); + + continue; + } } // 若 Overlay Form 準備好,嘗試顯示跑馬燈文字 diff --git a/bin/themes/superstar/VOD_消防畫面.jpg b/bin/themes/superstar/VOD_消防畫面.jpg new file mode 100644 index 0000000..76c4170 Binary files /dev/null and b/bin/themes/superstar/VOD_消防畫面.jpg differ