Gibt dies keine Leichen ?

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6919
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Gibt dies keine Leichen ?

Beitrag von Mathias »

Ich habe folgendes Beispiel von der Delphi-Seite ausprobiert.
Müsste der Button nicht in der Luft hängen, welcher lokal in FormClick deklariert ist ?
Komischer weise funktioniert es, auch wird die Caption der einzelnen Button geändert, wen ich in ihn klicke.

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
begin
  if Sender is TButton then begin
    TButton(Sender).Caption := 'Neuer Titel';
  end;
end;
 
procedure TForm1.FormClick(Sender: TObject);
var
  Button: TButton;
begin
  Button := TButton.Create(Self);
  Button.Parent := Self;
  Button.Caption := 'Alter Titel';
  Button.Left := Random(200);
  Button.Top := Random(200);
  Button.OnClick := @Button2Click;
end;
http://www.delphi-treff.de/tipps-tricks ... -erzeugen/
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10877
Registriert: Mo 11. Sep 2006, 19:01

Re: Gibt dies keine Leichen ?

Beitrag von theo »

Nö, das geht schon.
Der Button hat ja einen Owner "Self" im Create.
Das Fomular (Owner) freet ihn am Ende.

Aber du hast natürlich keinen direkten Zugriff mehr auf den Button.
Höchstens über FindComponent etc.
Kannst auch mit

Code: Alles auswählen

Caption:=IntToStr(Self.ComponentCount);   
beobachten, dass es immer einer mehr wird.

Im Prinzip brauchst du gar keine extra Variable. Das ist zwar hässlich, aber geht auch:

Code: Alles auswählen

procedure TForm1.FormClick(Sender: TObject);
begin
  With TButton.Create(Self) do
  begin
   Parent := Self;
   Caption := 'Alter Titel';
   Left := Random(200);
   Top := Random(200);
   OnClick := @Button2Click;
  end;
end;

Antworten