diff --git a/PrimaryFormParts/PrimaryForm.cs b/PrimaryFormParts/PrimaryForm.cs index 43b7edd..2abecba 100644 --- a/PrimaryFormParts/PrimaryForm.cs +++ b/PrimaryFormParts/PrimaryForm.cs @@ -584,8 +584,9 @@ namespace DualScreenDemo InitializeButtonsForZhuYinSongs(); InitializeButtonsForEnglishSingers(); InitializeButtonsForEnglishSongs(); - InitializeButtonsForPictureBoxArtistSearch(); + //InitializeButtonsForPictureBoxArtistSearch(); InitializeButtonsForWordCountSongs(); + InitializeButtonsForWordCountSingers(); InitializeButtonsForPinYinSingers(); InitializeButtonsForPinYinSongs(); InitializeButtonsForSongIDSearch(); @@ -789,6 +790,14 @@ namespace DualScreenDemo Visible = false }; + pictureBoxWordCountSingers = new PictureBox + { + Name = "pictureBoxWordCountSingers", + BackColor = Color.Transparent, + SizeMode = PictureBoxSizeMode.StretchImage, + Visible = false + }; + pictureBoxPinYinSingers = new PictureBox { Name = "pictureBoxPinYinSingers", @@ -902,7 +911,7 @@ namespace DualScreenDemo this.Controls.Add(pictureBoxEnglishSingers); this.Controls.Add(pictureBoxEnglishSongs); this.Controls.Add(pictureBoxArtistSearch); - this.Controls.Add(pictureBoxWordCount); + this.Controls.Add(pictureBoxWordCountSingers); this.Controls.Add(pictureBoxPinYinSingers); this.Controls.Add(pictureBoxPinYinSongs); this.Controls.Add(pictureBoxHandWritingSingers); diff --git a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.BopomofoSearch.cs b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.BopomofoSearch.cs index 4af8bd6..3dc3efb 100644 --- a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.BopomofoSearch.cs +++ b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.BopomofoSearch.cs @@ -65,7 +65,7 @@ namespace DualScreenDemo SetPinYinSingersAndButtonsVisibility(false); // 隱藏拼音搜尋相關控件 SetHandWritingForSingersAndButtonsVisibility(false); // 隱藏手寫搜尋相關控件 SetZhuYinSingersAndButtonsVisibility(true); // 顯示注音搜尋相關控件 - SetPictureBoxArtistSearchAndButtonsVisibility(false); // 隱藏其他搜尋模式的圖片框 + //SetPictureBoxArtistSearchAndButtonsVisibility(false); // 隱藏其他搜尋模式的圖片框 // 顯示「注音歌手搜尋」的圖片框 pictureBoxZhuYinSingers.Visible = true; diff --git a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.EnglishSearch.cs b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.EnglishSearch.cs index 4d19ed5..518025a 100644 --- a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.EnglishSearch.cs +++ b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.EnglishSearch.cs @@ -46,7 +46,7 @@ namespace DualScreenDemo SetPinYinSingersAndButtonsVisibility(false); SetHandWritingForSingersAndButtonsVisibility(false); SetEnglishSingersAndButtonsVisibility(true); - SetPictureBoxArtistSearchAndButtonsVisibility(false); + //SetPictureBoxArtistSearchAndButtonsVisibility(false); pictureBoxEnglishSingers.Visible = true; } diff --git a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.HandwritingSearch.cs b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.HandwritingSearch.cs index c68470a..a051ce2 100644 --- a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.HandwritingSearch.cs +++ b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.HandwritingSearch.cs @@ -45,7 +45,7 @@ namespace DualScreenDemo SetZhuYinSingersAndButtonsVisibility(false); SetEnglishSingersAndButtonsVisibility(false); SetPinYinSingersAndButtonsVisibility(false); - SetPictureBoxArtistSearchAndButtonsVisibility(false); + //SetPictureBoxArtistSearchAndButtonsVisibility(false); SetHandWritingForSingersAndButtonsVisibility(true); this.ResumeLayout(); diff --git a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.PinyinSearch.cs b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.PinyinSearch.cs index b5ef4d6..54d8a50 100644 --- a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.PinyinSearch.cs +++ b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.PinyinSearch.cs @@ -41,7 +41,7 @@ namespace DualScreenDemo SetZhuYinSingersAndButtonsVisibility(false); SetEnglishSingersAndButtonsVisibility(false); SetPinYinSingersAndButtonsVisibility(true); - SetPictureBoxArtistSearchAndButtonsVisibility(false); + //SetPictureBoxArtistSearchAndButtonsVisibility(false); pictureBoxPinYinSingers.Visible = true; } diff --git a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.WordCountSearch.cs b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.WordCountSearch.cs index 520a8d2..c149cfb 100644 --- a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.WordCountSearch.cs +++ b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.WordCountSearch.cs @@ -1,180 +1,871 @@ using System; -using System.Drawing; using System.IO; +using System.Drawing; +using System.Drawing.Imaging; using System.Linq; using System.Windows.Forms; +using System.Collections.Generic; +using IniParser; +using IniParser.Model; +using System.Text; +/* + WordCountSongs -> WordCountSingers + + ZhuYin -> WordCount + phonetic -> numberWordCount + Phonetic -> NumberWordCount + inputBoxFontName -> inputBoxWordCountFontName + inputBoxFontSize -> inputBoxWordCountFontSize + inputBoxFontStyle -> inputBoxWordCountFontStyle + inputBoxForeColor -> inputBoxWordCountForeColor + + LoadConfigData -> LoadConfigDataforWordCountSongs + LoadButtonCoordinates -> LoadButtonCoordinatesForWordCountSongs + LoadButtonImages -> LoadButtonImagesForWordCountSongs + LoadSpecialButtonCoordinates -> LoadSpecialButtonCoordinatesForWordCountSongs + RemoveWhiteBorder -> RemoveWhiteBorderForWordCountSongs + CreateSpecialButton -> CreateSpecialButtonForWordCountSongs + LoadInputBoxConfig -> LoadInputBoxConfigForWordCountSongs +*/ + namespace DualScreenDemo { public partial class PrimaryForm { - private void InitializeButtonsForPictureBoxArtistSearch() + private PictureBox pictureBoxWordCountSingers; + + private Button[] numberWordCountButtonsForSingers; + private Button modifyButtonWordCountSingers; + private Button clearButtonWordCountSingers; + private Button closeButtonWordCountSingers; + + private string[] numberWordCountSymbols; + private (int X, int Y, int Width, int Height)[] numberWordCountButtonCoords; + private Dictionary numberWordCountButtonImages; + + private (int X, int Y, int Width, int Height) modifyButtonWordCountCoords; + private (int X, int Y, int Width, int Height) clearButtonWordCountCoords; + private (int X, int Y, int Width, int Height) closeButtonWordCountCoords; + + private RichTextBox inputBoxWordCountSingers; + + private (int X, int Y, int Width, int Height) inputBoxWordCountCoords; + private string inputBoxWordCountFontName; + private float inputBoxWordCountFontSize; + private FontStyle inputBoxWordCountFontStyle; + private Color inputBoxWordCountForeColor; + + /// + /// 點擊「注音歌手搜尋」按鈕時執行的事件處理函式。 + /// 此函式負責更新按鈕的背景圖片、載入對應的歌手圖片,並切換相關 UI 控件的可見性。 + /// + /// 觸發事件的物件(通常是按鈕本身)。 + /// 事件參數。 + private void WordCountSearchSingersButton_Click(object sender, EventArgs e) { + // 設定按鈕背景,將「注音搜尋」設為啟動狀態,其餘按鈕恢復為正常狀態 + zhuyinSearchButton.BackgroundImage = zhuyinSearchActiveBackground; + englishSearchButton.BackgroundImage = englishSearchNormalBackground; + pinyinSearchButton.BackgroundImage = pinyinSearchNormalBackground; + wordCountSearchButton.BackgroundImage = wordCountSearchNormalBackground; + handWritingSearchButton.BackgroundImage = handWritingSearchNormalBackground; + + // 載入設定檔,取得圖片路徑資訊 + var configData = LoadConfigDataforWordCountSingers(); - int[,] coords = new int[,] - { - {651, 292, 752, 400}, - {760, 292, 861, 400}, - {869, 292, 972, 399}, - {652, 401, 752, 502}, - {760, 401, 861, 504}, - {869, 398, 972, 502}, - {651, 502, 753, 607}, - {759, 504, 863, 607}, - {869, 503, 973, 608}, - {981, 501, 1083, 609} - }; + // 取得「注音歌手圖片」的完整路徑 + string imagePath = Path.Combine(Application.StartupPath, configData["ImagePaths"]["WordCountSingers"]); - int screenW = Screen.PrimaryScreen.Bounds.Width; - int screenH = Screen.PrimaryScreen.Bounds.Height; + // 在 PictureBox 中顯示對應的「注音歌手」圖片 + ShowImageOnPictureBoxWordCountSingers(Path.Combine(Application.StartupPath, imagePath)); + // 設定不同搜尋模式的 UI 控件可見性 + SetEnglishSingersAndButtonsVisibility(false); // 隱藏英文字母搜尋相關控件 + SetPinYinSingersAndButtonsVisibility(false); // 隱藏拼音搜尋相關控件 + SetHandWritingForSingersAndButtonsVisibility(false); // 隱藏手寫搜尋相關控件 + + //SetPictureBoxArtistSearchAndButtonsVisibility(false); // 隱藏其他搜尋模式的圖片框 + SetWordCountSingersAndButtonsVisibility(true); // 顯示字數搜尋相關控件 + // 顯示「注音歌手搜尋」的圖片框 + pictureBoxWordCountSingers.Visible = true; + } + + + /// + /// 從 config.ini 設定檔中載入注音符號(NumberWordCount Symbols)。 + /// 讀取 ini 檔的 [NumberWordCountSymbols] 區塊,並將「Symbols」欄位的值解析為陣列。 + /// + private void LoadNumberWordCountSymbolsFromConfig() + { + // 建立 INI 檔案解析器 + var parser = new FileIniDataParser(); - float widthRatio = screenW / (float)1440; - float heightRatio = screenH / (float)900; + // 設定檔路徑 + string iniFilePath = "config.ini"; - numberButtonsArtistSearch = new Button[10]; + IniData data; - for (int i = 0; i < numberButtonsArtistSearch.Length; i++) + // 以 UTF-8 編碼開啟並讀取 INI 檔案 + using (var reader = new StreamReader(iniFilePath, Encoding.UTF8)) { - numberButtonsArtistSearch[i] = new Button(); - - - ConfigureButton( - numberButtonsArtistSearch[i], - coords[i, 0], - coords[i, 1], - coords[i, 2] - coords[i, 0], - coords[i, 3] - coords[i, 1], - - resizedNormalStateImageFor6_1, - resizedMouseOverImageFor6_1, - resizedMouseDownImageFor6_1, - null - ); - - int newXForArtistSearch = (int)(((numberButtonsArtistSearch[i].Location.X / widthRatio) + offsetXArtistSearch) * widthRatio); - int newYForArtistSearch = (int)(((numberButtonsArtistSearch[i].Location.Y / heightRatio) + offsetXArtistSearch) * heightRatio); - numberButtonsArtistSearch[i].Location = new Point(newXForArtistSearch, newYForArtistSearch); - - - numberButtonsArtistSearch[i].Name = "NumberButtonArtistSearch" + i; - - numberButtonsArtistSearch[i].Tag = (i + 1).ToString(); - if (i == 9) - { - numberButtonsArtistSearch[i].Name = "NumberButtonArtistSearch0"; - numberButtonsArtistSearch[i].Tag = "0"; - } - - - numberButtonsArtistSearch[i].Click += ArtistButton_Click; - - - this.Controls.Add(numberButtonsArtistSearch[i]); + // 解析 INI 檔內容 + data = parser.ReadData(reader); } - - modifyButtonArtistSearch = new Button { - Name = "ModifyButtonArtistSearch", - Tag = "Modify", - Visible = false - }; - - ConfigureButton(modifyButtonArtistSearch, 978, 292, 1081 - 978, 397 - 292, resizedNormalStateImageFor6_1, resizedMouseOverImageFor6_1, resizedMouseDownImageFor6_1, ModifyButtonArtist_Click); - int newX = (int)(((modifyButtonArtistSearch.Location.X / widthRatio) + offsetXArtistSearch) * widthRatio); - int newY = (int)(((modifyButtonArtistSearch.Location.Y / widthRatio) + offsetYArtistSearch) * heightRatio); - modifyButtonArtistSearch.Location = new Point(newX, newY); - this.Controls.Add(modifyButtonArtistSearch); - - - closeButtonArtistSearch = new Button { - Name = "CloseButtonArtistSearch", - Tag = "Close", - Visible = false - }; - - ConfigureButton(closeButtonArtistSearch, 982, 147, 1082 - 982, 250 - 147, resizedNormalStateImageFor6_1, resizedMouseOverImageFor6_1, resizedMouseDownImageFor6_1, CloseButtonArtistSearch_Click); - newX = (int)(((closeButtonArtistSearch.Location.X / widthRatio) + offsetXArtistSearch) * widthRatio); - newY = (int)(((closeButtonArtistSearch.Location.Y / widthRatio) + offsetYArtistSearch) * heightRatio); - closeButtonArtistSearch.Location = new Point(newX, newY); - this.Controls.Add(closeButtonArtistSearch); + // 取得 [NumberWordCountSymbols] 區塊中的 "Symbols" 欄位內容 + string symbols = data["NumberWordCountSymbols"]["Symbols"]; - inputBoxArtistSearch = new RichTextBox(); - inputBoxArtistSearch.Name = "inputBoxArtistSearch"; - ResizeAndPositionControl(inputBoxArtistSearch, 645 + offsetXArtistSearch, 197 + offsetXArtistSearch, 986 - 645, 281 - 197); - inputBoxArtistSearch.ForeColor = Color.Black; - inputBoxArtistSearch.Font = new Font("細明體", (float)26 / 900 * Screen.PrimaryScreen.Bounds.Height, FontStyle.Regular); - - inputBoxArtistSearch.TextChanged += (sender, e) => - { - string searchText = inputBoxArtistSearch.Text; - int targetLength = 0; - - - if (int.TryParse(searchText, out targetLength)) - { - - var searchResults = allArtists.Where(artist => artist.Name.Replace(" ", "").Length == targetLength).ToList(); - - currentPage = 0; - currentArtistList = searchResults; - totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage); - - multiPagePanel.currentPageIndex = 0; - multiPagePanel.LoadSingers(currentArtistList); - } - else - { - - currentArtistList.Clear(); - } - }; - - this.Controls.Add(inputBoxArtistSearch); + // 將符號字串以逗號分隔,轉換為字串陣列 + numberWordCountSymbols = symbols.Split(','); } - private void ArtistButton_Click(object sender, EventArgs e) + /// + /// 從設定檔 (config.ini) 載入 INI 設定數據。 + /// + /// 回傳解析後的 INI 設定數據 (IniData)。 + private IniData LoadConfigDataforWordCountSingers() { + var parser = new FileIniDataParser(); + string iniFilePath = "config.ini"; + + // 使用 UTF-8 讀取 INI 檔案並解析內容 + using (var reader = new StreamReader(iniFilePath, Encoding.UTF8)) + { + return parser.ReadData(reader); + } + } + + /// + /// 從 INI 設定數據中讀取注音符號 (NumberWordCount Symbols)。 + /// + /// 已解析的 INI 設定數據。 + /// 回傳包含注音符號的字串陣列。 + private string[] LoadNumberWordCountSymbols(IniData data) + { + // 從 INI 檔案的 [NumberWordCountSymbols] 區塊取得 Symbols 欄位值 + string symbols = data["NumberWordCountSymbols"]["Symbols"]; + // 以逗號分隔字串並轉換為字串陣列 + return symbols.Split(','); + } + + + /// + /// 從 INI 設定數據中載入按鈕座標資料。 + /// + /// 已解析的 INI 設定數據。 + /// 設定檔中按鈕座標所屬的區塊名稱。 + /// 按鈕數量。 + /// 回傳包含按鈕座標的陣列,每個元素是由 (X, Y, Width, Height) 組成的元組。 + private (int X, int Y, int Width, int Height)[] LoadButtonCoordinatesForWordCountSingers(IniData data, string section, int buttonCount) + { + var buttonList = new List<(int X, int Y, int Width, int Height)>(); + + // 迴圈讀取每個按鈕的座標設定 + for (int i = 1; i <= buttonCount; i++) + { + // 取得按鈕座標的字串 (格式: X,Y,Width,Height) + var coordString = data[section][$"button{i}"]; + var coords = coordString.Split(','); + + // 將座標資料轉換為 (X, Y, Width, Height) 元組並加入清單 + buttonList.Add(( + int.Parse(coords[0]), // X 座標 + int.Parse(coords[1]), // Y 座標 + int.Parse(coords[2]), // 寬度 + int.Parse(coords[3]) // 高度 + )); + } + + // 回傳所有按鈕座標的陣列 + return buttonList.ToArray(); + } + + /// + /// 從 INI 設定數據中載入按鈕圖片檔案路徑資料 (包含正常、點擊、滑鼠移過圖片)。 + /// + /// 已解析的 INI 設定數據。 + /// 設定檔中按鈕圖片設定所屬的區塊名稱。 + /// 按鈕數量。 + /// 回傳一個字典,鍵是按鈕名稱,值是包含正常、點擊和滑鼠移過狀態的元組。 + private Dictionary LoadButtonImagesForWordCountSingers(IniData data, string section, int buttonCount) + { + var buttonImages = new Dictionary(); + + // 迴圈讀取每個按鈕的圖片設定 + for (int i = 0; i < 10; i++) + { + // 讀取按鈕的三種圖片狀態:正常、點擊、滑鼠移過 + buttonImages[$"button{i}"] = ( + data[section][$"button{i}_normal"], // 正常狀態圖片路徑 + data[section][$"button{i}_mouseDown"], // 點擊狀態圖片路徑 + data[section][$"button{i}_mouseOver"] // 滑鼠移過狀態圖片路徑 + ); + } + + // 回傳包含所有按鈕圖片路徑資料的字典 + return buttonImages; + } + + + /// + /// 從 INI 設定數據中載入特定按鈕的座標資料。 + /// + /// 已解析的 INI 設定數據。 + /// 設定檔中按鈕座標所屬的區塊名稱。 + /// 指定按鈕的鍵名 (如 "button1")。 + /// 回傳包含按鈕座標的元組 (X, Y, Width, Height)。 + private (int X, int Y, int Width, int Height) LoadSpecialButtonCoordinatesForWordCountSingers(IniData data, string section, string buttonKey) + { + // 取得按鈕座標的字串 (格式: X,Y,Width,Height) + var coords = data[section][buttonKey].Split(','); + + // 解析座標字串並回傳 (X, Y, Width, Height) 元組 + return (int.Parse(coords[0]), int.Parse(coords[1]), int.Parse(coords[2]), int.Parse(coords[3])); + } + + /// + /// 從 INI 設定數據中載入按鈕的圖片資料 (包含正常、點擊、滑鼠移過圖片)。 + /// + /// 已解析的 INI 設定數據。 + /// 設定檔中按鈕圖片設定所屬的區塊名稱。 + /// 回傳包含按鈕三種狀態圖片路徑的元組 (normal, mouseDown, mouseOver)。 + private (string normal, string mouseDown, string mouseOver) LoadButtonImagesForWordCountSingers(IniData data, string section) + { + // 讀取按鈕三種狀態的圖片路徑 + return ( + data[section]["normal"], // 正常狀態圖片路徑 + data[section]["mouseDown"], // 點擊狀態圖片路徑 + data[section]["mouseOver"] // 滑鼠移過狀態圖片路徑 + ); + } + + + /// + /// 初始化並設置語音按鈕的相關資料,包括符號、座標與圖片等。 + /// + private void InitializeNumberWordCountButtons() + { + // 載入配置資料 + var data = LoadConfigDataforWordCountSingers(); + + // 載入語音符號(如拼音、注音符號等) + numberWordCountSymbols = LoadNumberWordCountSymbols(data); + + // 載入按鈕座標資料 + numberWordCountButtonCoords = LoadButtonCoordinatesForWordCountSingers(data, "NumberWordCountButtonCoordinates", 10); + + // 載入按鈕圖片資料 + numberWordCountButtonImages = LoadButtonImagesForWordCountSingers(data, "NumberWordCountButtonImages", 10); + + // 初始化語音按鈕陣列,總共有 10 個按鈕 + numberWordCountButtonsForSingers = new Button[10]; + + // 設置每個語音按鈕 + for (int i = 0; i < 10; i++) + { + // 根據按鈕索引讀取其圖片資料 + var buttonImages = numberWordCountButtonImages[$"button{i}"]; + + // 創建並初始化語音按鈕,設定其背景圖片 + CreateNumberWordCountButton(i, buttonImages.normal, buttonImages.mouseDown, buttonImages.mouseOver); + } + } + + + /// + /// 創建一個語音按鈕,並為其設置圖片、座標、事件等屬性。 + /// + /// 按鈕的索引,用來獲取對應的語音符號、座標和圖片資料。 + /// 正常狀態下的圖片路徑。 + /// 點擊狀態下的圖片路徑。 + /// 滑鼠移過狀態下的圖片路徑。 + private void CreateNumberWordCountButton(int index, string normalImagePath, string mouseDownImagePath, string mouseOverImagePath) + { + try + { + // 創建語音按鈕並設置其屬性 + numberWordCountButtonsForSingers[index] = new Button + { + Name = $"numberWordCountButton_{numberWordCountSymbols[index]}", // 按鈕名稱設為語音符號名稱 + BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, normalImagePath)), // 設定背景圖片 + BackgroundImageLayout = ImageLayout.Stretch, // 設定圖片拉伸樣式 + FlatStyle = FlatStyle.Flat, // 設定為平面風格 + FlatAppearance = { BorderSize = 0 } // 設定無邊框 + }; + + // 調整按鈕大小並設置位置 + ResizeAndPositionButton(numberWordCountButtonsForSingers[index], numberWordCountButtonCoords[index].X, numberWordCountButtonCoords[index].Y, + numberWordCountButtonCoords[index].Width, numberWordCountButtonCoords[index].Height); + + // 從檔案中讀取正常、點擊和滑鼠懸停狀態的圖片 + Image normalImage = Image.FromFile(Path.Combine(Application.StartupPath, normalImagePath)); + Image mouseDownImage = Image.FromFile(Path.Combine(Application.StartupPath, mouseDownImagePath)); + Image mouseOverImage = Image.FromFile(Path.Combine(Application.StartupPath, mouseOverImagePath)); + + // 設置滑鼠事件:點擊、進入、離開等,改變按鈕的背景圖片 + numberWordCountButtonsForSingers[index].MouseDown += (s, e) => numberWordCountButtonsForSingers[index].BackgroundImage = mouseDownImage; + numberWordCountButtonsForSingers[index].MouseUp += (s, e) => numberWordCountButtonsForSingers[index].BackgroundImage = normalImage; + numberWordCountButtonsForSingers[index].MouseEnter += (s, e) => numberWordCountButtonsForSingers[index].BackgroundImage = mouseOverImage; + numberWordCountButtonsForSingers[index].MouseLeave += (s, e) => numberWordCountButtonsForSingers[index].BackgroundImage = normalImage; + + // 設置點擊事件處理方法 + numberWordCountButtonsForSingers[index].Click += NumberWordCountButton_Click; + + // 設置按鈕的 Tag 屬性為對應的語音符號 + numberWordCountButtonsForSingers[index].Tag = numberWordCountSymbols[index]; + + // 將按鈕添加到表單的控制項集合中 + this.Controls.Add(numberWordCountButtonsForSingers[index]); + } + catch (Exception ex) + { + // 捕捉錯誤並輸出錯誤訊息 + Console.WriteLine($"Error creating button at index {index}: {ex.Message}"); + } + } + + + /// + /// 初始化所有與注音歌手相關的按鈕,包括語音符號按鈕、特殊按鈕及輸入框。 + /// + private void InitializeButtonsForWordCountSingers() + { + // 從配置檔案加載注音符號並初始化按鈕 + LoadNumberWordCountSymbolsFromConfig(); + // 初始化所有語音按鈕 + InitializeNumberWordCountButtons(); + + // 初始化注音歌手的特殊按鈕(例如音量、搜尋等) + InitializeSpecialButtonsForWordCountSingers(); + + // 初始化注音歌手的輸入框 + InitializeInputBoxWordCountSingers(); + } + + + /// + /// 移除圖像周圍的白色邊框,將邊框的像素透明化。 + /// + /// 待處理的圖像文件路徑。 + /// 處理後的圖像,其中白色邊框已被去除並替換為透明。 + private Image RemoveWhiteBorderForWordCountSingers(string imagePath) + { + // 創建一個 Bitmap 物件來加載圖像 + Bitmap bmp = new Bitmap(imagePath); + + // 定義圖像的矩形區域,這是我們將要操作的區域 + Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); + + // 鎖定圖像的位圖數據,以便進行直接修改 + BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat); + + IntPtr ptr = bmpData.Scan0; // 獲取位圖數據的起始位置 + int bytes = Math.Abs(bmpData.Stride) * bmp.Height; // 計算圖像的總字節數 + byte[] rgbValues = new byte[bytes]; // 用來存儲圖像的像素數據 + System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes); // 從圖像數據中複製像素數據到 rgbValues 陣列 + + // 遍歷每個像素點,檢查是否為白色邊框 + for (int y = 0; y < bmp.Height; y++) + { + for (int x = 0; x < bmp.Width; x++) + { + int position = (y * bmpData.Stride) + (x * 4); // 計算當前像素的位址 + byte b = rgbValues[position]; // 藍色分量 + byte g = rgbValues[position + 1]; // 綠色分量 + byte r = rgbValues[position + 2]; // 紅色分量 + byte a = rgbValues[position + 3]; // alpha 分量(透明度) + + // 如果當前像素在圖像邊緣且為白色 (255, 255, 255),則將其設為透明 + if ((x < 5 || x > bmp.Width - 5 || y < 5 || y > bmp.Height - 5) && r == 255 && g == 255 && b == 255) + { + // 將白色像素的 RGB 設置為 255, 255, 255 且 alpha 設為 0 (透明) + rgbValues[position] = 255; + rgbValues[position + 1] = 255; + rgbValues[position + 2] = 255; + rgbValues[position + 3] = 0; // 透明 + } + } + } + + // 將修改後的像素數據重新複製回位圖數據 + System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes); + + // 解鎖圖像數據 + bmp.UnlockBits(bmpData); + + // 返回處理後的圖像 + return bmp; + } + + + /// + /// 初始化與注音歌手相關的特殊按鈕,包括修改、清除和關閉按鈕。 + /// + private void InitializeSpecialButtonsForWordCountSingers() + { + // 初始化修改按鈕 + InitializeModifyButtonWordCountSingers(); + + // 初始化清除按鈕 + InitializeClearButtonWordCountSingers(); + + // 初始化關閉按鈕 + InitializeCloseButtonWordCountSingers(); + } + + + /// + /// 初始化「修改」按鈕,設定按鈕的坐標、圖片和點擊事件。 + /// + private void InitializeModifyButtonWordCountSingers() + { + // 加載配置數據 + var data = LoadConfigDataforWordCountSingers(); + + // 讀取按鈕坐標 + modifyButtonWordCountCoords = LoadSpecialButtonCoordinatesForWordCountSingers(data, "SpecialButtonCoordinates", "modifyButtonWordCountSingers"); + + // 加載按鈕圖片(正常、鼠標懸停、鼠標按下) + var buttonImages = LoadButtonImagesForWordCountSingers(data, "ModifyButtonImagesWordCount"); + + // 創建「修改」按鈕,並設置坐標、圖片及點擊事件 + modifyButtonWordCountSingers = CreateSpecialButtonForWordCountSingers( + "btnModifyWordCountSingers", // 按鈕名稱 + modifyButtonWordCountCoords, // 按鈕坐標 + buttonImages.normal, // 正常狀態圖片 + buttonImages.mouseOver, // 鼠標懸停圖片 + buttonImages.mouseDown, // 鼠標按下圖片 + ModifyButtonWordCountSingers_Click // 按鈕點擊事件 + ); + } + + /// + /// 處理「修改」按鈕的點擊事件,該事件會刪除輸入框中的最後一個字符。 + /// + /// 觸發事件的對象 + /// 事件參數 + private void ModifyButtonWordCountSingers_Click(object sender, EventArgs e) + { + // 如果輸入框不為空,且包含輸入內容,則刪除最後一個字符 + if (this.Controls.Contains(inputBoxWordCountSingers) && inputBoxWordCountSingers.Text.Length > 0) + { + inputBoxWordCountSingers.Text = inputBoxWordCountSingers.Text.Substring(0, inputBoxWordCountSingers.Text.Length - 1); + } + } + + + /// + /// 初始化「清除」按鈕,設定按鈕的坐標、圖片和點擊事件。 + /// + private void InitializeClearButtonWordCountSingers() + { + // 加載配置數據 + var data = LoadConfigDataforWordCountSingers(); + + // 讀取按鈕坐標 + clearButtonWordCountCoords = LoadSpecialButtonCoordinatesForWordCountSingers(data, "SpecialButtonCoordinates", "clearButtonWordCountSingers"); + + // 加載按鈕圖片(正常、鼠標懸停、鼠標按下) + var buttonImages = LoadButtonImagesForWordCountSingers(data, "ClearButtonImagesWordCount"); + + // 創建「清除」按鈕,並設置坐標、圖片及點擊事件 + clearButtonWordCountSingers = CreateSpecialButtonForWordCountSingers( + "btnClearWordCountSingers", // 按鈕名稱 + clearButtonWordCountCoords, // 按鈕坐標 + buttonImages.normal, // 正常狀態圖片 + buttonImages.mouseOver, // 鼠標懸停圖片 + buttonImages.mouseDown, // 鼠標按下圖片 + ClearButtonWordCountSingers_Click // 按鈕點擊事件 + ); + } + + /// + /// 處理「清除」按鈕的點擊事件,該事件會清空輸入框中的所有文本。 + /// + /// 觸發事件的對象 + /// 事件參數 + private void ClearButtonWordCountSingers_Click(object sender, EventArgs e) + { + // 如果輸入框不為空,則清空該框的文本內容 + if (this.Controls.Contains(inputBoxWordCountSingers) && inputBoxWordCountSingers.Text.Length > 0) + { + inputBoxWordCountSingers.Text = ""; + } + } + + + /// + /// 初始化「關閉」按鈕,設定按鈕的坐標、圖片和點擊事件。 + /// + private void InitializeCloseButtonWordCountSingers() + { + // 加載配置數據 + var data = LoadConfigDataforWordCountSingers(); + + // 讀取按鈕坐標 + closeButtonWordCountCoords = LoadSpecialButtonCoordinatesForWordCountSingers(data, "SpecialButtonCoordinates", "closeButtonWordCountSingers"); + + // 加載按鈕圖片(正常、鼠標懸停、鼠標按下) + var buttonImages = LoadButtonImagesForWordCountSingers(data, "CloseButtonImagesWordCount"); + + // 創建「關閉」按鈕,並設置坐標、圖片及點擊事件 + closeButtonWordCountSingers = CreateSpecialButtonForWordCountSingers( + "btnCloseWordCountSingers", // 按鈕名稱 + closeButtonWordCountCoords, // 按鈕坐標 + buttonImages.normal, // 正常狀態圖片 + buttonImages.mouseOver, // 鼠標懸停圖片 + buttonImages.mouseDown, // 鼠標按下圖片 + CloseButtonWordCountSingers_Click // 按鈕點擊事件 + ); + } + + + /// + /// 「關閉」按鈕的點擊事件處理方法。 + /// 隱藏 WordCount 歌手圖片框以及與其相關的按鈕。 + /// + /// 觸發事件的對象,這裡是關閉按鈕。 + /// 事件參數。 + private void CloseButtonWordCountSingers_Click(object sender, EventArgs e) + { + // 隱藏 WordCount 歌手圖片框 + pictureBoxWordCountSingers.Visible = false; + + // 隱藏與 WordCount 歌手相關的所有按鈕 + SetWordCountSingersAndButtonsVisibility(false); + } + + + /// + /// 創建一個特殊的按鈕,並設定其顯示屬性、事件處理和位置。 + /// + /// 按鈕的名稱。 + /// 按鈕的坐標和大小,包含 X, Y, 寬度和高度。 + /// 按鈕正常狀態下的背景圖片路徑。 + /// 鼠標懸停時按鈕的背景圖片路徑。 + /// 鼠標點擊時按鈕的背景圖片路徑。 + /// 按鈕的點擊事件處理程序。 + /// 創建並返回的按鈕對象。 + private Button CreateSpecialButtonForWordCountSingers(string name, (int X, int Y, int Width, int Height) coords, string normalImagePath, string mouseOverImagePath, string mouseDownImagePath, EventHandler clickEventHandler) + { + // 創建按鈕並設定基本屬性 + var button = new Button + { + Name = name, + FlatStyle = FlatStyle.Flat, + FlatAppearance = { BorderSize = 0, MouseDownBackColor = Color.Transparent, MouseOverBackColor = Color.Transparent }, + BackgroundImageLayout = ImageLayout.Stretch, + BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, normalImagePath)) + }; + + // 設定按鈕的大小和位置 + ResizeAndPositionButton(button, coords.X, coords.Y, coords.Width, coords.Height); + + // 設定鼠標事件:進入、離開、按下、放開 + button.MouseEnter += (sender, e) => button.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, mouseOverImagePath)); + button.MouseLeave += (sender, e) => button.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, normalImagePath)); + button.MouseDown += (sender, e) => button.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, mouseDownImagePath)); + button.MouseUp += (sender, e) => button.BackgroundImage = Image.FromFile(Path.Combine(Application.StartupPath, normalImagePath)); + + // 註冊點擊事件處理 + button.Click += clickEventHandler; + + // 將按鈕添加到控件集合中 + this.Controls.Add(button); + + return button; + } + + + /// + /// 初始化 WordCount 歌手的輸入框,並設定其屬性與事件處理程序。 + /// + private void InitializeInputBoxWordCountSingers() + { + try + { + // 加載輸入框配置 + LoadInputBoxConfigForWordCountSingers(); + + // 創建一個 RichTextBox 控件來作為輸入框 + inputBoxWordCountSingers = new RichTextBox + { + Name = "inputBoxWordCountSingers", + ForeColor = inputBoxWordCountForeColor, // 設定文字顏色 + Font = new Font(inputBoxWordCountFontName, inputBoxWordCountFontSize, inputBoxWordCountFontStyle), // 設定字體樣式 + ScrollBars = RichTextBoxScrollBars.None // 不顯示滾動條 + }; + + // 調整和定位輸入框的位置及大小 + ResizeAndPositionControl(inputBoxWordCountSingers, inputBoxWordCountCoords.X, inputBoxWordCountCoords.Y, inputBoxWordCountCoords.Width, inputBoxWordCountCoords.Height); + + // 設定文本變更事件,當輸入框內容改變時觸發 + inputBoxWordCountSingers.TextChanged += (sender, e) => + { + string searchText = inputBoxWordCountSingers.Text; // 取得輸入內容 + if (int.TryParse(searchText, out int length)) + { + // 顯示搜尋結果 + var searchResults = allSongs + .Where(song => song.ArtistA.Length == length || song.ArtistB.Length == length) + .ToList(); + + // 重置分頁 + currentPage = 0; + currentSongList = searchResults; + totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage); + + // 更新多頁面面板的內容 + multiPagePanel.currentPageIndex = 0; + multiPagePanel.LoadSongs(currentSongList); + } + + + }; + // 將輸入框加入到窗體的控件集合中 + this.Controls.Add(inputBoxWordCountSingers); + } + catch (Exception ex) + { + // 如果初始化過程中出現錯誤,則在控制台輸出錯誤信息 + Console.WriteLine("Error initializing inputBoxWordCountSingers: " + ex.Message); + } + } + + + /// + /// 從配置文件 `config.ini` 中加載輸入框的設置,包括位置、大小、字體等屬性。 + /// + private void LoadInputBoxConfigForWordCountSingers() + { + try + { + // 創建 INI 解析器 + var parser = new FileIniDataParser(); + string iniFilePath = "config.ini"; // 配置文件的路徑 + + IniData data; + // 打開並讀取配置文件 + using (var reader = new StreamReader(iniFilePath, Encoding.UTF8)) + { + data = parser.ReadData(reader); + } + + // 從配置中加載輸入框的坐標和大小 + inputBoxWordCountCoords = ( + int.Parse(data["InputBoxWordCountSingers"]["X"]), // 輸入框的 X 坐標 + int.Parse(data["InputBoxWordCountSingers"]["Y"]), // 輸入框的 Y 坐標 + int.Parse(data["InputBoxWordCountSingers"]["Width"]), // 輸入框的寬度 + int.Parse(data["InputBoxWordCountSingers"]["Height"]) // 輸入框的高度 + ); + + // 從配置中加載字體屬性 + inputBoxWordCountFontName = data["InputBoxWordCountSingers"]["FontName"]; // 字體名稱 + inputBoxWordCountFontSize = float.Parse(data["InputBoxWordCountSingers"]["FontSize"]); // 字體大小 + inputBoxWordCountFontStyle = (FontStyle)Enum.Parse(typeof(FontStyle), data["InputBoxWordCountSingers"]["FontStyle"]); // 字體樣式 + inputBoxWordCountForeColor = Color.FromName(data["InputBoxWordCountSingers"]["ForeColor"]); // 字體顏色 + + } + catch (Exception ex) + { + // 若發生錯誤,顯示錯誤信息 + Console.WriteLine("Error loading inputBox configuration: " + ex.Message); + } + } + + + /// + /// 存儲 `pictureBoxWordCountSingers` 控制項的坐標和大小設置。 + /// + /// + /// 這個元組包含了 `X`、`Y` 坐標以及 `Width`、`Height` 大小,用於配置 `pictureBoxWordCountSingers` 的位置和大小。 + /// + private (int X, int Y, int Width, int Height) pictureBoxWordCountSingerCoords; + + /// + /// 從配置檔案中讀取 `PictureBoxWordCountSingers` 控制項的坐標和大小設置。 + /// + private void LoadPictureBoxWordCountSingerCoordsFromConfig() + { + var parser = new FileIniDataParser(); + IniData data = parser.ReadFile("config.ini"); + + var coords = data["PictureBoxWordCountSingers"]; + pictureBoxWordCountSingerCoords = ( + int.Parse(coords["X"]), + int.Parse(coords["Y"]), + int.Parse(coords["Width"]), + int.Parse(coords["Height"]) + ); + } + + + /// + /// 顯示圖片並根據配置文件設置顯示區域的大小和位置。 + /// + /// 圖片的路徑。 + private void ShowImageOnPictureBoxWordCountSingers(string imagePath) + { + // 讀取配置文件中的顯示區域設置 + LoadPictureBoxWordCountSingerCoordsFromConfig(); + + // 加載原始圖片 + Bitmap originalImage = new Bitmap(imagePath); + + // 創建顯示區域,根據配置文件中的坐標和大小設置 + Rectangle displayArea = new Rectangle(pictureBoxWordCountSingerCoords.X, pictureBoxWordCountSingerCoords.Y, pictureBoxWordCountSingerCoords.Width, pictureBoxWordCountSingerCoords.Height); + + // 設置圖片到 PictureBox + pictureBoxWordCountSingers.Image = originalImage; + + // 調整 PictureBox 大小和位置 + ResizeAndPositionPictureBox(pictureBoxWordCountSingers, displayArea.X, displayArea.Y, displayArea.Width, displayArea.Height); + + // 顯示圖片 + pictureBoxWordCountSingers.Visible = true; + } + + + /// + /// 設置注音歌手相關控制項(包括圖片框、按鈕和輸入框)的顯示或隱藏狀態。 + /// + /// 指定控件是否可見。True 為顯示,False 為隱藏。 + private void SetWordCountSingersAndButtonsVisibility(bool isVisible) + { + // 定義一個動作來處理控制項的顯示或隱藏 + System.Action action = () => + { + try + { + // 暫停控制項佈局的重新排版,提高效率 + SuspendLayout(); + + // 檢查並設置圖片框的可見性 + if (pictureBoxWordCountSingers == null) + { + Console.WriteLine("pictureBoxWordCountSingers is null"); + } + else + { + pictureBoxWordCountSingers.Visible = isVisible; + if (isVisible) pictureBoxWordCountSingers.BringToFront(); // 如果顯示,將其置於最前 + } + + // 檢查並設置拼音按鈕的可見性 + if (numberWordCountButtonsForSingers == null) + { + Console.WriteLine("numberWordCountButtonsForSingers is null"); + } + else + { + foreach (var button in numberWordCountButtonsForSingers) + { + if (button == null) + { + Console.WriteLine("One of the numberWordCountButtonsForSingers is null"); + } + else + { + button.Visible = isVisible; + if (isVisible) button.BringToFront(); // 如果顯示,將其置於最前 + } + } + } + + // 檢查並設置修改按鈕的可見性 + if (modifyButtonWordCountSingers == null) + { + Console.WriteLine("modifyButtonWordCountSingers is null"); + } + else + { + modifyButtonWordCountSingers.Visible = isVisible; + if (isVisible) modifyButtonWordCountSingers.BringToFront(); // 如果顯示,將其置於最前 + } + + // 檢查並設置清除按鈕的可見性 + if (clearButtonWordCountSingers == null) + { + Console.WriteLine("clearButtonWordCountSingers is null"); + } + else + { + clearButtonWordCountSingers.Visible = isVisible; + if (isVisible) clearButtonWordCountSingers.BringToFront(); // 如果顯示,將其置於最前 + } + + // 檢查並設置關閉按鈕的可見性 + if (closeButtonWordCountSingers == null) + { + Console.WriteLine("closeButtonWordCountSingers is null"); + } + else + { + closeButtonWordCountSingers.Visible = isVisible; + if (isVisible) closeButtonWordCountSingers.BringToFront(); // 如果顯示,將其置於最前 + } + + // 檢查並設置輸入框的可見性 + if (inputBoxWordCountSingers == null) + { + Console.WriteLine("inputBoxWordCountSingers is null"); + } + else + { + inputBoxWordCountSingers.Visible = isVisible; + if (isVisible) inputBoxWordCountSingers.BringToFront(); // 如果顯示,將其置於最前 + } + + // 恢復控制項的佈局重新排版 + ResumeLayout(); + PerformLayout(); + + // 刷新所有控制項的顯示 + pictureBoxWordCountSingers?.Refresh(); + if (numberWordCountButtonsForSingers != null) + { + foreach (var button in numberWordCountButtonsForSingers) + { + button?.Refresh(); // 刷新每個按鈕 + } + } + modifyButtonWordCountSingers?.Refresh(); + clearButtonWordCountSingers?.Refresh(); + closeButtonWordCountSingers?.Refresh(); + inputBoxWordCountSingers?.Refresh(); + } + catch (Exception ex) + { + Console.WriteLine("Error in SetWordCountSingersAndButtonsVisibility: " + ex.Message); + } + }; + + // 檢查是否需要在主執行緒外執行 + if (this.InvokeRequired) + { + this.Invoke(action); // 如果需要,透過主執行緒執行 + } + else + { + action(); // 否則直接執行 + } + } + private void NumberWordCountButton_Click(object sender, EventArgs e) + { var button = sender as Button; if (button != null && button.Tag != null) { - inputBoxArtistSearch.Text += button.Tag.ToString(); - } - } - - private void WordCountSearchButton_Click(object sender, EventArgs e) - {/* - zhuyinSearchButton.BackgroundImage = zhuyinSearchNormalBackground; - englishSearchButton.BackgroundImage = englishSearchNormalBackground; - pinyinSearchButton.BackgroundImage = pinyinSearchNormalBackground; - wordCountSearchButton.BackgroundImage = wordCountSearchActiveBackground; - handWritingSearchButton.BackgroundImage = handWritingSearchNormalBackground; - - - bool shouldBeVisible = !pictureBoxArtistSearch.Visible; - - - if (shouldBeVisible) - { - ShowImageOnPictureBoxArtistSearch(Path.Combine(Application.StartupPath, @"themes\superstar\6-1.png")); - } - - SetEnglishSingersAndButtonsVisibility(false); - SetPinYinSingersAndButtonsVisibility(false); - SetHandWritingForSingersAndButtonsVisibility(false); - SetZhuYinSingersAndButtonsVisibility(false); - SetPictureBoxArtistSearchAndButtonsVisibility(shouldBeVisible); - pictureBoxArtistSearch.Visible = shouldBeVisible; - */ + + if (inputBoxWordCountSingers.Visible) + { + inputBoxWordCountSingers.Text += button.Tag.ToString(); + } + } } - private void CloseButtonArtistSearch_Click(object sender, EventArgs e) - { - - SetPictureBoxArtistSearchAndButtonsVisibility(false); - } } -} +} \ No newline at end of file diff --git a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.cs b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.cs index bad8c2f..5ccf434 100644 --- a/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.cs +++ b/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.cs @@ -90,7 +90,7 @@ namespace DualScreenDemo InitializeSearchButton(ref pinyinSearchButton, "pinyinSearchButton", 1214, 356, 209, 58, ref pinyinSearchNormalBackground, ref pinyinSearchActiveBackground, normalStateImageArtistQuery, mouseDownImageArtistQuery, PinyinSingerSearchButton_Click); - InitializeSearchButton(ref wordCountSearchButton, "strokeCountSearchButton", 1214, 418, 209, 59, ref wordCountSearchNormalBackground, ref wordCountSearchActiveBackground, normalStateImageArtistQuery, mouseDownImageArtistQuery, WordCountSearchButton_Click); + InitializeSearchButton(ref wordCountSearchButton, "workCountSearchButton", 1214, 418, 209, 59, ref wordCountSearchNormalBackground, ref wordCountSearchActiveBackground, normalStateImageArtistQuery, mouseDownImageArtistQuery, WordCountSearchSingersButton_Click); InitializeSearchButton(ref handWritingSearchButton, "handWritingSearchButton", 1214, 481, 209, 59, ref handWritingSearchNormalBackground, ref handWritingSearchActiveBackground, normalStateImageArtistQuery, mouseDownImageArtistQuery, HandWritingSearchButtonForSingers_Click); } diff --git a/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.NumberSearch.cs b/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.NumberSearch.cs index 2ee4f21..f050593 100644 --- a/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.NumberSearch.cs +++ b/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.NumberSearch.cs @@ -85,7 +85,7 @@ namespace DualScreenDemo SetEnglishSingersAndButtonsVisibility(false); // 隱藏英文字母搜尋相關控件 SetPinYinSingersAndButtonsVisibility(false); // 隱藏拼音搜尋相關控件 SetHandWritingForSingersAndButtonsVisibility(false); // 隱藏手寫搜尋相關控件 - SetPictureBoxArtistSearchAndButtonsVisibility(false); // 隱藏其他搜尋模式的圖片框 + //SetPictureBoxArtistSearchAndButtonsVisibility(false); // 隱藏其他搜尋模式的圖片框 SetSongIDSearchAndButtonsVisibility(true); // 顯示字數搜尋相關控件 // 顯示「注音歌手搜尋」的圖片框 diff --git a/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.WordCountSearch.cs b/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.WordCountSearch.cs index ae68dd9..e791c17 100644 --- a/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.WordCountSearch.cs +++ b/PrimaryFormParts/SongSearch/PrimaryForm.SongSearch.WordCountSearch.cs @@ -38,21 +38,21 @@ namespace DualScreenDemo private Button clearButtonWordCountSongs; private Button closeButtonWordCountSongs; - private string[] numberWordCountSymbols; - private (int X, int Y, int Width, int Height)[] numberWordCountButtonCoords; - private Dictionary numberWordCountButtonImages; + //private string[] numberWordCountSymbols; + //private (int X, int Y, int Width, int Height)[] numberWordCountButtonCoords; + //private Dictionary numberWordCountButtonImages; - private (int X, int Y, int Width, int Height) modifyButtonWordCountCoords; - private (int X, int Y, int Width, int Height) clearButtonWordCountCoords; - private (int X, int Y, int Width, int Height) closeButtonWordCountCoords; + //private (int X, int Y, int Width, int Height) modifyButtonWordCountCoords; + //private (int X, int Y, int Width, int Height) clearButtonWordCountCoords; + //private (int X, int Y, int Width, int Height) closeButtonWordCountCoords; private RichTextBox inputBoxWordCountSongs; - private (int X, int Y, int Width, int Height) inputBoxWordCountCoords; - private string inputBoxWordCountFontName; - private float inputBoxWordCountFontSize; - private FontStyle inputBoxWordCountFontStyle; - private Color inputBoxWordCountForeColor; + //private (int X, int Y, int Width, int Height) inputBoxWordCountCoords; + //private string inputBoxWordCountFontName; + //private float inputBoxWordCountFontSize; + //private FontStyle inputBoxWordCountFontStyle; + //private Color inputBoxWordCountForeColor; /// /// 點擊「注音歌手搜尋」按鈕時執行的事件處理函式。 @@ -83,7 +83,7 @@ namespace DualScreenDemo SetPinYinSingersAndButtonsVisibility(false); // 隱藏拼音搜尋相關控件 SetHandWritingForSingersAndButtonsVisibility(false); // 隱藏手寫搜尋相關控件 - SetPictureBoxArtistSearchAndButtonsVisibility(false); // 隱藏其他搜尋模式的圖片框 + //SetPictureBoxArtistSearchAndButtonsVisibility(false); // 隱藏其他搜尋模式的圖片框 SetWordCountSongsAndButtonsVisibility(true); // 顯示字數搜尋相關控件 // 顯示「注音歌手搜尋」的圖片框 pictureBoxWordCountSongs.Visible = true; @@ -94,7 +94,7 @@ namespace DualScreenDemo /// 從 config.ini 設定檔中載入注音符號(NumberWordCount Symbols)。 /// 讀取 ini 檔的 [NumberWordCountSymbols] 區塊,並將「Symbols」欄位的值解析為陣列。 /// - private void LoadNumberWordCountSymbolsFromConfig() + /*private void LoadNumberWordCountSymbolsFromConfig() { // 建立 INI 檔案解析器 var parser = new FileIniDataParser(); @@ -116,7 +116,7 @@ namespace DualScreenDemo // 將符號字串以逗號分隔,轉換為字串陣列 numberWordCountSymbols = symbols.Split(','); - } + }*/ /// @@ -140,14 +140,14 @@ namespace DualScreenDemo /// /// 已解析的 INI 設定數據。 /// 回傳包含注音符號的字串陣列。 - private string[] LoadNumberWordCountSymbols(IniData data) + /*private string[] LoadNumberWordCountSymbols(IniData data) { // 從 INI 檔案的 [NumberWordCountSymbols] 區塊取得 Symbols 欄位值 string symbols = data["NumberWordCountSymbols"]["Symbols"]; // 以逗號分隔字串並轉換為字串陣列 return symbols.Split(','); - } + }*/ /// @@ -244,7 +244,7 @@ namespace DualScreenDemo /// /// 初始化並設置語音按鈕的相關資料,包括符號、座標與圖片等。 /// - private void InitializeNumberWordCountButtons() + private void InitializeNumberWordCountSongsButtons() { // 載入配置資料 var data = LoadConfigDataforWordCountSongs(); @@ -268,7 +268,7 @@ namespace DualScreenDemo var buttonImages = numberWordCountButtonImages[$"button{i}"]; // 創建並初始化語音按鈕,設定其背景圖片 - CreateNumberWordCountButton(i, buttonImages.normal, buttonImages.mouseDown, buttonImages.mouseOver); + CreateNumberWordCountSongsButton(i, buttonImages.normal, buttonImages.mouseDown, buttonImages.mouseOver); } } @@ -280,7 +280,7 @@ namespace DualScreenDemo /// 正常狀態下的圖片路徑。 /// 點擊狀態下的圖片路徑。 /// 滑鼠移過狀態下的圖片路徑。 - private void CreateNumberWordCountButton(int index, string normalImagePath, string mouseDownImagePath, string mouseOverImagePath) + private void CreateNumberWordCountSongsButton(int index, string normalImagePath, string mouseDownImagePath, string mouseOverImagePath) { try { @@ -310,7 +310,7 @@ namespace DualScreenDemo numberWordCountButtonsForSongs[index].MouseLeave += (s, e) => numberWordCountButtonsForSongs[index].BackgroundImage = normalImage; // 設置點擊事件處理方法 - numberWordCountButtonsForSongs[index].Click += NumberWordCountButton_Click; + numberWordCountButtonsForSongs[index].Click += NumberWordCountSongsButton_Click; // 設置按鈕的 Tag 屬性為對應的語音符號 numberWordCountButtonsForSongs[index].Tag = numberWordCountSymbols[index]; @@ -335,7 +335,7 @@ namespace DualScreenDemo LoadNumberWordCountSymbolsFromConfig(); // 初始化所有語音按鈕 - InitializeNumberWordCountButtons(); + InitializeNumberWordCountSongsButtons(); // 初始化注音歌手的特殊按鈕(例如音量、搜尋等) InitializeSpecialButtonsForWordCountSongs(); @@ -852,7 +852,7 @@ namespace DualScreenDemo action(); // 否則直接執行 } } - private void NumberWordCountButton_Click(object sender, EventArgs e) + private void NumberWordCountSongsButton_Click(object sender, EventArgs e) { var button = sender as Button; if (button != null && button.Tag != null) @@ -864,6 +864,7 @@ namespace DualScreenDemo } } } + } } \ No newline at end of file diff --git a/bin/config.ini b/bin/config.ini index 9400e17..23e4032 100644 --- a/bin/config.ini +++ b/bin/config.ini @@ -8,6 +8,7 @@ EnglishSongs = themes\superstar\歌名\英文\VOD_歌名查詢_英文查詢(按 PinYinSongs = themes\superstar\歌星\拼音\VOD_歌星查詢_拼音查詢(按鍵)_歌星查詢-注音查詢_未按.png HandWritingSongs = themes\superstar\歌星\手寫\3.歌星查詢(手寫按鍵)_未按.png WordCountSongs = themes\superstar\歌名\字數\VOD_歌名查詢_編號查詢(按鍵)_未按_沒有確認.png +WordCountSingers = themes\superstar\歌星\字數\VOD_歌星查詢_編號查詢(按鍵)_未按_沒有確認.png SongIDSearch = themes\superstar\歌名\編號\VOD_歌名查詢_編號查詢(按鍵)_未按_沒有確認.png [PictureBoxZhuYinSingers] @@ -114,6 +115,9 @@ closeButtonForSongs = 1074,372,70,65 modifyButtonWordCountSongs = 926,624,72,67 clearButtonWordCountSongs = 845,624,72,67 closeButtonWordCountSongs = 1088,624,72,67 +modifyButtonWordCountSingers = 926,624,72,67 +clearButtonWordCountSingers = 845,624,72,67 +closeButtonWordCountSingers = 1088,624,72,67 modifyButtonSongIDSearch = 811,643,94,87 clearButtonSongIDSearch = 692,643,93,87 closeButtonSongIDSearch = 1051,643,94,87 @@ -762,4 +766,21 @@ mouseDown = themes\superstar\歌名\編號\VOD_歌名查詢_編號查詢(按鍵) [CloseButtonImagesSongID] normal = themes\superstar\歌名\編號\VOD_歌名查詢_編號查詢(按鍵)-15.png mouseOver = themes\superstar\歌名\編號\VOD_歌名查詢_編號查詢(按鍵)-15.png -mouseDown = themes\superstar\歌名\編號\VOD_歌名查詢_編號查詢(按鍵)-30.png \ No newline at end of file +mouseDown = themes\superstar\歌名\編號\VOD_歌名查詢_編號查詢(按鍵)-30.png + + +[PictureBoxWordCountSingers] +X = 790 +Y = 350 +Width = 420 +Height = 350 + +[InputBoxWordCountSingers] +X = 800 +Y = 405 +Width = 400 +Height = 60 +FontName = Times New Roman +FontSize = 26 +FontStyle = Regular +ForeColor = Black \ No newline at end of file diff --git a/bin/mainlog.txt b/bin/mainlog.txt index 1c20d5d..4e010e2 100644 --- a/bin/mainlog.txt +++ b/bin/mainlog.txt @@ -103,3 +103,11 @@ 於 DualScreenDemo.PrimaryForm.InitializeFormAndControls() 於 DualScreenDemo.PrimaryForm..ctor() 於 DualScreenDemo.Program.Main() +[2025/3/24 下午 04:28:36] System.NullReferenceException: 並未將物件參考設定為物件的執行個體。 + 於 DualScreenDemo.PrimaryForm.LoadSpecialButtonCoordinatesForWordCountSingers(IniData data, String section, String buttonKey) + 於 DualScreenDemo.PrimaryForm.InitializeModifyButtonWordCountSingers() + 於 DualScreenDemo.PrimaryForm.InitializeSpecialButtonsForWordCountSingers() + 於 DualScreenDemo.PrimaryForm.InitializeButtonsForWordCountSingers() + 於 DualScreenDemo.PrimaryForm.InitializeFormAndControls() + 於 DualScreenDemo.PrimaryForm..ctor() + 於 DualScreenDemo.Program.Main() diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_已按.png b/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_已按.png deleted file mode 100644 index 57c6ef2..0000000 Binary files a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_已按.png and /dev/null differ diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_未按.png b/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_未按.png deleted file mode 100644 index a6f0102..0000000 Binary files a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_未按.png and /dev/null differ diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_確認 複本.png b/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_確認 複本.png deleted file mode 100644 index 4390c4f..0000000 Binary files a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_確認 複本.png and /dev/null differ diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_確認.png b/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_確認.png deleted file mode 100644 index 5727e68..0000000 Binary files a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_確認.png and /dev/null differ diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_1.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-02.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_1.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-02.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_2.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-03.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_2.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-03.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_3.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-04.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_3.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-04.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_4.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-05.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_4.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-05.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_5.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-06.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_5.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-06.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_6.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-07.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_6.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-07.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_7.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-08.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_7.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-08.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_8.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-09.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_8.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-09.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_9.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-10.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_9.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-10.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_0.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-11.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_0.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-11.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_清除.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-13.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_清除.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-13.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_重填.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-14.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_重填.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-14.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_關閉.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-15.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_關閉.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-15.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_1 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-17.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_1 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-17.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_2 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-18.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_2 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-18.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_3 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-19.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_3 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-19.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_4 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-20.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_4 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-20.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_5 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-21.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_5 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-21.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_6 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-22.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_6 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-22.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_7 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-23.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_7 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-23.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_8 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-24.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_8 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-24.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_9 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-25.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_9 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-25.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_0 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-26.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_0 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-26.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_清除 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-28.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_清除 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-28.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_重填 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-29.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_重填 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-29.png diff --git a/bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_關閉 複本.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-30.png similarity index 100% rename from bin/themes/superstar/歌星/字數/3.歌星查詢(字數按鍵)_關閉 複本.png rename to bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)-30.png diff --git a/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)_已按.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)_已按.png new file mode 100644 index 0000000..9499d41 Binary files /dev/null and b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)_已按.png differ diff --git a/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)_未按.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)_未按.png new file mode 100644 index 0000000..82659f1 Binary files /dev/null and b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)_未按.png differ diff --git a/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)_未按_沒有確認.png b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)_未按_沒有確認.png new file mode 100644 index 0000000..5ad4eea Binary files /dev/null and b/bin/themes/superstar/歌星/字數/VOD_歌星查詢_編號查詢(按鍵)_未按_沒有確認.png differ