![]() |
Re: Objekte löschen
Delphi-Quellcode:
Die Proze wird aber aus einer anderen Unit ausgeführt (Form1) und in OKBottomDlg ausgeführt ...
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; Zum löschen:
Delphi-Quellcode:
Die Proze rufe ich auf, bevor OKBottomDlg geschlossen wird (OKBottomDlg.Close);
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; :angle2: Auch wenns nich so toll sein sollte ... Ich weis nich, worans liegt devnull |
Re: Objekte löschen
versuch den code zum erstellen:
Delphi-Quellcode:
und den zum löschen:
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;
Delphi-Quellcode:
habs jetzt nicht getestet, sollte aber funzen...
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; |
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 |
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 |
Re: Objekte löschen
Hi.
Das ganze Form mit
Delphi-Quellcode:
Die ganzen Komponenten eines Forms, ohne das Form selber mit
Form.Free;
Delphi-Quellcode:
Man liest sich, Stanlay :hi:
Form.DestroyComponents;
|
Re: Objekte löschen
Ich hab das mit
Delphi-Quellcode:
probiert, wenn ich jetzt aber nun auf die Form Buttons erstellen möchte, kommt ein Fehler ...
Form.DestroyComponents;
devnull |
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 |
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:
mfg. maximob
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:08 Uhr. |
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