Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2013, 22:47   #1
belkeandrey
Пользователь
 
Регистрация: 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 в тексте.
belkeandrey вне форума Ответить с цитированием
Старый 14.03.2013, 15:14   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

А готовые компонеты не подойдут? Лениво так... Тем более, что бесплатные есть. Например из набора джедаев (Jedi).
Баламут вне форума Ответить с цитированием
Старый 14.03.2013, 21:55   #3
belkeandrey
Пользователь
 
Регистрация: 21.02.2013
Сообщений: 48
По умолчанию

Если честно, не знаю пока про компоненты. Можете подсказать?
belkeandrey вне форума Ответить с цитированием
Старый 15.03.2013, 01:19   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Ну например jvRichEdit из пакета, который я упоминал выше. Он бесплатный. TAdvMemo из пакета TMS. По-моему за деньги, не помню уже. RichEdit от девок (Dev Express) тоже умеет и тоже платно.
Баламут вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интересная задача 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