![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 21.02.2013
Сообщений: 48
|
![]()
Добрый вечер! Мне необходимо сделать обучающую программу. Одна из функций, которая должна быть реализована -это ссылки в тексте, который видит пользователь. Для этого я беру вордовский документ в формате 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 в тексте. |
![]() |
![]() |
![]() |
#2 |
Баламучу слегка...
Участник клуба
Регистрация: 01.11.2006
Сообщений: 1,585
|
![]()
А готовые компонеты не подойдут? Лениво так... Тем более, что бесплатные есть. Например из набора джедаев (Jedi).
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 21.02.2013
Сообщений: 48
|
![]()
Если честно, не знаю пока про компоненты. Можете подсказать?
|
![]() |
![]() |
![]() |
#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 |