Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekte löschen (https://www.delphipraxis.net/12566-objekte-loeschen.html)

devnull 30. Nov 2003 15:03

Re: Objekte löschen
 
Delphi-Quellcode:
procedure TOkBottomDlg.Neues_Button_erstellen (x, y, h, w : integer; const name : string);
var NewButton: {TSpeed}TButton;
    i : integer;
    str1b : string;
begin
  NewButton := TButton.Create(OkBottomDlg.Bevel1);
  // Eigenschaften des neuen Buttons festlegen:
  with NewButton do begin
    Parent := OkBottomDlg;
    Caption := name;
    Top := y;
    Left := x+25;
    Height := h;
    Width := w;
    @NewButton.OnClick := @MeinEigenesOnClick;
  end;
  inc (buttons_anzahl);
  if buttons_anzahl <= 20 then buttons_names [buttons_anzahl] := name;
end;
Die Proze wird aber aus einer anderen Unit ausgeführt (Form1) und in OKBottomDlg ausgeführt ...

Zum löschen:

Delphi-Quellcode:
procedure Buttons_loeschen;
var i : integer;
    NewButton: TButton;
begin
  for i := 1 to Buttons_Anzahl do begin
      try
        OKBottomDlg.FindComponent(Buttons_names[i]).Free;
      except
      end;
  end;
end;
Die Proze rufe ich auf, bevor OKBottomDlg geschlossen wird (OKBottomDlg.Close);
:angle2: Auch wenns nich so toll sein sollte ...

Ich weis nich, worans liegt

devnull

Basic-Master 30. Nov 2003 15:10

Re: Objekte löschen
 
versuch den code zum erstellen:
Delphi-Quellcode:
procedure TOkBottomDlg.Neues_Button_erstellen (x, y, h, w : integer; const name : string);
var NewButton: {TSpeed}TButton;
    i : integer;
    str1b : string;
begin
  NewButton := TButton.Create(OkBottomDlg.Bevel1);
  // Eigenschaften des neuen Buttons festlegen:
  with NewButton do begin
    Parent := OkBottomDlg;´
    inc(buttons_anzahl);
    Name := 'NeuesButton' + IntToStr(buttons_anzahl);
    Caption := name;
    Top := y;
    Left := x+25;
    Height := h;
    Width := w;
    @NewButton.OnClick := @MeinEigenesOnClick;
  end;
  if buttons_anzahl <= 20 then buttons_names [buttons_anzahl] := name;
end;
und den zum löschen:
Delphi-Quellcode:
var i:integer;
begin
for i := 0 to button_anzahl do //du hast doch button_anzahl global deklariert oder?
  OkBottomDlg.FindComponent('NeuesButton' + inttostr(i)).Free;
end;
habs jetzt nicht getestet, sollte aber funzen...

devnull 30. Nov 2003 17:48

Re: Objekte löschen
 
Also das geht trotzdem nicht. Ich muss nach dem Löschen ja die button_anzahl := 0; setzen (is übrigens global).
Wenn ich dann aber wieder neue Buttons erstellen möchte und wieder bei button_anzahl := 1; anfange, kommt ein Fehler: NeuesButton1 existiert bereits

devnull 3. Dez 2003 20:19

Re: Objekte löschen
 
Kann mir keiner sagen, wie ich eine Form komplett 'auflösen' kann, d.h. sie in den Zustand zurückversetzen, in welchem sie erstellt wurde ?


:gruebel: devnull

Stanlay Hanks 3. Dez 2003 20:39

Re: Objekte löschen
 
Hi.

Das ganze Form mit

Delphi-Quellcode:
Form.Free;
Die ganzen Komponenten eines Forms, ohne das Form selber mit

Delphi-Quellcode:
Form.DestroyComponents;
Man liest sich, Stanlay :hi:

devnull 3. Dez 2003 20:47

Re: Objekte löschen
 
Ich hab das mit
Delphi-Quellcode:
Form.DestroyComponents;
probiert, wenn ich jetzt aber nun auf die Form Buttons erstellen möchte, kommt ein Fehler ...

devnull

devnull 3. Dez 2003 21:10

Re: Objekte löschen
 
Ahh, :oops: Schande über mich. Natürlich gehts ! Ich hatte vergessen, ein Bevel neu zu erstellen, da ich in diesem Buttons erstelle !!!

:oops: devnull

maximov 4. Dez 2003 13:42

Re: Objekte löschen
 
Hi,

wenn du alles resetten willst und anschliessend dir das formular wieder mit den DFM daten initialisieren willst, dann kannst du folgendes tun:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin  
   RemoveComponent(TComponent(Sender)); // wichtig weil sonst der button gelöscht wird, den man drückt...was dann eine accessViolation auslöst

   DestroyComponents;

   if not InitComponentRes(self.ClassName, Self) then ShowMessage('failed'); // DFM init aus den resourcen

   TComponent(Sender).FreeOnRelease; // wird nicht mehr benötigt -> 'soft kill'
end;
mfg. maximob


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz