Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - [Frage]Dateipfad im Edit Fenster
m1sc - Do 09.05.13 16:13
Titel: [Frage]Dateipfad im Edit Fenster
Hey, ich bräuchte hilfe und zwar brauche ich ein Tag für folgende Situation:
Ich müsste wissen wie es möglich ist durch klicken auf ein Edit solch ein Auswahl Fenster zu öffnen mitdem man auf seinem PC eine Datei anklicken kann (.txt Datei in dem fall) welches dadurch später benutzt werden kann da in dieser txt eine suche stattfinden soll von einem bestimmten wort / zeilen.
[ausgewählter\Datei\Pfad] so soll das dann aussehen wenn man die datei ausgewählt hat. (So ein Fenster wie man von "Speichern unter" kennt)
Gerd Kayser - Do 09.05.13 17:22
Normalerweise nimmt man dafür aber nicht das Klick-Ereignis eines Edit-Feldes, sondern das Klick-Ereignis bei einem Button.
Plaziere eine OpenDialog-Komponente auf Deinem Formular (ist unter dem Reiter "Dialoge" zu finden). Konfiguriere es im Objektinspektor (z. B. Filter, InitialDir usw.).
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TMainform.Button2Click(Sender: TObject); begin if OpenDialog1.Execute then Edit1.Text := OpenDialog1.FileName; end; |
m1sc - Do 09.05.13 17:46
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Hm, also das mit dem Button geht aber ich wollte das eig durch das edit feld machen, habe bei manchen tools gesehen dass das geht.
Naja ein button geht auch wenns nicht gehen sollte in delphi.
Allerdings schreibt dieses tag jetz ja nur den datei pfad/name in das edit feld, es soll aber gleichzeitig auch zu einem string werden damit ich den Inhalt
der txt mit einer if abfrage auf ein bestimmtes wort checken kann.
Gerd Kayser - Do 09.05.13 17:55
m1sc hat folgendes geschrieben : |
Allerdings schreibt dieses tag jetz ja nur den datei pfad/name in das edit feld, es soll aber gleichzeitig auch zu einem string werden damit ich den Inhalt der txt mit einer if abfrage auf ein bestimmtes wort checken kann. |
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TMainform.Edit1Click(Sender: TObject); begin if OpenDialog1.Execute then Edit1.Text := 'Ausgewählter Pfad: ' + ExtractFilePath(OpenDialog1.FileName); end; |
IhopeonlyReader - Do 09.05.13 18:41
m1sc hat folgendes geschrieben : |
auch wenns nicht gehen sollte in delphi |
eigentlich geht alles mit Delphi, wenn auch manchmal sehr umständlich.
ich habe dir zwar bereits geholfen, aber dar dir einige Grundlagen fehlen hier nochmal ein paar Grundlegende Infos:
Jede Komponente besitzt Ereignisse.
Ereignisse sind sozusagen Proceduren die auf etwas ausgelöst werden.
Beispiele:
OnClick: Wird auf Klick auf die Komponente ausgelöst
OnChange (bei TEdit vorhanden): Wenn der Inhalt vom Edit geändert wird, wird es ausgelöst
OnKeyDown: Wenn eine Taste gedrückt wird, wird sie ausgelöst
die Ereignisse besitzten Parameter wie Sender vom Typ TObject
Sender ist das Object, dass die Procedure ausgelöst hat, wenn du auf das Edit klickst ist das Object das Edit !
Da es auch von einem Label ausgelöst worden könnte, ist es vom Typ TObject und nicht vom Typ TEdit !
deshalb, falls du mit dem Sender arbeiten willst musst du es erst "casten" (also umwandeln bzw sagen was es ist)
bsp.
Bei nichtsichbaren Kompoenten wie dem Timer wird das Ereignis vom Timer selbst alle X-Sekunden ausgelöst.. X = Timer.Interval
Ich denke, dass ist erstmal das was du zu "Ereignissen" wissen solltest...
Nachtrag: Den Inhalt der *.txt-Datei in einen String einlesen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var f: Textfile; Ergebnis: string; ZeilenInhalt: String; begin Ergebnis := ''; Assignfile(f, Dateiname); try reset (f); while not eof(f) do begin readln(f,ZeilenInhalt); Ergebnis := Ergebnis + ZeilenInhalt; end; finally Closefile(f); end; end; |
Nachtrag 2: Auf ein bestimmtes Wort checken:
Falls du nur wissen möchtest, ob es vorkommt, dann kannst du folgendes machen
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:
| if pos(Wort, DateiInhalt)>0 then else length(Wort)+pos(Wort, DateiInhalt)-1; if pos(Wort, DateiInhalt)>0 then begin end else begin end;
if pos(' '+Wort+' ', DateiInhalt)>0 then begin end else begin end; if pos(' '+Wort, Dateinhalt)>0 then if pos(' '+Wort, DateiInhalt)+length(' '+Wort)=length(DateiInhalt) then begin
end else if pos(' '+Wort+' ', DateiInhalt) then begin end; |
Bedenke: vor einem ELSE kein Simikolon (;)
IhopeonlyReader - Do 09.05.13 19:08
Oben fehlt jetzt noch das Beispiel, wenn der String direkt am Anfang stehen würde, aber ich denke das kriegst du auch hin, oder?
m1sc - Do 09.05.13 19:31
Ich danke für die hilfe, allerding denke ich ich bin noch nich weit genug für so ein programm.
Ich würde es sicher hin bekommen dank der tipps mit etwas ausprobieren usw aber ich denke ich sollte erstmal dich grundkenntnisse haben bzw. ich versteh ca 80% von dem hier genanntem 20% allerdings versteh ich nich so richtig.
Danke trotzdem für eure bemühungen.
mfg
m1sc - Do 09.05.13 19:55
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Ich verstehe die deklarationen der tags die ich kenne, nur sind da noch zu viele tags die ich nicht kenne :)
Ich habe bisher noch nie externe dateien mit in den code aufgenommen wie eben eine txt bzw auch nie extern was durch das programm gespeichert.
Von daher ist mir das noch alles fremd.
zb.: Assignfile(f, Dateiname);
ich weiß weder was das erste tag macht noch was die variable f in der klammer macht und was dateiname sein soll :)
danke für ie links werde ich mir mal anschaun.
IhopeonlyReader - Do 09.05.13 20:07
1. komplett Zitate des voherigen Posts sind nicht nötig ;) wir wissen was der vor dir geschrieben haben :D
2.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| assignfile(f, Dateiname) reset(f) eof(f) ReadLn(f, zeileninhalt) Ergebnis := Ergebnis + Zeileninhalt;Closefile(f) |
alles was zwischen try und finally steht ist "geschützt"
try heißt versuche.. und genau das wird auch gemacht.. es wird versucht jeder befehl auszuführen.. wenn es klappt ist es ok, wenn es nicht klappt wird kein Error ausgegeben sondern es wird zum ende des try-blocks gegangen -> finally
finally wird IMMER ausgeführt, auch wenn ein fehler im try-block war..
du kannst auch except verwenden, aber except wird nur dann ausgelöst, falls es ein fehler gab..
Beispiel
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| try Result := false; except Result := true; end;
try Result := false; finally Result := true; end;
|
IhopeonlyReader - Fr 10.05.13 20:44
Es wäre noch schön zu wissen, ob es dir geholfen hat, oder wo du Probleme hast
P.S: Es gibt auch einen "Danke"-Button ;)
rushifell - Sa 11.05.13 10:38
Für reine Textdateien würde ich eine Stringlist verwenden. Bei Bedarf kannst Du zur Anzeige des Dateiinhalts die Stringlist einer ListBox oder einem Memo zuweisen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| Var StringList:TStringlist; wort:String; begin
IF OpenDialog1.Execute then BEGIN wort:='test'; Stringlist:=TStringlist.Create; Stringlist.LoadFromFile(OpenDialog1.FileName); IF Pos(wort,Stringlist.Text)>0 then ShowMessage('Suchbegriff "'+wort+'" gefunden.') else ShowMessage('Suchbegriff "'+wort+'" nicht gefunden.'); Stringlist.Free; END; end; |
Gruß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!