Текущий архив: 2007.01.14;
Скачать: CL | DM;
Вниз
"Экзотический" TMemo Найти похожие ветки
← →
pirate © (2006-05-04 17:53) [0]В общем, у нас с друзьями есть одна задумка-
Интерактивная книга.
Сама изюминка в том, что пользователь мог бы читая какой либо сложный текст нажать на непонятное слово и посмотреть дополнительную информацию: значение в столковом словаре, синонимы, иллюстрация и т.п.
Суть проблемы такова:
Я не разу не создавал компоненты, а обычным TMemo я уже запарился: достиг того, что программа знает на какое слово наведен курсор мыши, но еслт минус: все работает, если текст не был "прокручен" скроллбаром, иначе я не могу узнать на сколько строчек он прокручен и из этого вытекает то, что наводимое слово определяется не верно.
(Все дело в том, что я могу узнать на какую строчку наведена мышка считая от верха компонента. А если текст прокручен, то верх TMemo вовсе не начало текста.)
Чем можете мне помочь?
(Подкиньте толковых идей, а то у меня уже мозги плавятся..)
Заранее премного благодарен.
← →
DimaBr (2006-05-04 18:14) [1]Положение курсора:
LineNumber := Memo1.Perform(EM_LINEFROMCHAR, -1, 0);
Цитата с начала страницы:
Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.
← →
MBo © (2006-05-04 18:15) [2]>я не могу узнать на сколько строчек он прокручен и из этого вытекает то, что наводимое слово определяется не верно.
Исследуй EM_*** сообщения в MSDN или WinSDK хелпе
← →
pirate © (2006-05-04 18:24) [3]DimaBr (04.05.06 18:14) [1]
Положение курсора:
LineNumber := Memo1.Perform(EM_LINEFROMCHAR, -1, 0);
Я имел ввиду курсор мыши, а не каретку. Каретку я и сам знаю, как посмотреть.
Имеется ввиду что мы наводим мышку на слово, щелк и вуаля: все что можно с ним сделать у нас перед глазами.
← →
MBo © (2006-05-04 18:28) [4]А вообще это смахивает на гипертекстовые ссылки - так и использовать нужно соответствующие технологии
← →
pirate © (2006-05-04 18:29) [5]Нет. Есть проблема: книга уже готова в виде текста и она просто огромна.
Эту идею я уже отбросил.
← →
Юрий Зотов © (2006-05-05 08:07) [6]> pirate
Набросок "на скорую руку":
const
Letters = ["A".."Z", "a".."z", "Ё", "ё", "А".."я"];
procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
S: string;
L, R: integer;
begin
S := Memo1.Text;
L := $FFFF and SendMessage(Memo1.Handle, EM_CHARFROMPOS, 0, (Y shl 16) or X);
if L < Length(S) then
Inc(L);
R := L;
while (L > 0) and (S[L] in Letters) do
Dec(L);
Inc(L);
while (R <= Length(S)) and (S[R] in Letters) do
Inc(R);
Label1.Caption := Copy(S, L, R - L)
end;
А вообще, Вы изобретаете велосипед - уже давно существует, например, QDictionary (http://www.anplex.ru) и, скорее всего, другие подобные программы. Причем QDictionary использует не сообщение EM_CHARFROMPOS, а технологию Active Accessibility, благодаря чему умеет работать не только с окнами классов Edit и RichEdit, но и с HTML-окнами (а последняя версия - и с окнами MS Office). И хотя программа изначально предназначена для перевода, но имеет редактируемый словарь, в который ничто не мешает вставить любое описание.
А разработка компонентов, хоть Вы о ней и пишете, тут совершенно ни при чем - поэтому обсуждение закрываю.
Страницы: 1 вся ветка
Текущий архив: 2007.01.14;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.052 c