Цитата:
Сообщение от 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 открывать.