Avatar billede stalle Nybegynder
15. februar 2001 - 21:44 Der er 9 kommentarer og
1 løsning

Hente ind i ListBox, fra fil

Jeg skal have lavet således, at jeg kan hente data fra en fil, og ligge NOGET af det ind i en listbox.
I filen ser det således ud:
[SvendBent]
name=Søren Krakamut
email=svend@bent.dk

Jeg vil så have det sådan, at SvendBent bliver vist i listboxen og når jeg så klikker på den, skal det andet komme frem i nogle Edit-felter!

Hvordan gør jeg det!?

BEMÆRK!!
Det skal/må IKKE være database!!
Avatar billede erikjacobsen Ekspert
15. februar 2001 - 22:29 #1
Noget i den her stil? fil.ini skal ligge i samme katalog som .exe filen,
og kan f.eks. indeholde:

[SvendBendt]
name=Søren Krakamut
email=svend@bent.dk
[SørenSørensen]
name=Søren Sørensen
email=soren@bbtt.dk

Husk også lige at sætte eventprocedurerne korrekt op. Du kan evt. få en zip fil
tilsendt.

unit ini1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  inifiles, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  type
    indgang= record
      titel: string;
      navn: string;
      email: string
    end;
  var
    tabel: array [1..100] of indgang;
    antal: integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  t: TIniFile;
  sections: TStringList;
  i: integer;
begin
  t:=TIniFile.Create(\'./fil.ini\');
  sections:=TStringList.Create;
  t.readSections(sections);
  antal:=0;
  for i:=0 to sections.count-1 do
  begin
    inc(antal);
    tabel[antal].titel:=sections.strings[i];
    tabel[antal].navn:=t.readstring(sections.strings[i],\'name\',\'\');
    tabel[antal].email:=t.readstring(sections.strings[i],\'email\',\'\');
    listbox1.Items.add(sections.strings[i]);
  end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
  edit1.text:=tabel[listbox1.itemindex+1].navn;
  edit2.text:=tabel[listbox1.itemindex+1].email;
end;

end.
Avatar billede stalle Nybegynder
15. februar 2001 - 22:40 #2
erikjackobsen -> Der sker intet!
Avatar billede erikjacobsen Ekspert
15. februar 2001 - 22:43 #3
\"Husk også lige at sætte eventprocedurerne korrekt op\"
Avatar billede stalle Nybegynder
15. februar 2001 - 22:44 #4
Det skulle være gjort...:

unit LynLogViewer3;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ComCtrls, ToolWin, ImgList, inifiles;

type
  TForm3 = class(TForm)
    ListBox1: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    Edit2: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Edit4: TEdit;
    Label7: TLabel;
    Edit5: TEdit;
    Label8: TLabel;
    Edit6: TEdit;
    Label9: TLabel;
    Edit7: TEdit;
    Label10: TLabel;
    Edit8: TEdit;
    Label11: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    ImageList1: TImageList;
    ToolBar1: TToolBar;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton6: TToolButton;
    Label12: TLabel;
    Edit3: TEdit;
    procedure ToolButton2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

type
    indgang= record
      titel: string;
      navn: string;
      email: string
    end;
  var
    tabel: array [1..100] of indgang;
    antal: integer;

implementation

{$R *.DFM}

procedure TForm3.ToolButton2Click(Sender: TObject);
begin
Edit1.Text := \'\';
Edit2.Text := \'\';
Edit3.Text := \'\';
Edit4.Text := \'\';
Edit5.Text := \'\';
Edit6.Text := \'\';
Edit7.Text := \'\';
Edit8.Text := \'\';
Memo1.Text := \'\';
Memo2.Text := \'\';
ToolButton2.Enabled := False;
ToolButton3.Enabled := True;
end;

procedure TForm3.FormCreate(Sender: TObject);
var
  t: TIniFile;
  sections: TStringList;
  i: integer;
begin
  t:=TIniFile.Create(\'./fil.ini\');
  sections:=TStringList.Create;
  t.readSections(sections);
  antal:=0;
  for i:=0 to sections.count-1 do
  begin
    inc(antal);
    tabel[antal].titel:=sections.strings[i];
    tabel[antal].navn:=t.readstring(sections.strings[i],\'name\',\'\');
    tabel[antal].email:=t.readstring(sections.strings[i],\'email\',\'\');
    listbox1.Items.add(sections.strings[i]);
  end;

end;

procedure TForm3.ListBox1Click(Sender: TObject);
begin
edit1.text:=tabel[listbox1.itemindex+1].navn;
edit2.text:=tabel[listbox1.itemindex+1].email;
end;

end.

Sådan ser det ud!
Avatar billede erikjacobsen Ekspert
15. februar 2001 - 22:48 #5
Enten er fil.ini tom eller ligger et andet sted. Eller også
bliver dine event-procedurer ikke kaldt. Sæt lige en
  showmessage(\'hej\');
nogle steder, så du kan se om de bliver kaldt når du
forventer det.
Avatar billede stalle Nybegynder
15. februar 2001 - 22:52 #6
Får en :
\"List index out of bounds\" fejl!?
Avatar billede erikjacobsen Ekspert
15. februar 2001 - 22:56 #7
Jo, ja, men det er jo svært at se hvad du har gjort, som jeg ikke har
gjort.
Avatar billede stalle Nybegynder
15. februar 2001 - 23:00 #8
Ja, ved hvad du mener...

Du må da gerne bamse en zip afsted hvis du vil!?

stalle@get2net.dk

:-)
Avatar billede stalle Nybegynder
15. februar 2001 - 23:05 #9
[Warning] LynLogViewer3.pas(97): FOR-Loop variable \'i\' may be undefined after loop

siger den!!
Avatar billede erikjacobsen Ekspert
15. februar 2001 - 23:10 #10
Du får lige hele Delphi-projektet, som jeg har det. Det skal helst køre
umiddelbart. Pak det ud i et separat katalog (Det er delphi 3 men det skal
heller ikke give problemer)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester