Показать сообщение отдельно
  #2  
Старый 11.11.2011, 11:01
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от Evita
У меня в аксесс-БД есть поле с ссылками на сайты, и e-mail (тип поля: гиперссылка). Для отображения этой информации в делфи, использовала DBLabel. Но он отобразил данные так: (MEMO). Подскажите пожалуйста, как отобразить ссылки нормально в лейблах, с дальнейшим кликаньем на них и переходом по ссылке на нужный сайт (и с открытием MS Outlook для e-mail)? Заранее большое при большое спасибо!!!

Вот у меня сразу вопрос возникает, Вы пытаетесь что-нибудь сделать самостоятельно, или сразу на форум бежите?

По порядку:
1. Вместо DBText кидаем на форму стандартный Label. Сразу же идем в font, ставим подчеркивание и выбираем синий цвет. Также желательно выбрать cursor в виде руки с вытянутым указательным пальцем (crHandPoint).

2. Помещаем на форму еще один кверик с запросом вида:
Код:
select ssilka from table where id = :id
Вместо id должно быть Ваше уникальное поле.

3. У грида на событие OnCellClick прописываем следующее:
Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
var s: string;
begin
  ADOQuery2.Close;
  ADOQuery2.Parameters.ParamByName('id').DataType:= ftInteger;
  ADOQuery2.Parameters.ParamByName('id').Value:= ADOQuery1.fieldByName('id').AsString;
  ADOQuery2.Open;
  s:= ADOQuery1.FieldByName('Ssilka').AsString;
  if pos('@', s) = 0 then//ссылка на страницу
    Label1.Caption:= StringReplace(s,'#','',[rfReplaceAll])
  else //e-mail
    Label1.Caption:= copy(s, 1, pos('#', s)-1);
, где ADOQuery1 - кверик привязанный к гриду, ADOQuery2 - наш новый кверик. StringReplace убирает знаки # которые будут отображаться в label, т.к. тип поля у нас гиперссылка.

4. В uses добавляем модуль ShellApi.

5. Обработка клика на label:
Код:
procedure TForm1.Label1Click(Sender: TObject);
begin
  if pos('@', Label1.Caption) = 0 then //ссылка на страницу
    ShellExecute(Application.Handle, PChar('open'), pChar(Label1.Caption), nil, nil, SW_NORMAL)
  else //e-mail
    ShellExecute(Application.Handle, PChar('open'), PChar('mailto:'+Label1.Caption),nil,nil,1);
end;

P.S. Не сразу заметил, что еще и outlook открывать.
__________________
Google в помощь
Ответить с цитированием