Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fensterpositionen speichern? (https://www.delphipraxis.net/95330-fensterpositionen-speichern.html)

smart 5. Jul 2007 09:26


Fensterpositionen speichern?
 
Guten Morgen!

Wie kann man am einfachsten Fensterpositionen bei sehr vielen Formen speichern?

Gruß
Heike

Luke_83 5. Jul 2007 09:31

Re: Fensterpositionen speichern?
 
Delphi-Quellcode:
Am einfachsten über die Variablen

Form1.Top    -> Abstand vom oberen Desktop Rand
Form1.Left   -> Abstand vom Linken Desktop Rand
Form1.Width  -> Breite der Fenster
Form1.Height -> Höhe der Fenster

Robert Marquardt 5. Jul 2007 09:41

Re: Fensterpositionen speichern?
 
Ich nehme mal an du willst die Position einer form abspeichern, so das sie an der gleichen Position erscheint wenn sie das naechste Mal wieder erstellt wird. Das nennt sich Persistenz von Daten. Die JVCL hat dazu geeignete Komponenten. Ich glaube das Beispiel JvAppStorage ist dafuer zustaendig. die Daten werden wahlweise in die Registry, ein INI-File oder ein XML File gespeichert.

smart 5. Jul 2007 09:44

Re: Fensterpositionen speichern?
 
Zitat:

Zitat von Luke_83
Delphi-Quellcode:
Am einfachsten über die Variablen

Form1.Top    -> Abstand vom oberen Desktop Rand
Form1.Left   -> Abstand vom Linken Desktop Rand
Form1.Width  -> Breite der Fenster
Form1.Height -> Höhe der Fenster

Hi.

Das ist Klar. Ich hatte mich bestimmt unklar ausgedrückt. Ich erzeuge dynamisch viele Formen. (Form1 .. Form20...) Die genaue Anzahl ist unbestimmt. Jetzt möchte ich die Position der Formen speichern. Jetzt ist es sehr umständlich z. B. 20 mal Form1.Top usw. zu coden. Vorallen wenn man das Ende nicht kennt.

Gruß
Heike

Luckie 5. Jul 2007 09:49

Re: Fensterpositionen speichern?
 
Du wirst deine Fenster ja irgendwie verwalten müssen in einem Array oder einer Liste. Diese Verwaltungsstruktur kannst du ja durchgehen. Oder du leitest deine Formulare von einem eignen Fomrluar ab, welches du schon um die gewünschten Eigenschaften und Methoden erweitert hast.

RavenIV 5. Jul 2007 09:52

Re: Fensterpositionen speichern?
 
Bei der RxLibrary sind zwei Komponenten dabei, die das unterstützen.
Beide speichern die Werte in einem ini-File oder in der Registry

TFormPlacement
- Kann die Grösse und Position des Forms speichern

TFormStorage
- Kann die Grösse und Position des Forms speichern
- Kann die Properties der anderen Komponenten auf dem Form speichern

Muetze1 5. Jul 2007 10:15

Re: Fensterpositionen speichern?
 
Ansonsten schau die mal die Eigenschaften des Screen Objektes an. Wenn du die Formulare erstellst, dann sollte Screen.FormCount und Screen.Forms[] diese mit aufführen. Darüber kannst du iterieren und im Zusammenhang mit dem Namen/ClassName die Positionen speichern und wiederherstellen.

Luke_83 5. Jul 2007 10:20

Re: Fensterpositionen speichern?
 
Delphi-Quellcode:

Hallo hab mal folgenden Code geschrieben. Vielleicht hilft er dir ja ein wenig weiter.


procedure TForm1.Forms_spichern;
var Formen:TForm;
    i:Integer;
    F:TextFile;
    Temp:String;
    Max_Forms:Integer;
begin

Max_Forms:=4; //Anzahl der Formen
AssignFile(F,'C:\Forms.txt');
ReWrite(F);

 For i:=1 to Max_Forms do Begin
    Formen:= TForm ( FindComponent ('Form'+InttoStr(i) ));

    Temp:=Inttostr(Formen.Top);   Writeln(F,Temp);
    Temp:=Inttostr(Formen.Left);  Writeln(F,Temp);
    Temp:=Inttostr(Formen.Top);   Writeln(F,Temp);
    Temp:=Inttostr(Formen.Height); Writeln(F,Temp);

  End;
  CloseFile(F);
end;

Muetze1 5. Jul 2007 10:26

Re: Fensterpositionen speichern?
 
FindComponent() findet immer nur Unterelemente des Elementes, dessen FindComponent() aufgerufen wird. Da ich aber kein Element kenne, welches Formulare als Unterkomponenten hat, wüsste ich auch nicht, wie FindComponent() Formulare finden könnte/sollte.

hoika 5. Jul 2007 10:28

Re: Fensterpositionen speichern?
 
Hallo,

ich leite alle meine Forms von einem Basis-Form ab,
dort wird im OnClose die Position gespeichert (bei ModalResult mrOK)
und im FormCreate geladen.

Wie du Formulare ableitest, steht im Handbuch.
Bei deinen "alten" musst du wie folgt vorgehen

- dfm öffnen (nicht die pas)
ich geh davon aus, dass die dfm im TextFormat vorliegt,
sonst halt ändern
- object in inherited ändern
- speichern, Datei schliessen
- pas öffnen
- uses "unit das Basis-Forms"
- TForm1 = class(TForm) ändern in
TForm1 = class(TBaseForm)
- in FormCreate als 1. Zeile ein inherited
- bei OnClose-Benutzung im jeweiligen Form muss auch noch ein inherited rein

Die Benutzung eines Basisforms hat auch noch andere Vorteile,
z.B. Vista-spezifische Sachen einbauen (siehe die letzten Entwickler-Zeitungen),
bestimmte wiederverwendbare Routinen reinpacken usw.

Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:12 Uhr.
Seite 1 von 2  1 2      

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