1 (edited by sibprogsistem 2020-02-17 13:09:57)

Topic: есть сомнения

в программа создаются динамические объекты для каждой записи в базе
я пытаюсь получить TLabel и произвести какие либо операции с ним
код работает., но я сомневаюсь в правильности скрипта

так я создаю объекты

procedure collektionComponent(var tagid,txt: string);
var
l,i:integer;
begin
  sPanel:=TPanel.Create(Form1);
  sPanel.Parent:=Scroll;
  sPanel.Width:=425;
  sPanel.Height:=73;
  sPanel.Left := ( Scroll.Width - sPanel.Width)  div 2;
  sPanel.Top :=18;
  sPanel.ParentBackground:=False;
  sPanel.Color:=$00FF8888;
  sPanel.BevelOuter:=bvNone;
  sPanel.BevelInner:=bvNone;
  sPanel.BorderStyle:=bsNone;
  sPanel.Ctl3D:=False;
  sPanel.BevelWidth:=0;
  sPanel.Visible:=True;

  sLabel:=TLabel.Create(Form1);
  sLabel.Parent:=sPanel;
  sLabel.Width:=sPanel.Width;
  sLabel.Height:=sPanel.Height;
  sLabel.AutoSize:=False;
  sLabel.WordWrap:=True;
  sLabel.Alignment:=taCenter;
  sLabel.Layout:=tlCenter;
  sLabel.Font.Size:=sSizeLab;
  sLabel.Caption:=txt;
  sLabel.Font.Color:=$00FFD7D7;
  sLabel.OnMouseDown:=@MouseDown;

end;

так я получаю нужный мне Label

procedure MouseDown(Sender: Tobject);
var
  LPanel: TPanel;
begin
  LPanel := nil;
  if sender is TLabel then
    if TLabel(sender).Parent is TPanel then
      LPanel := TPanel(TLabel(sender).Parent);
  if (TLabel) then
  begin
    ShowMessage(TLabel(sender).Caption);
  end;
end;

мне кажется, что получаю я его не правильно..
может кто-то подправит?

Re: есть сомнения

А зачем вы проверяете Parent у Sender?  Или вы используете обработчик MouseDown  не только для этих меток, но и для других?
Да и проверка

 if (TLabel) then

какая-то странная.То есть она ничего не проверяет )))  Для чего она нужна?

Если procedure MouseDown() используется только у меток, созданных программно, то никакие проверки не нужны:

procedure MouseDown(Sender: Tobject);
begin
    ShowMessage(TLabel(sender).Caption);
end;

Если вам нужно, чтобы клик срабатывал только для меток на панели (при условии, что обработчик назначен ещё каким-то меткам и другим компонентам), то так:

procedure MouseDown(Sender: Tobject);
var
  LPanel: TPanel;
begin
  LPanel := nil;
  if sender is TLabel then
  begin
    if TLabel(sender).Parent is TPanel then
      LPanel := TPanel(TLabel(sender).Parent);
      if  LPanel <> nil  then
      begin
        ShowMessage(TLabel(sender).Caption);
      end;
  end;
end;
Визуальное программирование: блог и телеграм-канал.

Re: есть сомнения

спасибо!