Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Ini Datei Problem (https://www.delphipraxis.net/167045-ini-datei-problem.html)

S4SH1981 10. Mär 2012 20:43

Ini Datei Problem
 
Hallo zusammen,

habe folgendes Problem.
Im folgendem Code Speicher ich aus einer Listbox per Drag'n Drop Einträge und sortiere diese nach Tagen.
Das funktioniert soweit wunderbar.
Die Ini Datei sieht wie folgt aus.

Dateiname ist 2012-10-1.kw
[Montag]
Kunde=Edit1 Edit2.kd
Edit1 Edit22.kd
abc def.kd

Die gespeicherte KW ist nun KW 10. Ich möchte jetzt die Daten aus der Ini Datei für KW 10 auslesen und in den Listboxen anzeigen. Leider funktioniert das mal rein garnicht.
Ich bekomme es nur hin, dass ich entweder das Montag, oder den ersten Eintrag mit Kunde=Edit1. Edit2.kd in die Listbox auslesen lassen kann. Nie bekomme ich aber den gesamten Text unter der Sektion Montag in die Listbox geschrieben.

Es ist sicherlich ein einfaches Problem. Ich komme allerdings nicht drauf.
Wäre schön, wenn mir dazu je,and einen Lösungsansatz geben könnte.

Schonmal Danke

Anbei der Code:
Delphi-Quellcode:
unit KalMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, Spin, Grids, ExtCtrls, SRCal, Buttons, Inifiles;

type
  TMainForm = class(TForm)
    Label2: TLabel;
    Label3: TLabel;
    LblDatum: TLabel;
    LblFeiertag: TLabel;
    LblSternzeichen: TLabel;
    LblTagImJahr: TLabel;
    LblWocheImJahr: TLabel;
    LblMonat: TLabel;
    LblJahr: TLabel;
    SpinMonat: TSpinButton;
    SpinJahr: TSpinButton;
    Label5: TLabel;
    Kalender: TSRCalendar;
    LblSeason: TLabel;
    ListBox1: TListBox;
    Label1: TLabel;
    Label4: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    ListBox2: TListBox;
    ListBox3: TListBox;
    ListBox4: TListBox;
    ListBox5: TListBox;
    ListBox6: TListBox;
    ListBox7: TListBox;
    ListBox8: TListBox;
    ListBox9: TListBox;
    ListBox10: TListBox;
    ListBox11: TListBox;
    ListBox12: TListBox;
    ListBox13: TListBox;
    ListBox14: TListBox;
    ListBox15: TListBox;
    ListBox16: TListBox;
    ListBox17: TListBox;
    ListBox18: TListBox;
    ListBox19: TListBox;
    ListBox20: TListBox;
    ListBox21: TListBox;
    ListBox22: TListBox;
    Button1: TButton;
    Button2: TButton;
    procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure KalenderChange(Sender: TObject);
    procedure SpinMonatDownClick(Sender: TObject);
    procedure SpinMonatUpClick(Sender: TObject);
    procedure SpinJahrDownClick(Sender: TObject);
    procedure SpinJahrUpClick(Sender: TObject);
    procedure KalenderDblClick(Sender: TObject);
    procedure KalenderMonthChange(Sender: TObject);
    procedure KalenderYearChange(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  MainForm: TMainForm;
  ini: Tinifile;

implementation

{$R *.DFM}

procedure ListFileDir(Path: string; FileList: TStrings);
var
  SR: TSearchRec;
begin
  if FindFirst(Path + '*.kd', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr <> faDirectory) then
      begin
        FileList.Add(SR.Name);
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

procedure TMainForm.SpinMonatDownClick(Sender: TObject);
begin
  Kalender.PrevMonth;
end;

procedure TMainForm.SpinMonatUpClick(Sender: TObject);
begin
  Kalender.NextMonth;
end;

procedure TMainForm.SpinJahrDownClick(Sender: TObject);
begin
  Kalender.PrevYear;
end;

procedure TMainForm.SpinJahrUpClick(Sender: TObject);
begin
  Kalender.NextYear;
end;

procedure TMainForm.KalenderChange(Sender: TObject);
begin
  listbox2.clear;
  listbox3.clear;
  listbox4.clear;
  listbox5.clear;
  listbox6.clear;
  listbox7.clear;
  listbox8.clear;

  LblDatum.Caption:=FormatDateTime('dddd, dd. mmmm yyyy',Kalender.Date);
  LblTagImJahr.Caption:=IntToStr(Kalender.DayOfYear)+'. Tag im Jahr';
  LblWocheImJahr.Caption:=IntToStr(Kalender.WeekOfYear)+'. Woche im Jahr';

  Label7.Caption:=inttostr(kalender.weekofyear);
  Label8.Caption:=inttostr(kalender.weekofyear-1);
  label9.caption:=inttostr(kalender.weekofyear+1);

  if Kalender.HolidayNr<0 then
    LblFeiertag.Font.Color:=clNavy
  else
    LblFeiertag.Font.Color:=clRed;
  LblFeiertag.Caption:=Kalender.Holiday;
  LblSeason.Caption:=Jahreszeit[ord(Kalender.Season)];
  LblSternzeichen.Caption:='Sternzeichen: '+Sternzeichen[ord(Kalender.ZodiacSign)];
end;

procedure TMainForm.KalenderDblClick(Sender: TObject);
begin
  Kalender.Marked[Kalender.Day]:=not Kalender.Marked[Kalender.Day];
end;

procedure TMainForm.KalenderMonthChange(Sender: TObject);
begin
  LblMonat.Caption:=LongMonthNames[Kalender.Month];
end;

procedure TMainForm.KalenderYearChange(Sender: TObject);
begin
  LblJahr.Caption:=IntToStr(Kalender.Year);
end;



procedure TMainForm.FormCreate(Sender: TObject);
var i : byte;
begin
  ListFileDir('C:\FPV\KUNDEN\', ListBox1.Items);
  for i:=1 to 7 do
  Kalender.Date:=Date;
  KalenderChange(nil);
  KalenderMonthChange(nil);
  KalenderYearChange(nil);

  ListBox1.OnDragOver := ListBox1DragOver;
  ListBox2.OnDragOver := ListBox1DragOver;
  ListBox3.OnDragOver := ListBox1DragOver;
  ListBox4.OnDragOver := ListBox1DragOver;
  ListBox5.OnDragOver := ListBox1DragOver;
  ListBox6.OnDragOver := ListBox1DragOver;
  ListBox7.OnDragOver := ListBox1DragOver;
  ListBox8.OnDragOver := ListBox1DragOver;

  ListBox1.OnDragDrop := ListBox1DragDrop;
  ListBox2.OnDragDrop := ListBox1DragDrop;
  ListBox3.OnDragDrop := ListBox1DragDrop;
  ListBox4.OnDragDrop := ListBox1DragDrop;
  ListBox5.OnDragDrop := ListBox1DragDrop;
  ListBox6.OnDragDrop := ListBox1DragDrop;
  ListBox7.OnDragDrop := ListBox1DragDrop;
  ListBox8.OnDragDrop := ListBox1DragDrop;

  Listbox1.Dragmode := dmAutomatic;
  Listbox2.Dragmode := dmAutomatic;
  Listbox3.Dragmode := dmAutomatic;
  Listbox4.Dragmode := dmAutomatic;
  Listbox5.Dragmode := dmAutomatic;
  Listbox6.Dragmode := dmAutomatic;
  Listbox7.Dragmode := dmAutomatic;
  Listbox8.Dragmode := dmAutomatic;

  ListBox1.MultiSelect := true;
  ListBox2.MultiSelect := true;
  ListBox3.MultiSelect := true;
  ListBox4.MultiSelect := true;
  ListBox5.MultiSelect := true;
  ListBox6.MultiSelect := true;
  ListBox7.MultiSelect := true;
  ListBox8.MultiSelect := true;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
ini:=TIniFile.create('C:\FPV\KW\' + lbljahr.Caption + '-'+ label7.caption+'-1.kw');
ini.WriteString('Montag','Kunde', '' +listbox2.Items.Text);
ini:=TIniFile.create('C:\FPV\KW\' + lbljahr.Caption + '-'+ label7.caption+'-2.kw');
ini.WriteString('Dienstag','Kunde', '' +listbox3.Items.Text);
ini:=TIniFile.create('C:\FPV\KW\' + lbljahr.Caption + '-'+ label7.caption+'-3.kw');
ini.WriteString('Mittwoch','Kunde', '' +listbox4.Items.Text);
ini:=TIniFile.create('C:\FPV\KW\' + lbljahr.Caption + '-'+ label7.caption+'-4.kw');
ini.WriteString('Donnerstag','Kunde', '' +listbox5.Items.Text);
ini:=TIniFile.create('C:\FPV\KW\' + lbljahr.Caption + '-'+ label7.caption+'-5.kw');
ini.WriteString('Freitag','Kunde', '' +listbox6.Items.Text);
ini:=TIniFile.create('C:\FPV\KW\' + lbljahr.Caption + '-'+ label7.caption+'-6.kw');
ini.WriteString('Samstag','Kunde', '' +listbox7.Items.Text);
ini:=TIniFile.create('C:\FPV\KW\' + lbljahr.Caption + '-'+ label7.caption+'-7.kw');
ini.WriteString('Sonntag','Kunde', '' +listbox8.Items.Text);
end;

procedure TMainForm.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  accept := (Source is TListBox) and (sender<>Source);
end;

procedure TMainForm.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var i,i2 : integer;
    lbSource,lbSender : TListBox;
begin
  lbSource := Source as TListBox;
  lbSender := Sender as TListbox;
  //Drag and drop der gleichen LB verhindern
  if lbSource <> lbSender then
    begin
      //items kopieren
      //du löschst items, deswegen müßte die for Schleife rückwärts zählen, dann würden die itmes aber spiegelverkehrt hinzugefügt
      //ich nehm da lieber eine while schleife, eine for-schleife macht dir das leben schwerer (finde ich)
      i:=0;
      while i<=lbSource.count-1 do //hier muß Source stehen, du willst von source nach Sender!
        begin
          if lbSource.Selected [i] then
            begin
              //Variante 1 = hinzufügen
              //lbSender.Items.Add(lbSource.Items[i]);

              //Variante 2 = Einfügen
              i2:=lbSender.ItemAtPos(point(x,y),false);
              lbSender.Items.insert(i2,lbSource.Items[i]);

              //Einträge in sourceListbox löschen
              lbSource.Items.Delete (i);
              continue; //inc(i) "überspringen" und mit gleichem item (wegen Löschung) weiterarbeiten
            end;
          inc(i);
        end;
    end;
      listbox1.clear;
      ListFileDir('C:\FPV\KUNDEN\', ListBox1.Items);
end;


end.

Popov 10. Mär 2012 21:02

AW: Ini Datei Problem
 
Ob es das ist weiß ich nicht, aber auf die Schnelle siehe ich hier einen Fehler:

Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
begin
ini:=TIniFile.create('C:\FPV\KW\' + lbljahr.Caption + '-'+ label7.caption+'-1.kw');
ini.WriteString('Montag','Kunde', '' +listbox2.Items.Text);
Nach meiner Kenntnis gehört dahinter zuerst ein
Delphi-Quellcode:
ini.Free;
Wobei ich sagen muß, dass man bei dir sehr vieles optimieren kann, da du achtfach machst, was einfach ginge.

Popov 10. Mär 2012 21:14

AW: Ini Datei Problem
 
Zitat:

Zitat von Popov (Beitrag 1155880)
Ob es das ist weiß ich nicht, aber auf die Schnelle siehe ich hier einen Fehler:

Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
begin
ini:=TIniFile.create('C:\FPV\KW\' + lbljahr.Caption + '-'+ label7.caption+'-1.kw');
ini.WriteString('Montag','Kunde', '' +listbox2.Items.Text);
Nach meiner Kenntnis gehört dahinter zuerst ein
Delphi-Quellcode:
ini.Free;
Wobei ich sagen muß, dass man bei dir sehr vieles optimieren kann, da du achtfach machst, was einfach ginge.

//Edit:

Hier vielleicht eine Anregung man du etwas kürzen könntest (ungeprüft):

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
  procedure ListBoxX(ListBox: TListBox);
  begin
    ListBox.OnDragOver := ListBox1DragOver;
    ListBox.OnDragDrop := ListBox1DragDrop;
    Listbox.Dragmode := dmAutomatic;
    ListBox.MultiSelect := true;
  end;
var i : byte;
begin
  ListFileDir('C:\FPV\KUNDEN\', ListBox1.Items);
  for i:=1 to 7 do
  Kalender.Date:=Date;
  KalenderChange(nil);
  KalenderMonthChange(nil);
  KalenderYearChange(nil);

  ListBoxX(ListBox1);
  ...
end;

procedure TMainForm.Button1Click(Sender: TObject);
   procedure WriteIniStr(Path, Section, Ident, Value: String);
   var
     ini: TIniFile;
   begin
     ini:=TIniFile.create(Path);
     ini.WriteString(Section, Ident, Value);
     ini.Free;
   end
begin
  WriteIniStr('C:\FPV\KW\' + lbljahr.Caption + '-'+ label7.caption+'-1.kw',
    'Montag','Kunde', '' +listbox2.Items.Text);
  ...
end;

himitsu 10. Mär 2012 21:16

AW: Ini Datei Problem
 
Zitat:

Zitat von S4SH1981 (Beitrag 1155874)
Ich möchte jetzt die Daten aus der Ini Datei für KW 10 auslesen und in den Listboxen anzeigen. Leider funktioniert das mal rein garnicht.

Joar, das ist auch vollkommen richtig und sehr verständlich.
Ich kann nämlich keinerlei Code finden, über welchen die Datei ausgelesen wird.

Und zu deiner INI-Variable:
http://www.delphipraxis.net/167043-w...ablen-hin.html
Stichwort: Lokal

weiterer Tipp: Resourcenschutzblock

Helmi 10. Mär 2012 21:26

AW: Ini Datei Problem
 
Hallo,

warum schreibst du eigentlich 7 mal das Date auf Kalender?

Delphi-Quellcode:
 for i:=1 to 7 do
   Kalender.Date:=Date;

Sir Rufo 10. Mär 2012 21:31

AW: Ini Datei Problem
 
Das grundsätzliche Problem liegt darin, dass du keine korrekte Ini-Datei erzeugst.
Code:
[Section]
Ident=Value
Alles in der Zeile hinter dem Gleichheitszeichen ist der Value-Wert.
Du schreibst aber einen Zeilenumbruch in den Wert und der sorgt dafür, dass ein Teil eben nicht mehr in der Zeile steht und somit aus der Wertung fällt ;)


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