Показать сообщение отдельно
  #2  
Старый 28.09.2018, 17:08
F.o.x. F.o.x. вне форума
Прохожий
 
Регистрация: 16.06.2018
Сообщения: 14
Версия Delphi: 7, XE3
Репутация: 10
Сообщение

Да, без проблем

Код:
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);
А внутри обработчика используем Sender для обращения к объекту, вызвавшему событие. Примерно так:
Код:
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;
И Вы точно уверены, что хотите использовать OnMouseDown и OnMouseUp вместо OnClick?
__________________
Соцпрофиль: vk.com/id401642609
Ответить с цитированием