Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   SubForm in OnCreate() des MainForm bestücken (https://www.delphipraxis.net/158984-subform-oncreate-des-mainform-bestuecken.html)

Schwedenbitter 10. Mär 2011 09:43

SubForm in OnCreate() des MainForm bestücken
 
Hallo,

ich habe folgendes Problem:
Mein Programm besteht aus einem MainForm, welches in OnCreate() aus einer ini-Datei absolut alle Einstellungen ausliest.
Nun will ich das Programm um ein paar Funktionen erweitern. Für die Einstellungen ist auf dem MainForm aber kein Platz mehr, da ich mehrere TEdit-Felder benötige. Also muss ein SubForm her. Ferner möchte ich die Einstellungen nur extrem ungern irgendwo zwischenspeichern müssen.
Mein Ziel ist es also, gleich - wie bisher - im OnCreate() des MainForm auch die Felder des SubForm mit bestücken zu können.OnShow() fällt aus, weil ich nicht jedesmal die ini-Datei neu einlesen möchte.

Da das SubForm zu diesem Zeitpunkt aber noch nicht existiert, bekommt man mit den üblichen Methoden eine Exception.

Gibt es irgend eine vernünftige Möglichkeit?
Ich habe bedauerlicher Weise nichts gefunden.

Gruß, Alex

Jumpy 10. Mär 2011 10:20

AW: SubForm in OnCreate() des MainForm bestücken
 
Zitat:

Zitat von Schwedenbitter (Beitrag 1087219)
Ferner möchte ich die Einstellungen nur extrem ungern irgendwo zwischenspeichern müssen.


Da wie du selbst sagst Form2 zu dem Zeitpunkt des Lesens nicht existiert, bleibt dir nichts anderes übrig als Zwischenzuspeichern.

Oder, keine Ahnung ob das geht, im OnCreate von Form1 kreierst du auch schon Form2 und weißt die Werte zu. Einblenden tust du dann Form2 halt nur später.

Oder du Arbeitest mit Karteikarten (k.A. wie das richtig heißt).

WM_CLOSE 10. Mär 2011 11:05

AW: SubForm in OnCreate() des MainForm bestücken
 
Die StringList hat eine ganz brauchbare Möglichkeit, Variablen nach dem Key-Value-Prinzip zu speichern.
Das Formular würde ich nur dann erzeugen wenn es notwendig wird.

Schwedenbitter 10. Mär 2011 11:21

AW: SubForm in OnCreate() des MainForm bestücken
 
Danke für die Hinweise.

Zitat:

Zitat von WM_CLOSE (Beitrag 1087240)
Die StringList hat eine ganz brauchbare Möglichkeit, Variablen nach dem Key-Value-Prinzip zu speichern.
Das Formular würde ich nur dann erzeugen wenn es notwendig wird.

Das hört sich interessant an. Könntest Du mir dazu mal einen Link geben oder Stichworte zum Selbersuchen geben? Danke.

Im Grunde liegt das an meiner Faulheit.
Üblicherweise mache in meinen größeren Projekten immer eine Klasse TSetup, in der alle Einstellungen bei OnCreate() geladen und beim OnDestroy() zurück geschrieben werden. Zeige ich ein Einstellungsfenster an, dann schreibe ich vor einem ShowModal() des SubForms alle Werte in die Komponenten rein und sichere sie nach dem Schließen wieder zurück. Vielleicht kann man das auch eleganter machen? Ich wollte mir aber, weil es nur 6 Werte sind, den ganzen Aufwand sparen und diese einfach in den TEdits vorhalten.
Falls es mit TStringList nichts wird, werde ich es wohl wieder so machen müssen. Und ich hatte mich schon so auf die eierlegende Wollmilchsau gefreut :-D

Gruß, Alex

WM_CLOSE 10. Mär 2011 11:44

AW: SubForm in OnCreate() des MainForm bestücken
 
Geht fast genauso wie das ini, aber das 2. Einlesen entfällt:
Delphi-Quellcode:
var
  sl:TStringList;
begin
  sl:=TStringList.Create;
  try
    sl.LoadFromFile('Test.ini');
    sl.Values['FormGroesse']:='444';
    MyForm.Height:=StrToInt(sl.Values['FormGroesse']);
  finally
    sl.Free;
  end;

Schwedenbitter 10. Mär 2011 12:40

AW: SubForm in OnCreate() des MainForm bestücken
 
Wieder etwas dazugelernt!
Ich hätte nich gedacht, dass man mit einer TStringList so etwas machen kann. Dann braucht man TINIFile ja bloß noch, wenn man auf die Einteilung in Sections angewiesen ist und/oder man viele Einstellungen als Bool(ean) oder Zahlen speichert...

Danke. Das macht es einfacher.

Alex

WM_CLOSE 10. Mär 2011 12:43

AW: SubForm in OnCreate() des MainForm bestücken
 
Nicht ganz, TIniFile geht über die WinAPI mit WritePrivateProfileString,... Ich kann mir vorstellen, dass da einige überprüfungen laufen, usw.

alfold 10. Mär 2011 12:46

AW: SubForm in OnCreate() des MainForm bestücken
 
Warum aber das ganze in eine Stringlist?
Wenn schon Ini's dann kann man auch die, Direkt auslesen und speichern :wink:

Gruss alfold

Hansa 10. Mär 2011 12:54

AW: SubForm in OnCreate() des MainForm bestücken
 
Zitat:

Zitat von alfold (Beitrag 1087299)
Warum aber das ganze in eine Stringlist?

Ganz einfach : warum einfach, wenn es auch kompliziert geht ? :lol:

Zitat:

Zitat von WM_CLOSE (Beitrag 1087240)
Die StringList hat eine ganz brauchbare Möglichkeit, Variablen nach dem Key-Value-Prinzip zu speichern.

Und damit eine INI-Datei nachzubilden ? Mit Verlaub gesagt : das ist Schwachsinn. :mrgreen:

alfold 10. Mär 2011 13:01

AW: SubForm in OnCreate() des MainForm bestücken
 
Ich bezog mich hier drauf "ini"
Delphi-Quellcode:
 sl.LoadFromFile('Test.ini');
Um meine Position und grösse des Formulars zu speichern verwende ich auch noch "ini". Was soll also da so verkehrt sein?

Gruss alfold


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 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