247 lines
10 KiB
C#
247 lines
10 KiB
C#
using System.IO;
|
|
using Microsoft.Ink;
|
|
|
|
namespace DualScreenDemo
|
|
{
|
|
public partial class PrimaryForm
|
|
{
|
|
private PictureBox pictureBoxHandWritingSongs;
|
|
private Button refillButtonHandWritingSongs;
|
|
private Button clearButtonHandWritingSongs;
|
|
private Button closeButtonForSongs;
|
|
private Panel handWritingPanelForSongs;
|
|
private InkOverlay inkOverlayForSongs;
|
|
private RichTextBox handwritingInputBoxForSongs;
|
|
private ListBox candidateListBoxForSongs;
|
|
|
|
private void InitializeHandWritingForSongs()
|
|
{
|
|
InitializeHandWritingPanelForSongs();
|
|
InitializeInkOverlayForSongs();
|
|
InitializeHandwritingInputBoxForSongs();
|
|
InitializeCandidateListBoxForSongs();
|
|
InitializeBtnsHandwritingSongs();
|
|
}
|
|
|
|
private void InitializeHandWritingPanelForSongs()
|
|
{
|
|
handWritingPanelForSongs = new Panel
|
|
{
|
|
BorderStyle = BorderStyle.FixedSingle,
|
|
BackColor = Color.WhiteSmoke,
|
|
Visible = false
|
|
};
|
|
|
|
ResizeAndPositionControl(handWritingPanelForSongs, 20, 89, 650, 260);
|
|
|
|
pictureBoxHandWritingSongs.Controls.Add(handWritingPanelForSongs);
|
|
}
|
|
|
|
private void InitializeInkOverlayForSongs()
|
|
{
|
|
try
|
|
{
|
|
inkOverlayForSongs = new InkOverlay(handWritingPanelForSongs);
|
|
inkOverlayForSongs.Enabled = false;
|
|
inkOverlayForSongs.Ink = new Ink();
|
|
inkOverlayForSongs.DefaultDrawingAttributes.Color = Color.Black;
|
|
inkOverlayForSongs.DefaultDrawingAttributes.Width = 100;
|
|
inkOverlayForSongs.Stroke += new InkCollectorStrokeEventHandler(InkOverlayForSongs_Stroke);
|
|
inkOverlayForSongs.Enabled = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine("Failed to initialize ink overlay for singers: " + ex.Message);
|
|
}
|
|
}
|
|
|
|
private void InkOverlayForSongs_Stroke(object sender, InkCollectorStrokeEventArgs e)
|
|
{
|
|
|
|
RecognizeInk(inkOverlayForSongs, candidateListBoxForSongs);
|
|
}
|
|
|
|
private void InitializeHandwritingInputBoxForSongs()
|
|
{
|
|
|
|
handwritingInputBoxForSongs = new RichTextBox
|
|
{
|
|
Font = new Font("微軟正黑體", (float)26 / 900 * Screen.PrimaryScreen.Bounds.Height, FontStyle.Regular),
|
|
Visible = false
|
|
};
|
|
ResizeAndPositionControl(handwritingInputBoxForSongs, 20, 12, 541, 64);
|
|
pictureBoxHandWritingSongs.Controls.Add(handwritingInputBoxForSongs);
|
|
}
|
|
|
|
private void InitializeCandidateListBoxForSongs()
|
|
{
|
|
|
|
candidateListBoxForSongs = new ListBox
|
|
{
|
|
Font = new Font("微軟正黑體", (float)26 / 900 * Screen.PrimaryScreen.Bounds.Height, FontStyle.Regular),
|
|
Visible = false
|
|
};
|
|
ResizeAndPositionControl(candidateListBoxForSongs, 675, 81, 115, 270);
|
|
candidateListBoxForSongs.SelectedIndexChanged += CandidateListBoxForSongs_SelectedIndexChanged;
|
|
pictureBoxHandWritingSongs.Controls.Add(candidateListBoxForSongs);
|
|
}
|
|
|
|
private void CandidateListBoxForSongs_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (candidateListBoxForSongs.SelectedIndex != -1)
|
|
{
|
|
string selectedWord = candidateListBoxForSongs.SelectedItem.ToString();
|
|
handwritingInputBoxForSongs.Text += selectedWord;
|
|
candidateListBoxForSongs.Visible = false;
|
|
|
|
|
|
if (inkOverlayForSongs != null)
|
|
{
|
|
inkOverlayForSongs.Ink.DeleteStrokes();
|
|
handWritingPanelForSongs.Invalidate();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ShowImageOnPictureBoxHandWritingSongs(string imagePath)
|
|
{
|
|
Bitmap originalImage = new Bitmap(imagePath);
|
|
|
|
pictureBoxHandWritingSongs.Image = originalImage;
|
|
|
|
ResizeAndPositionPictureBox(pictureBoxHandWritingSongs, 388, 355, 810, 360);
|
|
|
|
pictureBoxHandWritingSongs.Visible = true;
|
|
}
|
|
|
|
private void SetHandWritingForSongsAndButtonsVisibility(bool isVisible)
|
|
{
|
|
EnableDoubleBuffering(handWritingPanelForSongs);
|
|
EnableDoubleBuffering(handwritingInputBoxForSongs);
|
|
EnableDoubleBuffering(candidateListBoxForSongs);
|
|
EnableDoubleBuffering(pictureBoxHandWritingSongs);
|
|
EnableDoubleBuffering(refillButtonHandWritingSongs);
|
|
EnableDoubleBuffering(clearButtonHandWritingSongs);
|
|
EnableDoubleBuffering(closeButtonForSongs);
|
|
|
|
if (isVisible)SetUIVisible(pictureBoxHandWritingSongs);
|
|
else CloseUI(pictureBoxHandWritingSongs);
|
|
}
|
|
|
|
private void InitializeBtnsHandwritingSongs()
|
|
{
|
|
var data = LoadBtnConfigData();
|
|
|
|
refillButtonHandWritingSongs = new Button
|
|
{
|
|
Name = "refillButtonHandWritingSongs",
|
|
};
|
|
ConfigureButton(refillButtonHandWritingSongs, 565, 12, 72, 66,
|
|
new Bitmap(Path.Combine(serverPath, data["RefillButtonImagesHandWriting"]["normal"])),
|
|
new Bitmap(Path.Combine(serverPath, data["RefillButtonImagesHandWriting"]["mouseOver"])),
|
|
new Bitmap(Path.Combine(serverPath, data["RefillButtonImagesHandWriting"]["mouseDown"])),
|
|
RefillButtonHandWritingSongs_Click);
|
|
pictureBoxHandWritingSongs.Controls.Add(refillButtonHandWritingSongs);
|
|
|
|
clearButtonHandWritingSongs = new Button
|
|
{
|
|
Name = "clearButtonHandWritingSongs",
|
|
};
|
|
ConfigureButton(clearButtonHandWritingSongs, 642, 11, 72, 66,
|
|
new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesHandWriting"]["normal"])),
|
|
new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesHandWriting"]["mouseOver"])),
|
|
new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesHandWriting"]["mouseDown"])),
|
|
ClearButtonHandWritingSongs_Click);
|
|
pictureBoxHandWritingSongs.Controls.Add(clearButtonHandWritingSongs);
|
|
|
|
|
|
closeButtonForSongs = new Button
|
|
{
|
|
Name = "closeButtonForSongs",
|
|
};
|
|
ConfigureButton(closeButtonForSongs, 719, 11, 72, 66,
|
|
new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesHandWriting"]["normal"])),
|
|
new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesHandWriting"]["mouseOver"])),
|
|
new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesHandWriting"]["mouseDown"])),
|
|
CloseButtonForSongs_Click);
|
|
pictureBoxHandWritingSongs.Controls.Add(closeButtonForSongs);
|
|
}
|
|
#region 按鈕點擊事件
|
|
private void HandWritingSearchButtonForSongs_Click(object sender, EventArgs e)
|
|
{
|
|
this.SuspendLayout();
|
|
|
|
zhuyinSearchSongButton.BackgroundImage = zhuyinSearchSongNormalBackground;
|
|
englishSearchSongButton.BackgroundImage = englishSearchSongNormalBackground;
|
|
pinyinSearchSongButton.BackgroundImage = pinyinSearchSongNormalBackground;
|
|
wordCountSearchSongButton.BackgroundImage = wordCountSearchSongNormalBackground;
|
|
handWritingSearchSongButton.BackgroundImage = handWritingSearchSongActiveBackground;
|
|
numberSearchSongButton.BackgroundImage = numberSearchSongNormalBackground;
|
|
|
|
|
|
EnableDoubleBuffering(handWritingPanelForSongs);
|
|
EnableDoubleBuffering(handwritingInputBoxForSongs);
|
|
EnableDoubleBuffering(candidateListBoxForSongs);
|
|
EnableDoubleBuffering(pictureBoxHandWritingSongs);
|
|
EnableDoubleBuffering(refillButtonHandWritingSongs);
|
|
EnableDoubleBuffering(closeButtonForSongs);
|
|
|
|
|
|
var configData = LoadBtnConfigData();
|
|
string handWritingImagePath = Path.Combine(serverPath, configData["ImagePaths"]["HandWritingSongs"]);
|
|
|
|
ShowImageOnPictureBoxHandWritingSongs(Path.Combine(serverPath, handWritingImagePath));
|
|
|
|
// 鍵盤UI介面顯示設定
|
|
SetWordCountSongsAndButtonsVisibility(false);
|
|
SetEnglishSongsAndButtonsVisibility(false);
|
|
SetPinYinSongsAndButtonsVisibility(false);
|
|
SetHandWritingForSongsAndButtonsVisibility(true);
|
|
SetSongIDSearchAndButtonsVisibility(false);
|
|
SetZhuYinSongsAndButtonsVisibility(false);
|
|
|
|
ResetinputBox();
|
|
this.ResumeLayout();
|
|
}
|
|
|
|
private void RefillButtonHandWritingSongs_Click(object sender, EventArgs e)
|
|
{
|
|
handwritingInputBoxForSongs.Text = "";
|
|
}
|
|
private void ClearButtonHandWritingSongs_Click(object sender, EventArgs e)
|
|
{
|
|
if (this.Controls.Contains(handWritingPanelForSongs) && inkOverlayForSongs != null)
|
|
{
|
|
inkOverlayForSongs.Ink.DeleteStrokes();
|
|
handWritingPanelForSongs.Invalidate();
|
|
}
|
|
}
|
|
private void CloseButtonForSongs_Click(object sender, EventArgs e)
|
|
{
|
|
|
|
this.SuspendLayout();
|
|
handWritingSearchSongButton.BackgroundImage = handWritingSearchSongNormalBackground;
|
|
SetHandWritingForSongsAndButtonsVisibility(false);
|
|
FindHandwritingSongs();
|
|
this.ResumeLayout();
|
|
}
|
|
private void FindHandwritingSongs()
|
|
{
|
|
string searchText = handwritingInputBoxForSongs.Text;
|
|
// 在這裡添加搜尋歌曲的邏輯
|
|
// 例如:根據輸入框的內容搜尋歌曲
|
|
string query = string.IsNullOrWhiteSpace(searchText)
|
|
? "SELECT * FROM song_library_cache ORDER BY song_id DESC LIMIT 1000;"
|
|
: $"SELECT * FROM song_library_cache WHERE song_name LIKE '{searchText}%' ORDER BY song_name DESC;";
|
|
|
|
var searchResults = SearchSongs_Mysql(query);
|
|
// 重置分頁
|
|
currentPage = 0;
|
|
totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage);
|
|
// 更新多頁面面板的內容
|
|
multiPagePanel.currentPageIndex = 0;
|
|
multiPagePanel.LoadSongs(searchResults);
|
|
}
|
|
#endregion
|
|
}
|
|
} |