Linki w RichEdit

0

Macie może jakąś koncepcję, jak zrobić, żeby po wpisaniu do zwyczajnego RichEdita adresu www dany odcinek textu był podkreślony a po kliknięcui na niego otwierała się przeglądarka?

0

Moja koncepcja - rusz zaschniętym rozumkiem i cofnij się z dwa dni wstecz - Dryobates umieścił w FAQ wskazówkę odnośnie tego..

I po co chłopak ma się męczyć i cokolwiek pisać Wam,jak Wy nawet nie spojrzycie, tylko sie pytacie naforum?

//Posty poniżej będą kasowane :-[ :-[ :-[ :-[

0

Tam jest wszystko ładnie napisane, tylko że po kliknięciu na linka nic się nie dzieje... Jak przechwycić text linka, żeby móc go potem otworzyć? Chodzi mi o to, jak go do zmiennej jakiejś wpakować

0

Siedziałem pół dnia nad tym i się nie domyśliłem.... Kiepski jestem w WinAPI, więc jak moglibyście mi podać jakiś gotowy kod, lub przynajmniej jakieś wskazówki podać, to byłbym wdzięczny

0

wszystkie potrzebne nagłówki masz w windows.pas, wystarczy reagowanie na message wysyłany przez richedit i odpowiednie uruchamianie. reakcja na mesag notify:

procedure TJvCustomRichEdit.CNNotify(var Msg: TWMNotify);
var
AMsg: TMessage;
begin
with Msg do
case NMHdr^.code of
EN_SELCHANGE:
SelectionChange;
EN_REQUESTRESIZE:
RequestSize(PReqSize(NMHdr)^.RC);
EN_SAVECLIPBOARD:
with PENSaveClipboard(NMHdr)^ do
if not SaveClipboard(cObjectCount, cch) then
Result := 1;
EN_PROTECTED:
with PENProtected(NMHdr)^ do
begin
AMsg.Msg := Msg;
AMsg.WParam := WParam;
AMsg.LParam := LParam;
AMsg.Result := 0;
if not ProtectChange(AMsg, chrg.cpMin, chrg.cpMax) then
Result := 1;
end;
EN_LINK:
with PENLink(NMHdr)^ do
begin
case Msg of
WM_RBUTTONDOWN:
begin
FClickRange := chrg;
FClickBtn := mbRight;
end;
WM_RBUTTONUP:
begin
if (FClickBtn = mbRight) and (FClickRange.cpMin = chrg.cpMin) and
(FClickRange.cpMax = chrg.cpMax) then
URLClick(GetTextRange(chrg.cpMin, chrg.cpMax), mbRight);
with FClickRange do
begin
cpMin := -1;
cpMax := -1;
end;
end;
WM_LBUTTONDOWN:
begin
FClickRange := chrg;
FClickBtn := mbLeft;
end;
WM_LBUTTONUP:
begin
if (FClickBtn = mbLeft) and (FClickRange.cpMin = chrg.cpMin) and
(FClickRange.cpMax = chrg.cpMax) then
URLClick(GetTextRange(chrg.cpMin, chrg.cpMax), mbLeft);
with FClickRange do
begin
cpMin := -1;
cpMax := -1;
end;
end;
end;
end;
EN_STOPNOUNDO:
begin
{ cannot allocate enough memory to maintain the undo state }
end;
end;
end;

w URLClick dajesz normaly shellexecute (jest w faq) i jusz masz gotowe. ps. kombinuj z kodem bo ten na pewno nie zadziała, poza tym Ściągnij sobie JediVCL (dużo razy było o tym na forum) tam jest to co ci potrzeba (JvxRichEdit)

0

No więc skożystałem z kodu powyżej i po trzech dniach prób i błedów i niepowodzeń (bo w WinAPI to ja świerzy w zasadzie jestem) wpadłem na to, że po prostu RichEdit nie wysyła komunikatu o kliknięciu na link. Ściągnąłem tamten komponent i moja procedurka działa na ten JvxRichEdit, a na zwyczajnego RichEdita niebardzo... A więc cały czas proszę o pomoc w tej sprawie. Potrzebuję mieć te linki w zwykłym RC, nie chcę używać innych komponentów z pewnych względów... Gdyby ktoś pomógł, byłbym bardzo wdzięczny.

0

Nikt mi nie pomógł, a więc odpowiadam sam sobie... Może komuś się w przyszłości przyda.... w FAQ Dryobates napisał, jak zrobić, żeby RichEdit zanzaczał linki... Trza jeszcze jeden komunikat do RichEdita wysłać, który rozkaże wysyłanie komunikatów o kliknięciu na tego linka:

const
EM_SETEVENTMASK = WM_USER + 69;
ENM_LINK = $04000000;
begin
SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, ENM_LINK);
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1