| Autor |
Beitrag |
Ralle23
      
Beiträge: 17
|
Verfasst: 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
      
Beiträge: 304
Vista
Delphi 2006 Prof., Lazarus
|
Verfasst: 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.
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:
|
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); 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; TempList.Free; end;
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.
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.
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 
      
Beiträge: 17
|
Verfasst: 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
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 tommie-lie: Code- durch Delphi-Tags ersetzt
|
|
Hansi@OMG
      
Beiträge: 304
Vista
Delphi 2006 Prof., Lazarus
|
Verfasst: 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 
      
Beiträge: 17
|
Verfasst: Mo 09.06.03 12:47
Jepp,
nur leider meckert er mir schon den Part mit clear an
Grüße
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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:
Delphi-Quelltext
Außerdem würde ich dir empfehlen die Hilfeseite von der ListBox Komponente mal anzuschauen.
Gruß
Tino
|
|
Ralle23 
      
Beiträge: 17
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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:
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
Gruß
Tino
|
|
Ralle23 
      
Beiträge: 17
|
Verfasst: 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 
      
Beiträge: 17
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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 
      
Beiträge: 17
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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:
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 
      
Beiträge: 17
|
Verfasst: 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
      
Beiträge: 647
WinXP + fbsd
Delphi 5 Prof
|
Verfasst: Fr 13.06.03 10:23
DAnn mahc in FormCreate
Delphi-Quelltext 1: 2:
| Listbox1.ItemIndex := 0; Listbox1.Click(Sender); |
_________________ .: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
|
|
Ralle23 
      
Beiträge: 17
|
Verfasst: Fr 13.06.03 10:38
Hi,
leider bekommee ich da die Meldung undefenierter Bezeichner
Grüße
|
|
Ralle23 
      
Beiträge: 17
|
Verfasst: Fr 13.06.03 10:42
Ok, Fehler gefunden.
Dank euch allen erstmal
Grüße
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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:
Delphi-Quelltext 1: 2:
| ListBox1.ItemIndex := 0; ListBox1Click (Self); |
Gruß
Tino
|
|
Ralle23 
      
Beiträge: 17
|
Verfasst: 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
|
|