2013-05-28 2 views
3

나는 Neume (그레고리 안창) 편집기를 만들려고합니다. 나는 정말로 많이 끝냈다. 그러나 나는 음악 점수의 아래에서 가사의 주제에 달라 붙었다.음악 가사의 가사

기본적으로 내가 풀려고하는 문제는 사용자 컨트롤의 일부 독립 블록이 있다는 것입니다. 그들 아래에는 가사를 넣을 텍스트 영역이 있어야합니다. 요점은 - 가사는 서식있는 텍스트 (텍스트 만 - 테이블, 이미지 등이 아님)입니다.

는 일이 더 재미하려면 - 아래의 텍스트의 첫 번째 모음입니다 제어 을 알고있다 내 사용자에 의해 렌더링 이미지 (첫 번째 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'의 RECT 위 얻을 수 있어야합니다.

은 내가 정의가 검사 솔루션을합니다 (WPF 맞춤법 검사기가 너무 우리를 위해 제한 한) 맞춤법 표현하기 위해 주어진 텍스트 상자의 adorner 층의 "붉은 squigglies"을 그릴 필요가 비슷한 문제가 있습니다.

다음은 그 구현의 일부 예입니다.

  //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); 
     } 

다음 해당하는 구형을 가지고 (어떤 COORD 년대 당신이 필요 이상) COORD 년대

+0

대답 해 주셔서 감사합니다 화면을 변환합니다. 슬프게도 나는 그것을 사용할 수 없다. 텍스트 서식을 지정할 수 있어야하므로 RichTextBox 인스턴스가 필요한 반면 TextBox를 참조하십시오. – maxpawkas