Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Formular Position speichern (https://www.delphipraxis.net/186030-formular-position-speichern.html)

Sugar 28. Jul 2015 19:26

Formular Position speichern
 
Hallo,

ich arbeite daran die Positionen der Formulre meiner Anwendung zu speichern und auch wieder zu lesen.

Im Prinzip ist mein Problem:

Ich speichere den Namen (und weitere Daten) des Formulares in einer Tabelle. Das Feld in dem der Name des Formulares steht ist ein VarChar, also String.

Nun muss ich beim Öffnn der Formulare dieses String in ein TForm (o.ä.) umwandeln um dann Width, Top etc zuzuweisen. Ich scheitere aber daran, den ausgelesenen String in ein TForm umzuwandeln.


Kann mir jemand helfen?

Sir Rufo 28. Jul 2015 20:24

AW: Formular Position speichern
 
Und warum lässt du die Form die Werte nicht selber speichern und laden?

Der Form sollte ihr Name doch bekannt sein

Luckie 28. Jul 2015 21:49

AW: Formular Position speichern
 
Stichwort: Ini-Datei, Registry. Im OnClose speichern und beim OnCreate wieder lesen.

hoika 28. Jul 2015 22:13

AW: Formular Position speichern
 
Sugar,
ein bisschen mehr Infos bitte.

ÄHeiko

Perlsau 28. Jul 2015 22:51

AW: Formular Position speichern
 
Zitat:

Zitat von Sugar (Beitrag 1310061)
Ich speichere den Namen (und weitere Daten) des Formulares in einer Tabelle. Das Feld in dem der Name des Formulares steht ist ein VarChar, also String. Nun muss ich beim Öffnn der Formulare dieses String in ein TForm (o.ä.) umwandeln um dann Width, Top etc zuzuweisen. Ich scheitere aber daran, den ausgelesenen String in ein TForm umzuwandeln. Kann mir jemand helfen?

Mir ist ebenfalls nicht so recht klar, was dein eigentliches Problem ist. Meinst du wirklich das Property Name, wenn du davon schreibst, den Namen des Formulars speichern und lesen zu wollen? Oder meinst du – was weitaus wahrscheinlicher wäre – das Property Caption, das den Text enthält, der in der Titelleiste eines Formulars angezeigt wird? Wie oben schon festgestellt wurde, ist der Name eines Formulars beim dessen Erzeugung bereits bekannt. Andernfalls könntest du das Formular gar nicht erst erzeugen. Irgendwo hast du da offenbar was vollkommen falsch verstanden, aber was das sein könnte, entzieht sich meiner Kenntnis.

hathor 28. Jul 2015 23:03

AW: Formular Position speichern
 
http://www.torry.net/pages.php?id=96

Sugar 29. Jul 2015 05:44

AW: Formular Position speichern
 
Hallo Forum,

habe ich mich wirklich so unverständlich ausgedrückt? Entschuldigung.

Also, mal weiter ausgeholt:

Ich erweitere eine ältere interne Anwendung über die unsere User sich schon immer beschwert haben, weil die Fensterpositionen nicht gespeichert werden und man nicht die Möglichkeit hat sich auf den Bildschirmen zurecht gerückten Formulare, dessen Größe und Position zu "merken". Hintergrund: Kommt ein Anruf in der Zentrale an zeigt das Hauptformular den Stammsatz des Anrufers an, soweit erkennbar.

Der User muss dann weitere Fenster "manuell" öffnen um bspw. Historie, Rechnungen etc. im Blick zu haben.

Ich möchte nun, dass der User sich seine drei, vier Fenster öffnen und auf den Bildschirmen platzieren kann UND diese "Ansicht" als Szenario speichern. Öffnet der User dann das Programm, lese ich in der Datenbank was er als Szenario gespeichert hat und öffne und platziere diese Fenster. So die Idee...

Ich dachte mir nun, ich speichere in einer Tabelle den Usernamen, den Namen der Form (Ja, die Eigenschaft NAME),Top, Height, Width, left und ein bit ob das Fenster beim Start sichtbar sein soll.

Was ich nun nicht weiß wie man es umsetzt ist: Ich hole mir den Namen der Form als String, nur wie wandele ich diesen String um, so dass ich damit die Form mit diesem Namen anzeigen kann?

Kurzes "Nebenproblem" noch dazu: Gibt es eine Möglichkeit alle offenen Formulare der Anwendung zu ermitteln?

Also, nochmal Sorry für die vielleicht verwirrende Anfrage. Ich hoffe es ist nun klarer was ich vorhabe.

Danke für die bisherige Hilfe

Gruß
Sugar

[edit]ps. @hathor: Dein Link ist nicht verfügbar

[edit2]:

Zu dem Ermitteln der offenen Formulare habe ich etwas gefunden:

Delphi-Quellcode:
For i:=0 to Screen.FormCount-1 do
   begin
    Screen.Forms[i].Name
Wenn in Name etwas steht ist es eine geöffnete Form meiner App.

bcvs 29. Jul 2015 07:33

AW: Formular Position speichern
 
Zitat:

Zitat von Sugar (Beitrag 1310077)
Was ich nun nicht weiß wie man es umsetzt ist: Ich hole mir den Namen der Form als String, nur wie wandele ich diesen String um, so dass ich damit die Form mit diesem Namen anzeigen kann?

Schreib dir halt eine Funktion, die abhängig vom Namen die richtige Form erzeugt und anzeigt. z.B. ganz einfach so

Delphi-Quellcode:
if FormName='MyForm' then
begin
  MyForm:=TMyForm.Create(Application);
  MyForm.Show;
end;

Sugar 29. Jul 2015 07:58

AW: Formular Position speichern
 
@bcvs

Ich dachte halt es geht eleganter. So muss ich bei jeder neu hinzukommenden Form auch die Abfrage anpassen... das wollte ich umgehen

Lemmy 29. Jul 2015 08:19

AW: Formular Position speichern
 
Zitat:

Zitat von Sugar (Beitrag 1310081)
@bcvs

Ich dachte halt es geht eleganter. So muss ich bei jeder neu hinzukommenden Form auch die Abfrage anpassen... das wollte ich umgehen

dann nimm eine TClassLIst (aus contnrs) und fülle die beim Programmstart mit allen relevanten Formularen

Delphi-Quellcode:
Liste := TClassList;
Liste.Add(TFormXYZ);
-...

wenn Du nun ein bestimmtes Formular suchst:

Delphi-Quellcode:
function FOrmErzeugen(AFormularName: String): TForm;
var
  FormClass: TFormClass;
  idxForm: Integer;
begin
  FormClass := nil;
  for idxForm := 0 to Liste.Count -1 do
  begin
    if Liste.Item[idxForm].ClassName = AFormularName then
      FormClass := Liste.Item[idxForm]
  end;
  if Assigned(FOrmClass) then
    result := FormClass.Create(Application)
  else
    ....

Und wenn dir das ständige Durchlaufen der ClassList zu langsam ist, dann sortiere die Liste nach den Namen, dann kannst Du schneller suchen....

Nachtrag: Wenn Du ein aktuelleres Delphi hast, kannst Du hier auch mit einer generischen Liste arbeiten....


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr.
Seite 1 von 4  1 23     Letzte »    

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