![]() |
Form refreshen
Nabend,
hab mal wieder ne dumme Frage und zwar: wie stellt man es an, das ich per buttonklick mein form wieder in die ausgangssituation bringe(keine checkbox angeklickt, nichts in combobox ausgewählt, etc.)? Danke schonmal Mfg Fridolin |
Re: Form refreshen
Das wirst du wohl "von Hand" machen müssen und jedes Steuerelement einzeln so zurücksetzen, wie du's gern hättest.
|
Re: Form refreshen
:wiejetzt:
Da muss es doch ne Möglichkeit geben... |
Re: Form refreshen
Vielleicht durch Freigeben und Neuerzeugen der Form. (Nur sinnvoll bei sehr vielen Komponenten)
|
Re: Form refreshen
Naja geht auch nicht. trotzdem danke.
|
Re: Form refreshen
geht nicht? Ist keine besonders gute Fehlerbeschreibung!
Generell funktioniert das! |
Re: Form refreshen
Zitat:
|
Re: Form refreshen
Hi,
hast eigentlich nur die 2 Möglichkeiten... 1. alle einstellungen irgendwo sichern (evtl. ini mit default-werten) 2. form aus resource neu erzeugen letzteres geht eigentlich fast immer (mit entsprechenden Aufwand). ich habe das auch in meinem DFM-Editor drin, dort hab ich sogar ein dynamisch gefülltes Treeview mit angehängten Klassen, die (außer bei Neuerstellung) korrekt freigegeben werden. hat ne weile gedauert, bis es funktioniert hat, aber es geht :) ich brauchte das um die deutschen Captions aus der Ursprungsresource wieder herzustellen, nachdem die Sprache auf etwas anderes gestellt wurde und damit die Captions überschrieben wurden... man muss lediglich die dynamisch erzeugten Inhalte sichern (z.B. bei memos) bzw. automatische freigebe-routinen per flag daran hindern, ihre Arbeit zu tun (z.b. Treeview.OnDeletion). aufpassen musst du, dass du das form nicht von sich selbst aus neu erzeugst, sondern von einer unabhängigen procedur aufrufst (anderes formular oder evtl. application-objekt (messages...nur eine spontane idee)), da es sonst AV's hagelt... ich mach das über meinen Einstellungsdialog (das mainform), wenn das erstellt wird, wird einfach ein timer gestartet, welcher die anderen forms neu erstellt (nicht gerade die sauberste Variante aber eine bessere ist mir noch nicht eingefallen bzw. fehlt momentan die Zeit alles umzustricken), da im moment des Aufbaus der Einstellungsdialog noch aktiv ist. hier die relevanten Prozeduren:
Delphi-Quellcode:
brauchst also schon ne gute Begründung, warum es nicht geht :P
//damit die angehängten Objekte nicht freigegeben werden
procedure TForm_DFMMain.TreeView1Deletion(Sender: TObject; Node: TTreeNode); var p:integer; s:string; begin if assigned(node.Data) and not Recreate then begin //OutputDebugString(Pchar(node.text+' will be freed')); TDataRec(node.Data).Free; end; if isObject(node) then begin p:=pos(' ',node.text); s:=copy(node.text,p+1,length(node.text)-p); p:=CB_Objects.Items.IndexOf(s); if p>-1 then CB_Objects.Items.Delete(p); end; end; //die funktionen zum neuerstellen der Forms procedure RecreateMainForm; var ms:TMemorystream; sl:TStringlist; tn:TTreenode; begin ms:=TMemoryStream.Create; ms.WriteComponent(Form_DFMMain.TreeView1); ms.position:=0; sl:=TStringlist.create; sl.Assign(Form_DFMMain.CB_Objects.Items); Form_DFMMain.Free; Application.CreateForm(TForm_DFMMain,Form_DFMMain); ms.ReadComponent(Form_DFMMain.TreeView1); tn:=Form_DFMMain.TreeView1.Items.GetFirstNode; if assigned(tn) then tn.Expand(false); Form_DFMMain.CB_Objects.Items.Assign(sl); Form_DFMMain.Show; sl.Free; ms.free; end; procedure RecreateForms; begin Form_DFMOptions.Free; Application.CreateForm(TForm_DFMOptions,Form_DFMOptions); Form_DFMAbout.Free; Application.CreateForm(TForm_DFMAbout,Form_DFMAbout); Form_DFMAdd.Free; Application.CreateForm(TForm_DFMAdd,Form_DFMAdd); Form_DFMChooseRes.Free; Application.CreateForm(TForm_DFMChooseRes,Form_DFMChooseRes); Form_DFMInspector.Free; Application.CreateForm(TForm_DFMInspector,Form_DFMInspector); end; Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 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 by Thomas Breitkreuz