|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.03.2013, 22:47 | #1 |
Пользователь
Регистрация: 21.02.2013
Сообщений: 48
|
Интересная задача с ссылками в RichEdit
Добрый вечер! Мне необходимо сделать обучающую программу. Одна из функций, которая должна быть реализована -это ссылки в тексте, который видит пользователь. Для этого я беру вордовский документ в формате rtf и загружаю в RichEdit. Все получается очень красиво, сохраняется формат и т.д. В тексте должны быть ссылки, при нажатии на которые происходит какое-либо действие: открывается фото/видео. Здесь я конечно посидел, пошарил книги, форумы (в программировании новичок пока) и решил данную задачу. Но работает она адекватно только с одной ссылкой. Вернее работают все необходимые, но вся лажа происходит из-за смены курсора. Сейчас поймете. Вот код с одной ссылкой:
[DELPHI] //Действия при движении мыши procedure TOpisanie.RichEdit1MouseMove(Sender : TObject; Shift: TShiftState; X, Y: Integer); var i:Integer; begin HideCaret(RichEdit1.Handle); S:='тренажер';//Нужное слово kol:=8;//кол-во символов end; begin I:=RECharIndexByPos(RichEdit1,X,Y);//положение курсора if Pos(S,RichEdit1.Text)<>0 then if (I>Pos(S1,RichEdit1.Text)-1)and (I<Pos(S1,RichEdit1.Text)+(kol1-1))then begin richedit1.SelStart:=-10000000; RichEdit1.Cursor:=crHandPoint; end else RichEdit1.Cursor:=crDefault; end; /////////////////////////////////////////////////// //Действия при нажатии на кнопку мыши procedure TOpisanie.RichEdit1MouseDown(Sender : TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i:Integer; begin HideCaret(RichEdit1.Handle); I:=RECharIndexByPos(RichEdit1,X,Y);//положение курсора if Pos(S,RichEdit1.Text)<>0 then if (I>Pos(S,RichEdit1.Text)-1)and (I<Pos(S,RichEdit1.Text)+(kol-1)) then Media.show; end; //////////////////////////////////////////////////////// [/DELPHI] Здесь все работает идеально. Наводим на слово "Тренажер", курсор меняется на руку и при нажатии открывается форма. Вот так я пытаюсь реализовать, если в тексте несколько ссылок и получается лажа в виде "мелькающего" курсора из-за постоянных расчетов по условиям: [DELPHI] //Действия при движении мыши procedure TOpisanie.RichEdit1MouseMove(Sender : TObject; Shift: TShiftState; X, Y: Integer); var i:Integer; begin HideCaret(RichEdit1.Handle); S:='тренажер';// kol:=6;// S1:='кузов-контейнер КК4.2.31.1'; kol1:=26; S2:='рабочее место наводчика'; kol2:=33; end; begin I:=RECharIndexByPos(RichEdit1,X,Y);//положение курсора if Pos(S,RichEdit1.Text)<>0 then if (I>Pos(S,RichEdit1.Text)-1)and (I<Pos(S,RichEdit1.Text)+(kol1-1))then begin richedit1.SelStart:=-10000000; RichEdit1.Cursor:=crHandPoint; end else RichEdit1.Cursor:=crDefault; if Pos(S1,RichEdit1.Text)<>0 then if (I>Pos(S1,RichEdit1.Text)-1)and (I<Pos(S1,RichEdit1.Text)+(kol1-1))then begin richedit1.SelStart:=-10000000; RichEdit1.Cursor:=crHandPoint; end else RichEdit1.Cursor:=crDefault; end; if Pos(S2,RichEdit1.Text)<>0 then if (I>Pos(S2,RichEdit1.Text)-1)and (I<Pos(S2,RichEdit1.Text)+(kol2-1))then begin richedit1.SelStart:=-10000000; RichEdit1.Cursor:=crHandPoint; end else RichEdit1.Cursor:=crDefault; end; end; /////////////////////////////////////////////////// //Действия при нажатии на кнопку мыши procedure TOpisanie.RichEdit1MouseDown(Sender : TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i:Integer; begin HideCaret(RichEdit1.Handle); I:=RECharIndexByPos(RichEdit1,X,Y);//положение курсора if Pos(S,RichEdit1.Text)<>0 then if (I>Pos(S,RichEdit1.Text)-1)and (I<Pos(S,RichEdit1.Text)+(kol-1)) then Media.show; end; //////////////////////////////////////////////////////// [/DELPHI] Вот проблема видимо в постоянных расчетах и сменах курсора из-за движения мыши. Помогите, пожалуйста, решить задачку) При этом ссылок может быть до 30 в тексте. |
14.03.2013, 15:14 | #2 |
Баламучу слегка...
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,585
|
А готовые компонеты не подойдут? Лениво так... Тем более, что бесплатные есть. Например из набора джедаев (Jedi).
|
14.03.2013, 21:55 | #3 |
Пользователь
Регистрация: 21.02.2013
Сообщений: 48
|
Если честно, не знаю пока про компоненты. Можете подсказать?
|
15.03.2013, 01:19 | #4 |
Баламучу слегка...
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,585
|
Ну например jvRichEdit из пакета, который я упоминал выше. Он бесплатный. TAdvMemo из пакета TMS. По-моему за деньги, не помню уже. RichEdit от девок (Dev Express) тоже умеет и тоже платно.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Интересная задача | makskovalko | Помощь студентам | 5 | 22.02.2013 22:11 |
Интересная задача | makskovalko | Помощь студентам | 13 | 25.01.2013 11:29 |
Интересная задача! - | DannerDOS.kz | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 16.12.2008 14:04 |