From c3ca11a71cec6fb82e6d681838288757190a2f91 Mon Sep 17 00:00:00 2001 From: jasonchenwork Date: Wed, 16 Apr 2025 11:20:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E6=9C=80=E6=84=9B=E8=AA=BF?= =?UTF-8?q?=E6=95=B4+=E9=BB=9E=E6=AD=8C=E7=95=8C=E9=9D=A2=E8=AA=BF?= =?UTF-8?q?=E6=95=B4+=E5=8C=85=E5=BB=82=E5=A1=97=E9=B4=89=E8=AA=BF?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PrimaryFormParts/PrimaryForm.Favorite.cs | 35 ++++++--- PrimaryFormParts/PrimaryForm.SQLSearch.cs | 77 ++++++++++++++++++- PrimaryFormParts/PrimaryForm.VodScreen.cs | 40 ++++++---- PrimaryFormParts/PrimaryForm.cs | 36 ++++++--- .../PrimaryForm.SongSearch.WordCountSearch.cs | 2 +- 5 files changed, 153 insertions(+), 37 deletions(-) diff --git a/PrimaryFormParts/PrimaryForm.Favorite.cs b/PrimaryFormParts/PrimaryForm.Favorite.cs index 9400428..2c9dad2 100644 --- a/PrimaryFormParts/PrimaryForm.Favorite.cs +++ b/PrimaryFormParts/PrimaryForm.Favorite.cs @@ -205,11 +205,20 @@ namespace DualScreenDemo { if (mobileNumber.StartsWith("09") && mobileNumber.Length == 10) { - if (SongListManager.Instance.CheckIfPhoneNumberExists(mobileNumber)) + if (checkPhoneNumberExist(mobileNumber)) { isPhoneNumberValid = true; - SongListManager.Instance.UserLogin(mobileNumber); - + //SongListManager.Instance.UserLogin(mobileNumber); + + var searchResults = SearchSongs_Mysql(SearchFavoriteSongs_Mysql()); + // 重置分頁 + currentPage = 0; + currentSongList = searchResults; + totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage); + // 更新多頁面面板的內容 + multiPagePanel.currentPageIndex = 0; + multiPagePanel.LoadSongs(currentSongList); + ToggleFavoritePictureBoxButtonsVisibility(); } else @@ -234,23 +243,31 @@ namespace DualScreenDemo { if (mobileNumber.StartsWith("09") && mobileNumber.Length == 10) { - if (SongListManager.Instance.CheckIfPhoneNumberExists(mobileNumber)) + if (checkPhoneNumberExist(mobileNumber)) { isPhoneNumberValid = true; - SongListManager.Instance.UserLogin(mobileNumber); + var searchResults = SearchSongs_Mysql(SearchFavoriteSongs_Mysql()); + // 重置分頁 + currentPage = 0; + currentSongList = searchResults; + totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage); + // 更新多頁面面板的內容 + multiPagePanel.currentPageIndex = 0; + multiPagePanel.LoadSongs(currentSongList); ToggleFavoritePictureBoxButtonsVisibility(); } else { - isPhoneNumberValid = true; + /*isPhoneNumberValid = true; SongListManager.Instance.AddNewUser(mobileNumber); SongListManager.Instance.UserLogin(mobileNumber); List emptySongList = new List { new SongData("", "", "歡迎光臨 " + "(" + mobileNumber + ")", 0, "", "", "", "", DateTime.Now, "", "", "", "", "", "", "", "", "", "", "", "", 1) }; + multiPagePanel.currentPageIndex = 0; - multiPagePanel.LoadSongs(emptySongList); + multiPagePanel.LoadSongs(emptySongList);*/ ToggleFavoritePictureBoxButtonsVisibility(); } } @@ -276,8 +293,8 @@ namespace DualScreenDemo FavoritePictureBox.Invalidate(); FavoritePictureBox.Refresh(); - SongListManager.Instance.IsUserLoggedIn = false; - SongListManager.Instance.UserPhoneNumber = string.Empty; + //SongListManager.Instance.IsUserLoggedIn = false; + //SongListManager.Instance.UserPhoneNumber = string.Empty; } diff --git a/PrimaryFormParts/PrimaryForm.SQLSearch.cs b/PrimaryFormParts/PrimaryForm.SQLSearch.cs index 5df74c5..33dd63f 100644 --- a/PrimaryFormParts/PrimaryForm.SQLSearch.cs +++ b/PrimaryFormParts/PrimaryForm.SQLSearch.cs @@ -7,6 +7,8 @@ using System.Diagnostics; namespace DualScreenDemo{ public partial class PrimaryForm { + public bool isLoggedIn = false; + public string userPhone = string.Empty; public List SearchSongs_Mysql(string query) { List searchResults = new List(); @@ -90,11 +92,10 @@ namespace DualScreenDemo{ return searchResults; } - public List SearchSingers_Mysql(string query){ List searchResults = new List(); Console.WriteLine(query); - string connectionString = "Server=192.168.11.4;Port=3306;Database=Karaoke-Kingpin;User=Karaoke-Kingpin;Password=ESM7yTPMnavFmbBH;"; + string connectionString = "Server=192.168.11.4;Port=3306;Database=Karaoke-Kingpin;User=Karaoke-Kingpin;Password=ESM7yTPMnavFmbBH;"; using (var connection = new MySqlConnection(connectionString)) { @@ -132,6 +133,78 @@ namespace DualScreenDemo{ return searchResults; } + public void InsertNewFavoriteSong(string songNumber){ + + string query = $"INSERT INTO FavoriteSongs (Phonenumber,SongNumber) VALUES ('{userPhone}','{songNumber}');"; + Console.WriteLine(query); + string connectionString = "Server=192.168.11.4;Port=3306;Database=Karaoke-Kingpin;User=Karaoke-Kingpin;Password=ESM7yTPMnavFmbBH;"; + + using (var connection = new MySqlConnection(connectionString)) + { + + connection.Open(); + Console.WriteLine("MyDB 連線成功!"); + + using (var command = new MySqlCommand(query, connection)) + { + int rowsAffected = command.ExecuteNonQuery(); + if (rowsAffected > 0) + { + Console.WriteLine("插入成功!"); + } + else + { + Console.WriteLine("插入失敗(沒有資料被新增)"); + } + } + connection.Close(); + Console.WriteLine("MyDB 連線已關閉!"); + } + } + public string SearchFavoriteSongs_Mysql(){ + string query = $"SELECT " + + "sl.歌曲編號, sl.語別, sl.歌曲名稱, sl.點播次數, " + + "sl.`歌星 A`, sl.`歌星 B`, sl.新增日期, " + + "sl.`路徑 1`, sl.`路徑 2`, sl.歌曲檔名, sl.歌曲注音, sl.歌曲拼音, " + + "sl.歌星A分類, sl.歌星B分類, sl.歌星A注音, sl.歌星B注音, " + + "sl.歌星A簡體, sl.歌星B簡體, sl.歌名簡體, sl.分類, " + + "sl.歌星A拼音, sl.歌星B拼音, sl.人聲 " + + "FROM FavoriteSongs fs " + + "JOIN SongLibrary sl ON fs.SongNumber = sl.歌曲編號 " + + $"WHERE fs.Phonenumber = '{userPhone}';"; + return query; + + } + public bool checkPhoneNumberExist(string phonenumber){ + string connectionString = "Server=192.168.11.4;Port=3306;Database=Karaoke-Kingpin;User=Karaoke-Kingpin;Password=ESM7yTPMnavFmbBH;"; + bool exists = false; + using (var connection = new MySqlConnection(connectionString)) + { + connection.Open(); + Console.WriteLine("MyDB 連線成功!"); + string query = $"SELECT COUNT(*) FROM FavoriteSongs WHERE Phonenumber = '{phonenumber}'"; + using (var command = new MySqlCommand(query, connection)){ + int count = Convert.ToInt32(command.ExecuteScalar()); + if (count > 0) + { + exists = true; // 存在 + userPhone= phonenumber; + isLoggedIn = true; + //點歌我的最愛按鈕,調整按鈕狀態 + favoriteButton.Enabled = true; + favoriteButton.BackColor = Color.Transparent; + disabledPanel.Visible = false; + } + else + { + exists = false; // 不存在 + } + } + connection.Close(); + Console.WriteLine("MyDB 連線關閉!"); + } + return exists; + } private int countforSearch = 0; private void writeLogforSearchTime(long elapsedMs){ diff --git a/PrimaryFormParts/PrimaryForm.VodScreen.cs b/PrimaryFormParts/PrimaryForm.VodScreen.cs index e2f169b..24f56a3 100644 --- a/PrimaryFormParts/PrimaryForm.VodScreen.cs +++ b/PrimaryFormParts/PrimaryForm.VodScreen.cs @@ -14,10 +14,10 @@ namespace DualScreenDemo private void InitializeButtonsForVodScreenPictureBox() { - int screenWidth = 1440; - int screenHeight = 900; - int pictureBoxWidth = 700; - int pictureBoxHeight = 140; + int screenWidth = 1920; + int screenHeight = 1080; + int pictureBoxWidth = 938; + int pictureBoxHeight = 209; int xPosition = (screenWidth - pictureBoxWidth) / 2; int yPosition = (screenHeight - pictureBoxHeight) / 2; @@ -25,7 +25,7 @@ namespace DualScreenDemo vodButton = new Button(); vodButton.Text = ""; - ResizeAndPositionButton(vodButton, xPosition + 10, yPosition + 85, 110, 50); + ResizeAndPositionButton(vodButton, xPosition - 119, yPosition + 40, 110, 50); vodButton.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, @"themes\superstar\點播介面\點播介面_點歌.png")); vodButton.BackgroundImageLayout = ImageLayout.Stretch; vodButton.FlatStyle = FlatStyle.Flat; @@ -39,7 +39,7 @@ namespace DualScreenDemo insertButton = new Button(); insertButton.Text = ""; - ResizeAndPositionButton(insertButton, xPosition + 135, yPosition + 85, 110, 50); + ResizeAndPositionButton(insertButton, xPosition + 2 , yPosition + 40, 110, 50); insertButton.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, @"themes\superstar\點播介面\點播介面_插播.png")); insertButton.BackgroundImageLayout = ImageLayout.Stretch; insertButton.FlatStyle = FlatStyle.Flat; @@ -53,7 +53,7 @@ namespace DualScreenDemo albumButton = new Button(); albumButton.Text = ""; - ResizeAndPositionButton(albumButton, xPosition + 265, yPosition + 85, 140, 50); + ResizeAndPositionButton(albumButton, xPosition + 122, yPosition + 40, 140, 50); albumButton.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, @"themes\superstar\點播介面\點播介面_歷年專輯.png")); albumButton.BackgroundImageLayout = ImageLayout.Stretch; albumButton.FlatStyle = FlatStyle.Flat; @@ -67,7 +67,7 @@ namespace DualScreenDemo favoriteButton = new Button(); favoriteButton.Text = ""; - ResizeAndPositionButton(favoriteButton, xPosition + 425, yPosition + 85, 140, 50); + ResizeAndPositionButton(favoriteButton, xPosition + 272, yPosition + 40, 140, 50); favoriteButton.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, @"themes\superstar\點播介面\點播介面_我的最愛.png")); favoriteButton.BackgroundImageLayout = ImageLayout.Stretch; favoriteButton.FlatStyle = FlatStyle.Flat; @@ -78,24 +78,25 @@ namespace DualScreenDemo disabledPanel = new Panel(); disabledPanel.BackColor = Color.FromArgb(128, Color.Black); - disabledPanel.Dock = DockStyle.Fill; - disabledPanel.Visible = !IsUserLoggedIn(); + disabledPanel.Dock = DockStyle.Fill; + + disabledPanel.Visible = !isLoggedIn; favoriteButton.Controls.Add(disabledPanel); favoriteButton.Click += FavoriteButton_Click; - if (!IsUserLoggedIn()) { + if (!isLoggedIn) { favoriteButton.Enabled = false; favoriteButton.BackColor = SystemColors.Control; } - favoriteButton.Visible = IsUserLoggedIn(); + favoriteButton.Visible = isLoggedIn; vodScreenCloseButton = new Button(); vodScreenCloseButton.Text = ""; - ResizeAndPositionButton(vodScreenCloseButton, xPosition + 580, yPosition + 85, 110, 50); + ResizeAndPositionButton(vodScreenCloseButton, xPosition + 422, yPosition + 40, 110, 50); vodScreenCloseButton.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, @"themes\superstar\點播介面\點播介面_關閉.png")); vodScreenCloseButton.BackgroundImageLayout = ImageLayout.Stretch; vodScreenCloseButton.FlatStyle = FlatStyle.Flat; @@ -146,9 +147,16 @@ namespace DualScreenDemo { Console.WriteLine("Favorite Button Clicked"); - + InsertNewFavoriteSong(currentSelectedSong.SongNumber); + var searchResults = SearchSongs_Mysql(SearchFavoriteSongs_Mysql()); + // 重置分頁 + currentPage = 0; + currentSongList = searchResults; + totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage); + // 更新多頁面面板的內容 + multiPagePanel.currentPageIndex = 0; + multiPagePanel.LoadSongs(currentSongList); - SongListManager.Instance.AddToFavorite(currentSelectedSong.SongNumber); SetVodScreenPictureBoxAndButtonsVisibility(false); } @@ -183,7 +191,7 @@ namespace DualScreenDemo if (isVisible) { - if (IsUserLoggedIn()) + if (isLoggedIn) { favoriteButton.Enabled = true; favoriteButton.Controls.Remove(disabledPanel); diff --git a/PrimaryFormParts/PrimaryForm.cs b/PrimaryFormParts/PrimaryForm.cs index 3f2fe21..83378ac 100644 --- a/PrimaryFormParts/PrimaryForm.cs +++ b/PrimaryFormParts/PrimaryForm.cs @@ -267,21 +267,39 @@ namespace DualScreenDemo string displayName = "包廂" + hostName.Substring(Math.Max(0, hostName.Length - 20)); string totalPages = multiPagePanel.totalPages.ToString() == "0" ? "1" : multiPagePanel.totalPages.ToString(); string pageNumber = (multiPagePanel.currentPageIndex + 1).ToString() + "/" + totalPages; + + // 最後確定要塗鴉的值 + displayName = displayName + " " + pageNumber; + + // 基準解析度(你目前的設計基準) + float baseWidth = 1920f; + float baseHeight = 1080f; + + // 實際螢幕解析度 + float actualWidth = Screen.PrimaryScreen.Bounds.Width; + float actualHeight = Screen.PrimaryScreen.Bounds.Height; + + // 計算縮放比例 + float scaleX = actualWidth / baseWidth; + float scaleY = actualHeight / baseHeight; + + // 設定字型: // "微軟正黑體",大小 24,粗體 (Bold) - Font font = new Font("微軟正黑體", 24, FontStyle.Bold); + float fontSize = 24 * scaleY; + Font font = new Font("微軟正黑體", fontSize, FontStyle.Bold); // 設定畫刷 (Brush): // 使用紅色 (Red) 來繪製文字 Brush brush = new SolidBrush(Color.Red); // 設定繪製文字的位置 (X=500, Y=30) - PointF point_PCName = new PointF(500, 30); - PointF point_pageNumber = new PointF(700, 30); - + PointF point_PCName = new PointF(500 * scaleX, 30 * scaleY); + + // 繪製文字: // `DrawString(要繪製的文字, 字型, 畫刷, 位置)` e.Graphics.DrawString(displayName, font, brush, point_PCName); - e.Graphics.DrawString(pageNumber, font, brush, point_pageNumber); + } private void buttonMiddle_Click(object sender, EventArgs e) @@ -1793,10 +1811,10 @@ namespace DualScreenDemo VodScreenPictureBox.Image = originalImage; - int screenWidth = 1440; - int screenHeight = 900; - int pictureBoxWidth = 700; - int pictureBoxHeight = 140; + int screenWidth = 1920; + int screenHeight = 1080; + int pictureBoxWidth = 938; + int pictureBoxHeight = 209; int xPosition = (screenWidth - pictureBoxWidth) / 2; int yPosition = (screenHeight - pictureBoxHeight) / 2; diff --git a/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.WordCountSearch.cs b/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.WordCountSearch.cs index 7ef801b..8c7c3a2 100644 --- a/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.WordCountSearch.cs +++ b/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.WordCountSearch.cs @@ -464,7 +464,7 @@ namespace DualScreenDemo wordCountSearchSongButton.BackgroundImage = wordCountSearchSongNormalBackground; // 隱藏與 WordCount 歌手相關的所有按鈕 SetWordCountSongsAndButtonsVisibility(false); - // 錨點 歌曲查詢改版 + // 歌曲查詢改版 FindWordCountSongs(); } ///