Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ссылка в тексте [D7, XP]


uno-84 ©   (2008-06-24 15:37:00) 

Здравствуйте, подскажите пожалуйста! Каким образом мне сделать, что бы в RichEdite ссылки подсвечивалися синим цветом, причем помимо ссылок RichEdit содержет еще и текст. Заранее спасибо!


Palladin   (2008-06-26 10:07:00) [1]

инициализируй RichEdit, что бы он отправлял EN_LINK
Var
f:Cardinal;

f:=SendMessage(TRichEdit.Handle,EM_GETEVENTMASK,0,0);
f:=f or ENM_LINK;
SendMessage(TRichEdit.Handle,EM_SETEVENTMASK,0,f);


uno-84   (2008-06-26 09:37:00) [2]

Нашел себе:

procedure TNewMesForm.WndProc(var Message: TMessage);
var
  p: TENLink;
  strURL: String;
begin
    if (Message.Msg = WM_NOTIFY) then
    begin
         if (PNMHDR(Message.LParam).code = EN_LINK) then
         begin
              p := TENLink(Pointer(TWMNotify(Message).NMHdr)^);
              if (p.msg = WM_LBUTTONDOWN) then
              begin
                   SendMessage(MesRedit.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg)));
                   strURL := MesRedit.SelText;
                   ShellExecute(Handle, 'open', PChar(strURL), 0, 0, SW_SHOWNORMAL);
              end
         end
    end;

    inherited;
end;

Но ссылки все ровно не открываются, не знаете почему?


{RASkov}   (2008-06-26 00:55:00) [3]

> [6] uno-84   (25.06.08 13:30)
>OpenDialog1 := TOpenDialog.Create(self);

:)

> [12] uno-84   (25.06.08 16:22)

http://yandex.ru/yandsearch?clid=9582&text=EM_AUTOURLDETECT:)
http://www.delphisources.ru/pages/faq/base/re_url_highlight.html


uno-84   (2008-06-25 16:22:00) [4]

Спасибо огромное, теперь все нормально,)))) буду искать как обработать клик по ссылке


Palladin   (2008-06-25 15:45:00) [5]

StringReplace + F1


uno-84   (2008-06-25 15:43:00) [6]

Пробел - Char, а %20 уже String, могули я заменить на %?


Palladin   (2008-06-25 14:19:00) [7]

а давай сначала попробуешь?


uno-84   (2008-06-25 14:12:00) [8]

просто по этой ссылке нужно переходить на  сетевой ресурс и открывать, а имя файло уже получается измененно


Palladin   (2008-06-25 13:32:00) [9]

заменяй пробелы на "%20"


uno-84   (2008-06-25 13:30:00) [10]

Но у меня возник еще один вопрос, как ссылку в RichEdit я записываю полное имя файла

procedure TNewMesForm.UrBtnClick(Sender: TObject);
begin
    SendMessage(Mesredit.Handle, EM_AUTOURLDETECT, Integer(True), 0);
    OpenDialog1 := TOpenDialog.Create(self);
    OpenDialog1.Title := 'Файл';
    OpenDialog1.InitialDir := 'S:\';
    If OpenDialog1.Execute then
    begin
         Mesredit.Text := MesRedit.Text + '<' + ' ' + 'http:\\' + OpenDialog1.FileName + '>';
    end;
end;
И дело в том, что если имя файла имеет пробел ссылка после пробела не поддерживется. И имя получается не полной


{RASkov}   (2008-06-25 13:21:00) [11]

> [2] uno-84   (25.06.08 10:59)

Это не ошибка.... и кстати, как думаешь, Palladin или я сами придумали эту константу? нет, но в делфи есть поиск, где можно указать директорию с VCL и все бы нашлось.... Нет, я не к тому, что бы как-то повыпендриваться, а к тому, что если пользоваться поиском, то при нахождении одного ты видишь и остальные ответы..... но ты не пользуешься поиском и соответственно у тебя сейчас будет вопрос как обработать клик по ссылке, так? :)
ЗЫЖ Поиск бывает не только на жестком диске, а в интернете есть практически все, что и у тебя на ХДД
:о)


uno-84   (2008-06-25 11:24:00) [12]

Спасибо большое


Palladin   (2008-06-25 11:12:00) [13]

Const
EM_AUTOURLDETECT=WM_USER+91


uno-84   (2008-06-25 10:59:00) [14]

не распознает EM_AUTOURLDETECT, как мне избавиться от этой ошибки


{RASkov}   (2008-06-24 16:56:00) [15]

> [0] uno-84   (24.06.08 15:37)
> в RichEdite ссылки подсвечивалися синим цветом

SendMessage(RichEdit.Handle, EM_AUTOURLDETECT, Integer(True), 0);


Наверх

Титульная страница Поиск, карта сайта Написать письмо