AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form refreshen

Ein Thema von Fridolin · begonnen am 15. Apr 2007 · letzter Beitrag vom 16. Apr 2007
Antwort Antwort
Fridolin

Registriert seit: 8. Jan 2007
71 Beiträge
 
Delphi 2006 Architect
 
#1

Form refreshen

  Alt 15. Apr 2007, 21:36
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
  Mit Zitat antworten Zitat
Benutzerbild von mr47
mr47

Registriert seit: 6. Dez 2004
Ort: Stuttgart
644 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Form refreshen

  Alt 15. Apr 2007, 21:38
Das wirst du wohl "von Hand" machen müssen und jedes Steuerelement einzeln so zurücksetzen, wie du's gern hättest.
  Mit Zitat antworten Zitat
Fridolin

Registriert seit: 8. Jan 2007
71 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Form refreshen

  Alt 15. Apr 2007, 21:40


Da muss es doch ne Möglichkeit geben...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Form refreshen

  Alt 15. Apr 2007, 21:41
Vielleicht durch Freigeben und Neuerzeugen der Form. (Nur sinnvoll bei sehr vielen Komponenten)
Markus Kinzler
  Mit Zitat antworten Zitat
Fridolin

Registriert seit: 8. Jan 2007
71 Beiträge
 
Delphi 2006 Architect
 
#5

Re: Form refreshen

  Alt 15. Apr 2007, 21:57
Naja geht auch nicht. trotzdem danke.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Form refreshen

  Alt 15. Apr 2007, 22:04
geht nicht? Ist keine besonders gute Fehlerbeschreibung!
Generell funktioniert das!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Form refreshen

  Alt 15. Apr 2007, 22:05
Zitat:
Naja geht auch nicht.
Warum nicht?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#8

Re: Form refreshen

  Alt 16. Apr 2007, 02:23
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:
//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;
brauchst also schon ne gute Begründung, warum es nicht geht

Gruß Frank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz