[geklärt] Formular zurücksetzten

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Simor
Beiträge: 11
Registriert: Do 19. Sep 2013, 15:49

[geklärt] Formular zurücksetzten

Beitrag von Simor »

Ich möchte gerne 8ausgelöst durch einen If-Befehl in einem Timer) ein Form1 auf den Anfanszustand zurücksetzten (so wie es beim Start der Anwendung war), also alle Variablen zurücksetzten, alle Elemente mit den alten Eigenschaften versehen. Wie geht das?
Danke schon mal :wink:
Simor
Zuletzt geändert von Simor am Do 14. Nov 2013, 17:21, insgesamt 1-mal geändert.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Formular zurücksetzten

Beitrag von Michl »

Einfach alle geänderten Variablen/Properties wieder auf die Anfangswerte stellen (initialisieren).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Simor
Beiträge: 11
Registriert: Do 19. Sep 2013, 15:49

Re: Formular zurücksetzten

Beitrag von Simor »

Was wäre denn der Anfangswert für ein TShape (s[1].shape)?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Formular zurücksetzten

Beitrag von Michl »

Da ich bisher noch kein TShape verwendet habe, habe ich mir einfach mal eins auf eine Form platziert und nachgeschaut. Im Objektinspektor wurde die Eigenschaft Shape1.Shape als "stRectangle" erstellt. Das kann bei Dir anders sein, je nachdem, was Du dort eingestellt hast. Ich verstehe das Problem nicht wirklich?!

Um alle Anfangswerte zu speichern und wieder zu laden, könnte man wohl noch TXMLPropStorage oder TIniPropStorage verwenden. Ich initialisiere alles, was in den Projekten angepasst werden kann, jedoch immer per Hand (lade die Werte dazu auch teilweise aus einer Datei oder Datenbank).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Simor
Beiträge: 11
Registriert: Do 19. Sep 2013, 15:49

Re: Formular zurücksetzten

Beitrag von Simor »

Damit wird dann ein
Ich versuchs mal genauer:

Code: Alles auswählen

  var     
Form1: TForm1;
g: integer;
s: array[1..289] of tPoint;
shape: array[1..289] of tshape;
 
procedure ...
begin
if (...) then
  begin
       shape[g]:=tShape.create(self);  // shape erstellen
        shape[g].parent:=self;      //zu Form1 zuweisen
        shape[g].top := s[1].y;     // ab jetzt: Shape genau definieren...
        shape[g].left := s[1].x;
        shape[g].height := 16;
        shape[g].width := 16;
        shape[g].shape := stRoundRect;
  end;
end;
Damit werden dann in Form1 Shapes erstellt, mir fehlt aber bis jetzt die Möglichkeit diese wieder zu "löschen".

Code: Alles auswählen

shape[g].Visible := false;
{oder}
shape[g].left := -16;
wäre zwar möglich aber eigentlich nicht wirklich schön...

wp_xyz
Beiträge: 5142
Registriert: Fr 8. Apr 2011, 09:01

Re: Formular zurücksetzten

Beitrag von wp_xyz »

Einfach mit Free. Es ist ganz wichtig, nach dem Löschen auf nil zu setzen, sonst will später der Owner, also das Formular, die Shapes selbst nochmals löschen, aber scheitern, weil ja schon gelöscht ist. Und mit nil prüfst du auch, ob ein(e) Shape schon gelöscht ist. Also:

Code: Alles auswählen

 
procedure TForm1.DeleteShape(AIndex: Integer);
begin
  if shape[AIndex] <> nil then begin
    shape[AIndex].Free;
    shape[Aindex] := nil;  // beides kann man auch mit FreeAndNil(shape[AIndex]) zusammenfassen
  end;
end;
 
Zuletzt geändert von wp_xyz am Do 14. Nov 2013, 17:02, insgesamt 1-mal geändert.

Simor
Beiträge: 11
Registriert: Do 19. Sep 2013, 15:49

Re: Formular zurücksetzten

Beitrag von Simor »

Ah, Danke!

Antworten