2013-05-28 72 views
3

我試圖創建一個neume(格里高利唄)編輯器。我已經完成了很多,但是我在樂譜的歌詞下被卡住了。歌詞編輯器

基本上我試圖解決的問題是:有一些獨立的用戶控制塊。在他們下面應該有文字區域來放歌詞。整個觀點是 - 歌詞是豐富的文本(但只有文本 - 沒有表格,圖像等)。

爲了讓事情變得有趣 - 我的用戶呈現的圖像控制已經到知道哪裏是在下面的文本中的第一個元音(第一紐姆記譜法 - 讓我們稱之爲的說明 - 必須要高於exacly放置第一個元音)。

我真的很努力地完成它。我考慮使用RTB,但是重新調整大小存在着問題 - 歌詞基本上可以是長度無限的 - (它向下調整大小,而不是向右),以及綁定到RTB確實是有趣應對。

可以請給我任何想法如何解決這個問題?這是一個小圖像,解釋 - 我希望 - 我的問題。

http://img833.imageshack.us/img833/7451/clipboard01fd.png

非常感謝你提前!

回答

0

你看過TextBox.GetRectFromCharacterIndex方法嗎?

http://msdn.microsoft.com/en-us/library/ms603094.aspx

如果我正確理解你的問題,你應該能夠得到在你的例子中,矩形的字母「O」的上方。

我有一個類似的問題,我需要在給定文本框的裝飾圖層上繪製「紅色小方格」以表示自定義拼寫檢查器解決方案(WPF拼寫檢查器對我們來說太有限了)。

下面是該實現的一個部分示例,以防萬一。

  //loop through the invalid words and draw the squiggilies 
     foreach (var word in rslt) 
     { 
     //find the index of the start of the invalid word 
     int idx1 = tbx.Text.ToLower().IndexOf(word.ToLower()); 
     //find the index of the end of the invalid word 
     int idx2 = idx1 + (word.Length); 

     if (idx1 == -1) 
      continue; 

     //get a rect defining the location in coordinates of the invalid word. 
     var rec1 = tbx.GetRectFromCharacterIndex(idx1); 
     var rec2 = tbx.GetRectFromCharacterIndex(idx2); 

     //if the word is not visible or not fully visible, do not show the red line. 
     if (tbx.ActualWidth > 0) 
     { 
      if (rec1.X < 0 || rec2.X > tbx.ActualWidth) 
      continue; 
     } 

     if (rec1.Y < 0) 
      continue; 

     //actually draw the line under the word 
     SquigglyAdorner ado = new SquigglyAdorner(tbx, word, rec1.X, rec2.X, rec2.Bottom); 
     adornerLayer.Add(ado); 
     } 

然後採取正確,而且將其轉換爲屏幕座標的(或任何你需要的座標的)

+0

謝謝你的答案。可悲 - 我無法使用它。你引用一個文本框,而我需要你一個RichTextBox實例,因爲我需要能夠格式化文本。 – maxpawkas