Autor Beitrag
Ralle23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mo 09.06.03 00:04 
Hi leute,

Ich möchte in einer ListBox Datein (*.dat ) aus einem Ordner anzeigen lassen ohne Endung, wenn ich dann auf diese klicke sollen in den edit Fenster die entsprechenden Daten aus der Datei angezeigt werden. Ich benutze ein Typisierten Datein System.

Wie kann ich das am besten machen da ich mich mit den ListBoxen noch nicht so beschäftigt haben und nicht das richtige bisher finden konnte.

Beste Grüße
Hansi@OMG
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: Mo 09.06.03 09:19 
Zum zeigen der Dateien, mit bestimmter Extension ohne Pfad und Extension in einer Listbox gibt es folgende Möglichkeit, musst du dir nur modifizieren.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
{
  Alle Dateien mit bestimmter Erweiterung
  ohne Pfad und Extension in ListBox laden
}


unit loadfiles;

interface

uses
  classes, sysutils, Windows, ShellAPI;


function ListFilesRecursive(Path, Mask: String; ShowPath: Boolean): TStringList;
function ExtractPureFilename(Name: String): String;
function StringCountInStr(SubStr, Str: String): Integer;
function SubPositionByIndex(Str, SubStr: String; Index: Integer): Integer;
function StrLeft(Str: String; Count: Integer): String;


implementation



function ListFilesRecursive(Path, Mask: String; ShowPath: Boolean): TStringList;
var SR: TSearchRec;
    Erg, I: Integer;
    RelDir, TempStr : String;
    TempList: TStringList;
