![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Приветствую.
Есть динамически создаваемые Label*ы Код:
procedure TForm1.Button1Click(Sender: TObject);
var i:byte;
s:string;
lb:array of TLabel;
begin
setlength(lb,Memo2.Lines.Count);
for i:=0 to Memo2.Lines.Count-1 do
begin
lb[i]:=TLabel.Create(Self);
lb[i].Parent:=Form1;
lb[i].Left:=8;
lb[i].Top:=i*17;
lb[i].Font.Size:=9;
lb[i].Height:=12;
lb[i].Width:=200;
lb[i].WordWrap:=False;
lb[i].Cursor:=crHandPoint;
lb[i].Caption:=Pars('">',Memo2.Lines.Strings[i-1],'%%%');
end;
end;Можно как то обработать Events тоже динамически ? Что то типа: Код:
procedure TForm1.lb[i]Click(Sender: TObject);
begin
ShellExecute(handle, 'open',pChar(Pars('%%%',Memo2.Lines.Strings[i-1],'">')), nil, nil, SW_SHOW);
end;Ну и обработать события: lb[i].MouseDown, lb[i].MouseUp, lb[i].MouseLeave, lb[i].MouseEnter Что б можно было обрабатывать события мыши (если курсор над label5, подкрасить его в красный. Курсор ушёл вернуть цвет в синий.) Спасибо. Последний раз редактировалось TEKTON, 28.09.2018 в 05:25. |
|
#2
|
|||
|
|||
|
Да, без проблем
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i:byte;
s:string;
lb:array of TLabel;
begin
setlength(lb,Memo2.Lines.Count);
for i:=0 to Memo2.Lines.Count-1 do
begin
lb[i]:=TLabel.Create(Self);
lb[i].Parent:=Form1;
lb[i].Left:=8;
lb[i].Top:=i*17;
lb[i].Font.Size:=9;
lb[i].Height:=12;
lb[i].Width:=200;
lb[i].WordWrap:=False;
lb[i].Cursor:=crHandPoint;
// Определяем Tag
lb[i].Tag:=i;
// Определяем обработчики событий
lb[i].OnMouseDown:=ALabelMouseDown;
lb[i].OnMouseUp:=ALabelMouseUp;
lb[i].OnMouseLeave:=ALabelMouseLeave;
lb[i].OnMouseEnter:=ALabelMouseEnter;
lb[i].Caption:=Pars('">',Memo2.Lines.Strings[i-1],'%%%');
end;
end;При этом у формы должны быть определены эти четыре процедуры: Код:
procedure ALabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ALabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ALabelMouseLeave(Sender: TObject); procedure ALabelMouseEnter(Sender: TObject); Код:
procedure ALabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ShellExecute(handle, 'open',pChar(Pars('%%%',Memo2.Lines.Strings[(Sender as TLabel).Tag],'">')), nil, nil, SW_SHOW);
end;Последний раз редактировалось F.o.x., 28.09.2018 в 17:37. |
| Этот пользователь сказал Спасибо F.o.x. за это полезное сообщение: | ||
TEKTON (29.09.2018)
| ||
|
#3
|
|||
|
|||
|
У гипер ссылки (ту которую из label*a делаем), должно быть три состояния.
1) Не активная - цвет синий. 2) Когда курсор висит над лейблом, цвет текста подкрашивается в красный (курсор ушёл, текст снова синий). 3) Посещённая ссылка - цвет сиреневый. (тут в принципе и на онклик можно повесить изменение цвета). Вот нарыл такое ![]() http://www.delphisources.ru/pages/fa...gyperlink.html Посмотрю как там оно работает. Но за код, всё равно спасибо. ![]() P.S. глянул. Вроде норм работает. Но хочется подправить несколько моментов. 1) как пр.описать, что б курсор всегда имел crHandPoint 2)Ссылка подкрашивается красным тока в момент клика (сделать чтоб подкрашивалась когда курсор над ссылкой висит) 3)как поменять иконку ? Что б в палитре отличалась от простого лейбла Спасибо. Последний раз редактировалось TEKTON, 29.09.2018 в 20:29. |
|
#4
|
|||
|
|||
|
Цитата:
Код:
Cursor:=crHandPoint; Цитата:
Код:
procedure TLink.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then FLinkColor := Font.Color; inherited; end; procedure TLink.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then Font.Color := FVLinkColor; inherited; end; procedure TLink.MouseLeave; begin Font.Color := FLinkColor; inherited; end; Цитата:
Код:
{$R ИмяФайла.dcr}Если ИмяФайла совпадает с именем модуля, то ИмяФайла можно заменить на * Если компонент в отдельном пакете, то лучше перенести подключение dcr непосредственно в dpk-файл. Последний раз редактировалось F.o.x., 29.09.2018 в 22:29. |
|
#5
|
|||
|
|||
|
Спасибо.
Цитата:
![]() Я вообще не знаю как эти DpK создавать, паковать ![]() |
|
#6
|
|||
|
|||
|
На самом деле это не сложно.
Если надо, то вот пример, там есть ссылка на скачивание. Инструкция по установке и описание тоже в архиве. |
| Этот пользователь сказал Спасибо F.o.x. за это полезное сообщение: | ||
TEKTON (30.09.2018)
| ||
|
#7
|
|||
|
|||
|
Наверно
![]() Просто не сталкивался никогда с этим вообще. |