| Autor |
Beitrag |
tha_blaze
      
Beiträge: 29
xp
D7
|
Verfasst: Di 18.01.05 10:15
morgen leute
ich hab ein problem mit meiner timer routine. ich soll ein prog machen was dateien asu einem ordner liest (das hab ich schon geschafft) jetzt soll das mithilfe eines timer erfolgen denn alle 5 sek. soll er die dateien auslesen aber irgendwie klappt das nich...
hier is mal ein wenig source:
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:
| var Form1: TForm1; FFileMan: TButton; LBFiles: TListBox; SR: TSearchRec; zaehler:Integer; ls: TStringList; ini: TINIFile; i: integer; txt: TStrings;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure ListFileDir(Path: string; FileList: TStrings); begin end;
procedure TForm1.FormCreate(Sender: TObject); begin timer1.Enabled:=true; zaehler:=1; ini := TIniFile.Create('deine.ini'); end;
procedure TForm1.Timer1Timer(Sender: TObject); begin if zaehler=5 then begin close; end else begin zaehler:= zaehler+1; ListFileDir('c:\medlinq\easy\*.*', LBFiles.Items); end; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ini.Free; end;
end. |
die showmessage sollte mir bloß zeigen ob er überhaupt den block abarbeitet...
bis zur showmessage kommt er auch aber er liest die dateien nich aus.
am ende sollen die dateien noch in einer .ini abgespeichert werden die dann wieder gelöscht werden soll wenn der timer wieder anspringt
thx
_________________ stehen ein einbeiniger und ein blinder auf der brücke sagt der einbeinige zum blinden "ich trete dir gleich in hintern", darauf der blinde "das will ich sehen"!
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 18.01.05 10:18
Das kann daran liegen, dass deine Prozedur ListFileDir keinen Source hat. 
|
|
tha_blaze 
      
Beiträge: 29
xp
D7
|
Verfasst: Di 18.01.05 10:30
hi jasocul...
meinst du das mit copy und paste...
ich weiss aber nich was da rein soll und das lief ja schonma das prog auch ohne copy und paste...
danke das du dich wieder meiner problemem annimmst 
_________________ stehen ein einbeiniger und ein blinder auf der brücke sagt der einbeinige zum blinden "ich trete dir gleich in hintern", darauf der blinde "das will ich sehen"!
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 18.01.05 10:36
Mit dem Copy&Paste-Fehler hat das nichts zu tun.
Du rufst in deinem Timer die Prozedur ListFileDir auf.
Die Prozedur existiert auch, aber da steht nicht drin, was die Prozedur denn eigentlich machen soll.
Der Inhalt scheint dir bei deinem Datenverlust, von dem du mir erzählt hast, verloren gegangen zu sein. Den Ablauf musst du neu programmieren.
|
|
tha_blaze 
      
Beiträge: 29
xp
D7
|
Verfasst: Di 18.01.05 10:49
na das is klasse das zwischen dem datenverlust und dem tag an dem ich weitermachen wollte die trennung von meiner freundin und unzählige heineken und jack d. standen schon schwer genug sich überhaupt noch an das wochenende zu errinnern...
ja ja die weiber... aber zurück zum wesentlichen ich hab noch ein wenig source bevor das prog abgeklappt is aber alles was ich versucht hab endet in ner debugger exception...
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure ListFileDir(Path: string; FileList: TStrings); begin end; |
tja das sind meine verzweifelten versuche... 
_________________ stehen ein einbeiniger und ein blinder auf der brücke sagt der einbeinige zum blinden "ich trete dir gleich in hintern", darauf der blinde "das will ich sehen"!
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 18.01.05 11:08
Du musst noch "Form1." davor schreiben. Aber ohne Anführungszeichen.
Dann kennt er allerdings deine Variablen "ls" und "txt" noch nicht.
|
|
tha_blaze 
      
Beiträge: 29
xp
D7
|
Verfasst: Di 18.01.05 11:15
also...
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure ListFileDir(Path: string; FileList: TStrings); begin Form1.LBFiles.Items.Add(ini.ReadString('ListBox', ls[i], '')); Form1.txt.Add('LBFiles'); end; |
aber txt is doch global deklariert oder nich bin ich jetzt bescheuert geworden!?
_________________ stehen ein einbeiniger und ein blinder auf der brücke sagt der einbeinige zum blinden "ich trete dir gleich in hintern", darauf der blinde "das will ich sehen"!
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 18.01.05 11:16
Sorry, habe ich übersehen.
Du wirst aber noch Probleme mit ls und txt bekommen, da diese noch nicht erzeugt sind, wenn du sie benutzt.
Außerdem ist i noch nicht initialisiert, hat also einen unbestimmten Wert.
Und durch die globale Deklaration von txt darf da dann doch kein Form1. vorstehen.
|
|
tha_blaze 
      
