Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ComboBox + edits speichern (https://www.delphipraxis.net/95519-combobox-edits-speichern.html)

PiQ 8. Jul 2007 07:37


ComboBox + edits speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich will meine ComboBox einträge sowie die edit´s speichern. hätte auch kein problem damit wenn es zwei dateien sind. ich weiß das es combobox1.items.savetofile gibt, aber hier werden ja nicht die werte gespeichert die ausgewählt waren. Also es soll auch gleich der wert ausgewählt werden, wenn ich die datei lade, den ich letztes mal ausgewählt hatte.
In dem programm wo ich es brauche, habe ich ca. 20 comboboxen und 80 edit´s.
Ich hoffe ihr könnt mir helfen! wenn es geht ein wenig ausführlich *g*
Danke!
(anhang: eine vereinfachte version für das problem - z.B. soll bei Schule: Gymnasium ausgewählt sein wenn ich es lade.)

bitsetter 8. Jul 2007 08:04

Re: ComboBox + edits speichern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

eine Möglichkeit wäre mit Hilfe von WriteComponent und ReadComponent diese ganzen Komponenten zu speichern.
Dafür habe ich mal das onShow und das onClose Event des Formulars benutzt.
Normalerweise speichert man die Einstellungen ja im AppData Verzeichnis. Aber das soll ja nur eine Demo sein.
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  FileStream: TFileStream;
  Pfad: AnsiString;
  loop: integer;
begin
  Pfad:= extractfilepath(Application.ExeName)+ 'Einstellungen.txt';
  if FileExists(Pfad) then
  begin
    FileStream:= TFileStream.Create(Pfad, fmOpenRead);
    try
      for loop := 0 to pred(ComponentCount) do
        if (Components[loop] is TCombobox) or (Components[loop] is TEdit) then
          FileStream.ReadComponent(Components[loop]);
    finally
      FileStream.Free;
    end;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  FileStream: TFileStream;
  loop: integer;
begin
  FileStream:= TFileStream.Create(extractfilepath(Application.ExeName)+ 'Einstellungen.txt', fmCreate);
  try
    for loop := 0 to pred(ComponentCount) do
      if (Components[loop] is TCombobox) or (Components[loop] is TEdit) then
        FileStream.WriteComponent(Components[loop]);
  finally
    FileStream.Free;
  end;
end;

Matze 8. Jul 2007 08:11

Re: ComboBox + edits speichern
 
Hi,

du könntest es mittels Delphi-Referenz durchsuchenFindComponent und Ini-Dateien lösen.
In einer Schleife gehst du alle ComboBoxen durch und speicherst den ItemIndex in der Ini mittels Delphi-Referenz durchsuchenWriteInteger. Diese liest du beim Programmstart aus und weist diesen den ComboBoxen wieder mittels Schleife und FindComponent zu. Hierfür müssen die Namen der Komponenten aus dem gleichen String mit fortlaufender Nummer bestehen (Bsp: ComboBox1, ComboBox2, ...).

Hier nur ein Ansatz für's Speichern/Auslesen der ItemIndizes:

Delphi-Quellcode:
// Speichern
Ini := TIniFile.Create(...);
try
  for i := 1 to Anzahl_der_ComboBoxen do
    Ini.WriteString('Vorauswahl', 'CB' + IntToStr(i),
    (FindComponent('ComboBox' + IntToStr(i) as TComboBox).ItemIndex);
finally
  FreeAndNil(Ini);
end;

// Auslesen
Ini := TIniFile.Create(...);
try
  for i := 1 to Anzahl_der_ComboBoxen do
    (FindComponent('ComboBox' + IntToStr(i) as TComboBox).ItemIndex :=
    Ini.ReadInteger('Vorauswahl', 'CB' + IntToStr(i), -1); // Bei -1 ist nichts vorausgewählt
finally
  FreeAndNil(Ini);
end;
Mit den Edits geht das analog (alles ungetestet).

PiQ 11. Jul 2007 13:53

Re: ComboBox + edits speichern
 
Das hat ja echt genial funktioniert. Danke wollt ich noch sagen :P!


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