|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как обрабатывать Event*ы у динамически создаваемых обьектов?
Приветствую.
Есть динамически создаваемые 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; Соцпрофиль: vk.com/id401642609 Последний раз редактировалось 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-файл. Соцпрофиль: vk.com/id401642609 Последний раз редактировалось F.o.x., 29.09.2018 в 22:29. |
#5
|
|||
|
|||
Спасибо.
Цитата:
Я вообще не знаю как эти DpK создавать, паковать |
#6
|
|||
|
|||
На самом деле это не сложно.
Если надо, то вот пример, там есть ссылка на скачивание. Инструкция по установке и описание тоже в архиве. Соцпрофиль: vk.com/id401642609 |
Этот пользователь сказал Спасибо F.o.x. за это полезное сообщение: | ||
TEKTON (30.09.2018)
|
#7
|
|||
|
|||
Наверно
Просто не сталкивался никогда с этим вообще. |