Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1166529073
~Димас~
2006-12-19 14:51
2007.01.14
Интеграция


2-1166899194
FIL-23
2006-12-23 21:39
2007.01.14
работа с записями в delphi


2-1166631349
Чуча
2006-12-20 19:15
2007.01.14
Отчеты


15-1166895855
Дмитрий Игоревич
2006-12-23 20:44
2007.01.14
Delphi "рухнула"


15-1166520432
Tonich
2006-12-19 12:27
2007.01.14
Защита программки