Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ComboBox per Hand füllen (https://www.delphipraxis.net/115030-combobox-per-hand-fuellen.html)

DeddyH 5. Jun 2008 07:20

Re: ComboBox per Hand füllen
 
Die "Ini-Schleife" könnte z.B. so aussehen:
Delphi-Quellcode:
for i := 0 to ComboBox.Items.Count - 1 do
  Ini.WriteString('Items',IntToStr(i),ComboBox.Items[i]);
Die Ini hätte dann beispielsweise folgendes Aussehen:
Code:
[Items]
0=UT
1=MESZ
2=MEZ

lore 5. Jun 2008 19:44

Re: ComboBox per Hand füllen
 
Hi DeddyH,
soweit klappts jetzt.
Delphi-Quellcode:
procedure TfrmMain.cbox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var ini : TiniFile;
     i: Integer;
begin
 with TComboBox(Sender) do
    if Key = VK_RETURN then
      if Items.IndexOf(Text) < 0 then
        begin
        ItemIndex := Items.Add(Text);
          try     {das ist die Schleife zum Erzeugen des Eintrags in der INI }
           ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'config.ini');
           for I := 0 to cbox1.Items.Count - 1 do
            ini.WriteString('TimeZone',intToStr(i),cbox1.Items[i]);
          finally
           ini.Free;
        end;
 end;
end;
Das Auslesen der INI muss ins formCreate oder?

Würde das dann so aussehen?

Delphi-Quellcode:
try
  ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'config.ini');
  for I := 0 to cbox1.Items.Count - 1 do
   cbox1.Items[i] := ini.readString('TimeZone',intToStr(i),cbox1.Items[i]); // Ist diese Zeile so richtig?? 
finally
 ini.Free;
end;
Für heute mach ich erstmal Schluss und werde morgen dann das einlesen mal üben ;-)


Danke,
Karsten__________________________________________________ _______________________
www.deepSkyObserver.de

DeddyH 5. Jun 2008 20:08

Re: ComboBox per Hand füllen
 
Jo, das macht Sinn.

lore 6. Jun 2008 10:13

Re: ComboBox per Hand füllen
 
Hi DeddyH,
ich dachte auch das das Sinn hat, funzt aber leider nicht.
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
var ini : TiniFile;
       I: integer;
begin
   try
   ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'config.ini');
   for I := 0 to cbox1.Items.Count - 1 do
   begin
    cbox1.Items[i] := ini.ReadString('TimeZone',intToStr(i),cbox1.Items[i]); //combobox mit den Werten aus der INI befüllen
    showMessage(intToStr(i));
   end;
  finally
   ini.Free;
  end;
end;
Ich hab's mit F7 durchgesteppt und festgestellt, dass nur die Werte gelesen werden, die schon vorher beim Objekt unter Items >> Strings im Stringlisteneditor eingetragen waren. In der INI stehen aber 10 Stück, also wird die INI nicht ausgelesen. Ist die Schleife falsch oder wie kann ich das rausfinden? Weiß gerade mal wieder nicht weiter.. :gruebel:

Gruß,
Karsten

tomsel 6. Jun 2008 10:20

Re: ComboBox per Hand füllen
 
Das liegt an:

Delphi-Quellcode:
for I := 0 to cbox1.Items.Count - 1 do
du liest hier nur so viele Einträge aus der ini, wie eh schon in der Combobox drin sind. Was du brauchst, ist die Anzahl aller Werte in der INI.

DeddyH 6. Jun 2008 10:24

Re: ComboBox per Hand füllen
 
Versuch es mal mit
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
var ini : TiniFile;
begin
  ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+'config.ini');
  try
    Ini.ReadSectionValues('TimeZone',cbox1.Items);
  finally
    ini.Free;
  end;
end;

messie 6. Jun 2008 10:25

Re: ComboBox per Hand füllen
 
Nein der Fehler passiert beim Abspeichern. Es werden nur Werte in die ini geschrieben, die nachträglich eingefügt werden. Um alle so wie geplant einlesen zu können, müssen alle Werte in die ini geschrieben werden.

Grüße, Messie

lore 6. Jun 2008 10:38

Re: ComboBox per Hand füllen
 
HI deddyH,

jetzt habe ich den lustigen Effekt, dass beim Abspeichern alles doppelt angzeigt wird und einmal mehr in die INI gespeichert wird. Wenn ichs drei mal aufrufe siehts wie folgt aus:

[TimeZone]
0=0=0=UT
1=1=1=MESZ
2=2=2=MEZ
3=3=3=myTimeZone1
4=4=4=myTimeZone2
5=5=5=myTimeZone3
6=6=6=myTimeZone4
7=7=7=myTimeZone5
8=8=8=myTimeZone6
9=9=9=myTimeZone7

Hi Messi, ich verstehe nicht so ganz was du meinst, aber habe nach diesem Ergebnis so eine dunkle Ahnung was du jetzt meinen könntest.

DeddyH 6. Jun 2008 10:43

Re: ComboBox per Hand füllen
 
*Oops*, dann bleibt wohl nur, ReadSectionValues auf eine temporäre Stringliste anzuwenden und dort je Zeile alles bis zum Gleichheitszeichen rauszulöschen. Anschließend den Items zuweisen. Wenn jemand einen besseren Vorschlag hat, immer her damit, mir gefällt das so nämlich auch nicht, hab aber heute irgendwie ein Brett vor dem Kopf.

taaktaak 6. Jun 2008 11:18

Re: ComboBox per Hand füllen
 
Moin, Moin,
na, das hieße an den Symptomen herumzudoktern. Wie messie schon bemerkte: Der Fehler entsteht ja beim Speichern. Ist der Code aus #12 noch aktuell? Idee: Vor dem Speichern zunächst die Section komplett löschen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:08 Uhr.
Seite 2 von 4     12 34      

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