Beiträge: 29
xp
D7
|
Verfasst: Di 18.01.05 11:32
???
obwohl txt und ls global deklariert sind...das versteh ich nich aber wie bzw. wo bzw. wann müssen die dann deklariert werden??? was wäre wenn man txt und ls lokal deklariert das müsst edoch dann irgendwie so aussehen oder nich:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure ListFileDir(Path: string; FileList: TStrings); var ls: TStringList; var txt: TStrings; begin LBFiles.Items.Add(ini.ReadString('ListBox', ls[i], '')); txt.Add('LBFiles'); end; |
fals das falsch is ich lass mich gerne eines besseren belehren.
ps: hab mir deine hp angekuckt sieht schon nich schlecht aus der zähler sieht gut aus 
_________________ stehen ein einbeiniger und ein blinder auf der brücke sagt der einbeinige zum blinden "ich trete dir gleich in hintern", darauf der blinde "das will ich sehen"!
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 18.01.05 11:48
Ändere deinen Source mal so (Achtung, ist nur ein Ausschnitt):
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:
| type TForm1 = class(TForm) LBFiles: TListBox; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ListFileDir(Path: string; FileList: TStrings); private Zaehler : Integer; ini : TIniFile; ls: TStringList; txt: TStrings; public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ListFileDir(Path: string; FileList: TStrings); var i: integer; begin LBFiles.Items.Add(ini.ReadString('ListBox', ls[i], '')); txt.Add('LBFiles'); end; |
das ist objekt-orientiert.
Trotzdem musst ls und txt irgendwo erzeugen. Das sind Objekte, genau wie ini.
i muss natürlich auch irgendwie vorbelegt sein. Ich weiß aber noch nicht genau, was du damit vor hast.
Wegen der hp: Der Zähler ist optimistisch eingestellt. Ansonsten habe ich mir grafische Schnörkel verkniffen. Es geht ja auch um Delphi.
|
|
tha_blaze 
      
Beiträge: 29
xp
D7
|
Verfasst: Di 18.01.05 12:04
okay jetzt ist der moment gekommen an dem ich nich mehr weiter weiss
wie kann ich die dann als objekte erzeugen???
das mit Delphi-Quelltext
is glaube ich bloß ein überbleibsel was ich nich entfernt hab zumindest hab ich keine andere erklärung dafür...
_________________ stehen ein einbeiniger und ein blinder auf der brücke sagt der einbeinige zum blinden "ich trete dir gleich in hintern", darauf der blinde "das will ich sehen"!
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 18.01.05 12:11
Im Prinzip geht das genauso, wie mit mit jedem anderen Objekt auch (z.B. dein ini).
Das i wird in deinem Source zur Zeit noch benutzt: ls[i].
Wann du deine Objekte erzeugst (Create) und wieder frei gibst (Free), hängt davon ab, wie du sie benutzen willst.
Mach dir doch erstmal einen Plan für die Routine und dann überlegst du dir, wie du welche Objekte verwenden willst/musst.
|
|
tha_blaze 
      
Beiträge: 29
xp
D7
|
Verfasst: Di 18.01.05 12:19
ok ich hzab mir ma kurz nen kopf gemacht und das is dabei rausgekommen (inch drauf achten wo das steht) is das so richtig geschrieben um die zu erzeugen...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure ListFileDir(Path: string; FileList: TStrings); i: integer; begin LBFiles := TListBox.Create(); txt := TStrings.Create(); LBFiles.Items.Add(ini.ReadString('ListBox', ls[i], '')); txt.Add('LBFiles'); end; |
nur mit dem
Delphi-Quelltext
weiss ich noch nix anuzfangen.
_________________ stehen ein einbeiniger und ein blinder auf der brücke sagt der einbeinige zum blinden "ich trete dir gleich in hintern", darauf der blinde "das will ich sehen"!
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 18.01.05 12:22
Stimmt so.
Vor i: Integer muss noch Var stehen.
|
|
tha_blaze 
      
Beiträge: 29
xp
D7
|
Verfasst: Di 18.01.05 12:25
dann sagt er das parameter fehlen :
Delphi-Quelltext 1: 2:
| LBFiles := TListBox.Create(); txt := TStrings.Create(); |
aber ich weis nich was da rein soll bei ini musste ja nur der name der datei rein die erstellt werden soll.
_________________ stehen ein einbeiniger und ein blinder auf der brücke sagt der einbeinige zum blinden "ich trete dir gleich in hintern", darauf der blinde "das will ich sehen"!
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Di 18.01.05 12:32
Normalerweise muss in den Klammern self
|
|
tha_blaze 
      
Beiträge: 29
xp
D7
|
Verfasst: Di 18.01.05 12:53
ich hab ma unseren admin gefragt...
der hat das daraus gemacht...
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, FileCtrl, inifiles, ExtCtrls;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Timer1: TTimer; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button2Click(Sender: TObject);
private
public end;
var Form1: TForm1; FFileMan: TButton; LBFiles: TListBox; SR: TSearchRec; ini:Tinifile; zaehler: integer; s: TStrings;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin close; end;
procedure ListFileDir(Path: string; FileList: TStrings); var SR: TSearchRec; begin if FindFirst(Path + '*.*', 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 TForm1.FormCreate(Sender: TObject); begin zaehler:=1; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin if zaehler=5 then begin close; end else begin zaehler:= zaehler+1; s:=TStringlist.Create; ListFileDir('c:\medlinq\easy\*.*',s); memo1.Clear; memo1.Lines.AddStrings(s); s.Free; memo1.Lines.SaveToFile('test.log'); end; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ini.Free; end;
procedure TForm1.Button2Click(Sender: TObject); begin timer1.Enabled:=true; end;
end. |
läuft sogar jetzt soll das prog 5mal hintereinander die dateinamen in die test.log schreiben damit man vergleichen kann ob sich was geändert hat. 
_________________ stehen ein einbeiniger und ein blinder auf der brücke sagt der einbeinige zum blinden "ich trete dir gleich in hintern", darauf der blinde "das will ich sehen"!
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Di 18.01.05 12:55
Sieht doch gut aus.
Hauptsache er hat dir auch die Sachen erklärt, die du nich konntest.
Du sollst ja schließlich was dabei lernen. 
|
|