Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:
Код:Секретный код
Повторить:

Меню сайта




Ваше мнение
Хотите ли вы стать модератором раздела сайта или форума? (Желающие пишем админу.)

Да, конечно.
Только за большие деньги.
Нет, ни за что.
Ну может в будущем...


Результаты
Другие опросы

Всего голосов: 635
Комментарии: 2


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Статьи и обзоры



Создание гиперссылки в Delphi

Статьи по объектно-ориентированному программированию на языке Pascal и в среде программирования Delphi. Примеры работающего кода, тексты компонентов и классов, советы мастеров. Создать гиперссылку в Delphi довольно просто. На простом примере разберемся с созданием ссылки в Delphi, а затем оформим все в виде компонента.

Алгоритм создания такой: ставим на форму метку (TLabel), приводим ее внешний вид к привычному нам виду гиперссылки в нашем браузере и пишем обработчик события OnClick.
А чтобы можно было постоянно использовать гиперссылку в программах, мы создадим компонент. Начнем с того, что поставим на форму нашего проекта метку (TLabel), пусть ее имя останется Label1. Теперь мы напишем обработчик события OnClick, для нее:
Код
procedure TForm1.Label1Click(Sender: TObject);
begin
ShellExecute(handle,'open','http://winsov.ru/',nil,nil,SW_SHOW);
end;

Теперь поясню что мы здесь написали. Функция ShellExecute предназначена для открытия или печати файла, как исполняемого, так и документа. Первый параметр - это handle родительского окна, второй параметр - строка, указывает, что надо сделать с файлом, третий параметр содержит имя открываемого файла, четвертый параметр указывает дополнительные параметры запуска исполняемого файла, пятый параметр определяет директорию по умолчанию, последний параметр определяет где будет отображен файл после октрытия.
Если Вы уже попробовали запустить приведенный код, то скорее всего у Вас ничего не вышло, потому что функция ShellExecute, находится в модуле ShellAPI, который конечно же надо добавить в секцию uses, кода нашего приложения.
Теперь разберем параметры относительно нашего случая:

handle - это дескриптор главной формы (аналогично Form1.handle)

open - тип действия с файлом. Нам надо его открыть.

http://delphiworld.narod.ru/ - имя файла, который надо открыть. У нас это может быть гиперссылка, содержащая абсолютный URI.

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

nil - директория по умолчанию нас так же не интересует.

SW_SHOW - активирует окно и отображает его с текущими размерами и положением. Об остальных режимах можно узнать в хелпе (о функции ShellExecute).

Второй и третий параметры функции являются нуль терминированными строками, т.е. строками типа PChar, поэтому для использования в функции имени файла, полученного из OpenDialog1, нужно использовать PChar(OpenDialog1.Filename).
В браузере (при настройках по умолчанию) ссылка меняет цвет в зависимости от своего состояния и действий пользователя, мы тоже сделаем так. Для этого создадим три константы (в них будут определяться цвета), которые надо поместить в раздел Implementation:
Код
...
implementation
Const
link = clBlue; //цвет ссылки
alink = clRed; //цвет ссылки в момент нажатия
vlink = clPurple; // цвет посещеной ссылки
{$R *.DFM}
...

Теперь в обработчике события формы OnCreate нужно написать:
Код
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.font.Color:=link;
end;

В обработчике события метки OnMouseDown мы напишем:
Код
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Label1.Font.Color:=alink;
end;

А в обработчике события OnMouseUp нашей метки напишем:
Код
procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Label1.Font.Color:=vlink;
end;

Для придания полной реалистичности нашей ссылке, нужно установить свойство метки Cursor в crHandPoint. При наведении на ссылку указатель будет иметь вид привычной нам кисти руки с вытянутым указательным пальцем и ссылка будет подчеркнутой.
Ну вот и разобрались, а теперь напишем компонент. Там все предельно просто и понятно, поэтому объяснения напишу только в виде комментариев в коде.
В качестве родительского класса (Ancestor Type) мы конечно же должны выбрать TLabel. Привожу полный код модуля компонента Link класса Tlink (текст модуля надо сохранить в файле Link.pas):
Код
unit Link;
interface
uses Windows, SysUtils, Classes, Forms, StdCtrls, ShellAPI, Menus, Controls, Graphics;
type
TLink = class(TLabel)
private

//поле для хранения URL
FURL: string;

// поля для хранения настроек цветов ссылки
FlinkColor, FAlinkColor, FVlinkColor: TColor;

protected
public

//конструктор и деструктор
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;

//события, которые нам надо переопределить
procedure Click; override;

procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
override;

published

//свойства, которые будут видны в Object Inspector
property URL: string read FURL write FURL;
property LinkColor: TColor read FLinkColor write FLinkColor default clBlue;
property ALinkColor: TColor read FALinkColor write FALinkColor default clRed;
property VLinkColor: TColor read FVLinkColor write FVLinkColor default clPurple;
end;

procedure Register;
implementation

constructor TLink.Create( AOwner : TComponent );
begin
inherited Create(AOwner);

//устанавливаем цвета
FALinkColor := clRed;
FLinkColor := clBlue;
FVLinkColor := clPurple;

//сделаем метку синей и подчеркнутой
with Font do begin
Color := FLinkColor;
Style := [fsUnderline];
end;
end;

procedure TLink.Click;
begin
inherited Click;

//если поле URL заполнено, то перейдем по ссылке
if FURL '' then

ShellExecute(GetDesktopWindow(), 'open', PChar(FURl), nil, nil, SW_SHOW);
end;

procedure TLink.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then begin
FLinkColor := Font.Color;
Font.Color := FALinkColor;
end;
inherited;
end;

procedure TLink.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
Font.Color := FVLinkColor;
inherited;
end;

destructor TLink.Destroy;
begin

//уничтожим компонент
inherited;
end;

procedure Register;
begin

//надо, чтобы компонент появился в палитре
RegisterComponents('http://winsov.ru/', [TLink]);
end;

end.

Вот мы и разобрались с созданием гиперссылок в Delphi, как оказалось все очень просто.

Нет комментариев. Почему бы Вам не оставить свой?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.



Статьи и обзоры Delphi и TurboPascal Создание гиперссылки в Delphi Создать гиперссылку Delphi довольно просто На простом примере разберемся созданием ссылки затем оформим все виде компонента Алгоритм создания такой ставим на форму метку TLabel приводим ее внешний вид привычному нам виду гиперссылки нашем браузере пишем обработчик события OnClick чтобы можно было постоянно использовать программах мы создадим компонент Начнем того что поставим нашего проекта пусть имя останется