![]() |
Objekte löschen
Hi,
ich hab während der Laufzeit eines Programms Buttons auf einem OKBottom-Dialog erstellt. :?: Wie kann ich jetzt, wenn ich den Dialog zu einem späteren Zeitpunkt öffne, die vorh. Buttons löschen ?????????? (am besten gleich während FormCreate des Dialogs) devnull |
Re: Objekte löschen
du kannst das ganze per findcomponent oder mit den components des form machen:so kannste das mit
findcomponent machen:
Delphi-Quellcode:
Self.FindComponent('deinButton').Free;
|
Re: Objekte löschen
Ich weis aber nicht wie diese Buttons heißen und ich wollte wissen, ob man nicht einfach eine komplette Form (hier halt den Dialog) mitsamt Buttons... löachen kann
devnull |
Re: Objekte löschen
Also, ich habs probiert mit
Delphi-Quellcode:
:gruebel: "Self" geht nicht .... Muss man da irgenwas bestimmtes vorher machen ?
Self.FindComponent('deinButton').Free;
devnull |
Re: Objekte löschen
Delphi-Quellcode:
mfG
Form.FindComponent('<name>').Free;
// "Form" ist das Form, wo sich der Button befindet. mirage228 |
Re: Objekte löschen
ich bin jetzt davon ausgegangen, dass der code im form war.. probiers so:
Delphi-Quellcode:
du kannst das ganze aber auch per deinform.components machen...
Form.FindComponent('deinbutton').Free;
|
Re: Objekte löschen
Wie Recht du doch hattest :oops:
|
Re: Objekte löschen
Wenn du als Owner des Buttons das Formular angibst, wird der Button auch aus dem Speicher gehauen, wenn dass Formular gefreet wird!
|
Re: Objekte löschen
Das Problem was jetzt immer noch da is, is dass die Buttons immer noch auf der Form sind ...
|
Re: Objekte löschen
wie erstellst du denn deine buttons?
|
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 01:02 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