begin
   IncludeTrailingPathDelimiter(Path);
   RelDir := ExtractFilePath(Mask);
   Mask := ExtractFileName(Mask);
   result:= TStringList.Create;
   TempList:= TStringList.Create;
   Erg := FindFirst(Path+RelDir+'*.*', faDirectory, SR);
   while Erg = 0 do
   begin
      if (SR.attr and faDirectory) <> 0 then
         if SR.Name[1] <> '.' then begin
            TempList.Assign(ListFilesRecursive(Path, RelDir+SR.Name+'\'+Mask, ShowPath));
            for I:= 0 to TempList.Count - 1 do begin
               TempStr:= TempList[I];
               if ShowPath and not (TempStr[2] = ':') then TempStr:= Path + TempStr;
               result.Add(TempList[I]);
            end;
         end;
      Erg := FindNext(SR);
   end;
   Erg := FindFirst(Path+RelDir+Mask, $27, SR);
   {Das Attribut $27 bedeutet
   alle echten Dateien}

   while Erg = 0 do
   begin
      if not ShowPath then
         result.Add(RelDir+SR.Name)
      else
      result.Add(Path+RelDir+SR.Name);
      Erg := FindNext(SR);
   end;
  // FindClose(SR);
   TempList.Free;
end;



//Extension abschneiden
function ExtractPureFilename(Name: String): String;
var
   Dots, DotPos: Integer;
begin
   Dots:= StringCountInStr('.', Name);
   DotPos:= SubPositionByIndex(Name, '.', Dots);
   result:= StrLeft(Name, DotPos - 1);
end;


function StringCountInStr(SubStr, Str: String): Integer;
var
   StrLn, SubLn, I: Integer;
   TempStr: String;
begin
   StrLn:= StrLen(PChar(Str));
   SubLn:= StrLen(PChar(SubStr));
   TempStr:= Str;
   result:= 0;
   for I:= 0 to StrLn - 1 do begin
      TempStr:= Copy(Str, I + 1, SubLn);
      if TempStr = SubStr then Inc(result);
   end;
end;


function SubPositionByIndex(Str, SubStr: String; Index: Integer): Integer;
var
   StrLn, SubLn, Lock, I: Integer;
   TempStr: String;
begin
   StrLn:= StrLen(PChar(Str));
   SubLn:= StrLen(PChar(SubStr));
   result:= 0;
   Lock:= 0;
   for I:= 0 to StrLn - 1 do begin
      TempStr:= Copy(Str, I + 1, SubLn);
      if TempStr = SubStr then Inc(Lock);
      if Lock = Index then begin
         result:= I + 1;
         break;
      end;
   end;
end;


function StrLeft(Str: String; Count: Integer): String;
begin
   result:= Copy(Str, 1, Count);
end;

end.
//------------------------U N I T ------- E N D E-------------------------------

//Aufruf mit

uses
  loadfiles;
  

procedure TForm1.ladetipps(Sender: TObject);
var
  path : string;
  stl  : TSTringList;
  i    : integer;
begin
  ListBox1.Clear;
  path := extractfilepath(paramstr(0))+'themen\'+combobox1.text+'\';
  stl := TStringList.Create;
  TRY
    STL.Assign(ListFilesRecursive(Path, '*.thm', false));

    for i := 0 to stl.Count - 1 do
    begin
      listbox1.Items.Add(ExtractPureFilename(stl.Strings[i]));
      listbox1.itemindex := listbox1.itemindex+1;
    end;
  FINALLY
   stl.free;
  end;
end;


Mit dem auslesen der Datei, das hab ich dir unten geschrieben, da würd ich dir empfehlen ein Memofeld zu nehmen, denn ein Editfeld hat nicht die Funktion .loadfromfile() . Du musst außerdem, den Pfad, zu den *.dat Dateien in einer globalen Variablen speichern, damit du diesen später wieder verwenden kannst.


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.ListBox1Click(Sender: TObject);
var i : integer;
begin
i:=listbox1.ItemIndex; \\ Nummer des angeklickten Items
memo1.Lines.LoadFromFile(Pfadvariable+listbox1.Items[i]); \\Datei in Memofeld auslesen
end;


Ich hoffe, das löst dein Problem. :!:

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
Ralle23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mo 09.06.03 09:34 
HI,

leider muß ich edit Felder benutzen. Ich erkläremal wo für ich das brauche.

Ich schreibe im moment eine Verwaltungssoftware für Züchter, wenn man auf den Button neu klickt wird ein Fenster geönffnet in dem man den Tiernamen angibt, nach dem ok wird eine leere name.dat erstellt.
Da die Angaben zu jedem Tiert nicht ganz so viel sind ( ca. 15 Felder ) habe ich mich für Typisierten Datei entschieden.

Ok, der Name wird dann in der Liste angezeigt und wenn ich auf diesen klicke möchte ich rechts wo die Editfelder dann die zugehörigen Daten eintragen.

Kann ich nicht von der ListBox den Dateinamen nicht nach hier übergeben lassen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.FormCreate(Sender: TObject);
begin
  AssignFile(datei,'liste.dat');
  if FileExists('liste.dat') then ReSet(datei)
  else ReWrite(datei);

end;


So das er hier z.b. immer die aktuell angeklickte Datei einfügt, dann sollten auch die EditFelder kein Problem sein.

Grüße Ralle


Moderiert von user profile icontommie-lie: Code- durch Delphi-Tags ersetzt
Hansi@OMG
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 304

Vista
Delphi 2006 Prof., Lazarus
BeitragVerfasst: Mo 09.06.03 12:03 
Sorry, da kann ich dir nicht weiterhelfen, da musst du selbst ausprobieren.

_________________
Who doesn't know the Micrsoft developer "Mahatma Fatal Error"?
Ralle23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mo 09.06.03 12:47 
Jepp,

nur leider meckert er mir schon den Part mit clear an :-(

Grüße
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 10.06.03 09:24 
Ralle23 hat folgendes geschrieben:
nur leider meckert er mir schon den Part mit clear an :-(

Dann versuch es mal so:
ausblenden Delphi-Quelltext
1:
Listbox1.Items.Clear;					

Außerdem würde ich dir empfehlen die Hilfeseite von der ListBox Komponente mal anzuschauen. :wink:

Gruß
Tino
Ralle23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mi 11.06.03 14:57 
Hallo.

ein weiteres Problem, wenn ich in der Liste noch nicht geklickt habe , wird keine Datei übergeben, wie kann ich es machen das direkt bei start die erste Datei aus der Liste gewählt wird.

Grüße

P.S. Sorry wenn ich nerve, aber es kann nur besser werden ;-)
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 11.06.03 15:05 
Hallo!

Ralle23 hat folgendes geschrieben:
ein weiteres Problem

Ist das vorherige Problem gelöst?

Ralle23 hat folgendes geschrieben:
wie kann ich es machen das direkt bei start die erste Datei aus der Liste gewählt wird.

so:
ausblenden Delphi-Quelltext
1:
ListBox1.ItemIndex := 0;					


Ralle23 hat folgendes geschrieben:
P.S. Sorry wenn ich nerve, aber es kann nur besser werden ;-)

Du nervst nicht. Aber schau dir mal die Hilfe zu der Komponente Listbox an. Auch die möglichen Eigenschaften und Methoden... erst dann kann es nur besser werden :-D

Gruß
Tino
Ralle23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mi 11.06.03 15:55 
Hi Tino,

jepp hab das Problem von vorher gelöscht, habe schon oft in die Hilfe geschaut. Nur leider bin ich wohl Blind, oder suche nach den Falschen Begriffen.

Grüße

P.S. Habe das ListBox1.ItemIndex := 0; versucht einzubauen beim aktivate Part nur leider geht es nicht, keine Ahnung mehr was ich sollen mach
Ralle23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 12.06.03 18:17 
Hi,

kann mir bitte nicht einer Helfen, ich bekomme das nicht hin das er direkt die erste wählt so das er direkt einen Übergabe an den Record macht.

Grüße Ralle
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 13.06.03 08:00 
Ralle23 hat folgendes geschrieben:
ich bekomme das nicht hin das er direkt die erste wählt

Das geht wie oben schon geschrieben mit der Eigenschaft ItemIndex. Was genau funktioniert denn dabei nicht. Wo setzt du die Eigenschaft?
Ralle23 hat folgendes geschrieben:
so das er direkt einen Übergabe an den Record macht.

Das verstehe ich jetzt nicht!

Gruß
Tino
Ralle23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Fr 13.06.03 08:07 
Hi ich habe es im FormCreat nach dem die Listbox geschrieben worden ist.
Es passiert leider gar nichts.

Er soll wenn das Programm gestart wird direkt die erste Datei auswählen, so das der Nutzer nicht erst eine anklicken muß wenn das Programm gestartet hat.

Nur wie schon geschrieben es passiert nichts.

Grüße Ralle
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 13.06.03 10:08 
Also ich habe ein Form erstellt und eine ListBox drauf gepackt. Die ListBox enthält mehrere Items. Im FormCreate-Event habe ich folgendes eingefügt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ListBox1.ItemIndex := 0;
end;

Bei mir ist beim anzeigen der Form das erste Item der ListBox markiert. Also das funktioniert auf jedenfall.

Hinweis: Das OnClick-Event der ListBox wird natürlich nicht beim manuellen setzen von ItemIndex ausgeführt.

Gruß
Tino
Ralle23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Fr 13.06.03 10:19 
Hi,

ja die erste Datei ist bei mir auch makiert, nur es wird in die edit Fenster nicht die Daten übernommen, dafür muß ich erst drauf klicken und das wollte ich nicht. Es sollen direkt die Daten angezeigt werden

Grüße
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Fr 13.06.03 10:23 
DAnn mahc in FormCreate

ausblenden Delphi-Quelltext
1:
2:
Listbox1.ItemIndex := 0;
Listbox1.Click(Sender); // oder Listbox1OnClick(Sender);

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Ralle23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Fr 13.06.03 10:38 
Hi,

leider bekommee ich da die Meldung undefenierter Bezeichner :-(

Grüße
Ralle23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Fr 13.06.03 10:42 
Ok, Fehler gefunden.
Dank euch allen erstmal

Grüße
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 13.06.03 10:47 
Hallo!

Ralle23 hat folgendes geschrieben:
ja die erste Datei ist bei mir auch makiert,

Jetzt plötzlich doch? Wie komme ich darauf das Du geschrieben hast das das nicht so war ?!?!?!?
Ralle23 hat folgendes geschrieben:
[...]wie kann ich es machen das direkt bei start die erste Datei aus der Liste gewählt wird.[...]

[...]Habe das ListBox1.ItemIndex := 0; versucht einzubauen beim aktivate Part nur leider geht es nicht, keine Ahnung mehr was ich sollen mach

[...]ich bekomme das nicht hin das er direkt die erste wählt

Na ja, auch egal. :?

Ralle23 hat folgendes geschrieben:
dafür muß ich erst drauf klicken und das wollte ich nicht

Ich hab doch oben geschrieben das beim manuellen setzten von ItemIndex das OnClick-Event nicht ausgelöst wird. Du musst die On-Click Procedure nach dem setzen selbst aufrufen:
ausblenden Delphi-Quelltext
1:
2:
ListBox1.ItemIndex := 0;
ListBox1Click (Self);

Gruß
Tino
Ralle23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Fr 13.06.03 10:55 
Na markiert war Sie schon, hab mich da wohl etwas schlecht ausgedrückt.
Hat halt nur die Datei nicht geladen, das meinte ich die ganze Zeit.

Grüße Ralle

P.S. Und nun weiter im meinem Chaos coden