Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > ссылки в Memo...


Автор: rameses 6.1.2011, 15:24
Нужно вывести в Memo ряд гиперссылок... можно ли это сделать...  подскажите как... или предложите аналог решения проблемы... 

Зарание благодарен!

Автор: skyboy 6.1.2011, 15:28
чтоб синенькие и с подчеркиванием или чтоб по клику открывался адрес?
обязательно использовать tmemo или можно и другие(trichedit for example)?

Автор: rameses 6.1.2011, 15:50
... открывались по клику!

можно использовать и другие... (альтернатива)

Автор: Snowy 6.1.2011, 16:08
http://base.vingrad.ru/view/2394-Kak-vyidelit-URL-v-TRichEdit

Автор: Jakeroid 6.1.2011, 16:55
Меня заинтересовал подобный вопрос:
"Есть ли в делфи компонент, который мог бы отображать форматируемо html к примеру?"
То есть я ему отдаю html, а он выводит на экран уже отформатируемый, со ссылками, жирным текстом и другими элементарными вещами.

Автор: Snowy 6.1.2011, 21:51
Из стандартных: TWebBrowser, TRichEdit.

Автор: Snowy 6.1.2011, 22:57
1. Кидаем на форму Memo1
2. Кидаем на форму Button1
3. Кидаем на форму TWebBrowser и, для краткости, обзываем его wb1.
У веббраузера нам понадобится событие OnBeforeNavigate2.
У кнопки, соответственно, событие OnClick.
Код такой:
Код
procedure LoadHtml(wb: TWebBrowser; html: AnsiString);
{* Вставить html код в браузер *}
var ms: TMemoryStream;
begin
  wb.Navigate('about:blank');
  ms:=TMemoryStream.Create;
  ms.Write(html[1], Length(html));
  ms.Position:=0;
  try
    while wb.ReadyState < READYSTATE_INTERACTIVE do
      Application.HandleMessage;
    (wb.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
  finally
    ms.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject); // OnClick
begin
  LoadHtml(wb1, AnsiString(Memo1.Lines.Text));
end;

procedure TForm1.wb1BeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
  var URL, Flags, TargetFrameName, PostData, Headers: OleVariant;  var Cancel: WordBool);
{* Обработка нажимаемых ссылок *} // OnBeforeNavigate2
var
  s: string;
begin
  s := string(URL);
  if (Copy(s, 1, 6) = 'about:') then s := Copy(s, 7, Length(s));
  if (s[1] = '$') then // можно придумывать свои хитрые ссылки
  begin
    ShowMessage('Вы нажали хитрую ссылку с кодом ' + copy(s, 2, Length(s)-1));
    Cancel := True;
  end;
  // Обычную http ссылку открываем в браузере по умолчанию, остальные прямо тут
  if UpperCase(copy(s,1, 7)) <> 'HTTP://' then Exit;
  ShellExecute(0, nil, PWideChar(string(URL)), nil, nil, SW_SHOWNORMAL);
  Cancel := true;
end;

В мемо вбиваем html код.
Я писал пример под такой:
Код
<body scroll="auto">
<h1>Форум программистов <a href="http://forum.vingrad.ru/">Vingrad</a>!</h1>
<quote>Пишем <i>разные</i> <u>программы</u> на <b>Delphi</b></quote>
<hr><ul>
<li><a href="$1">Хитрая ссылка №1</a></li>
<li><a href="$два">Хитрая ссылка №2</a></li>
<li><a href="$Snowy">Хитрая ссылка №3</a></li>
</ul><hr>
<a href="javascript:alert('Кому говорят не нажимай!!!')">Не нажимай сюда</a>
<hr><a href="ftp://ftp.hp.com/">файлики</a>
</body>
Запускаем, нажимаем кнопку, радуемся.
P.S. Тестил на Delphi XE. http://zalil.ru/30280160 (400kb)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)