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



BeitragVerfasst: Do 09.05.13 16:13 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: 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.).

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TMainform.Button2Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    Edit1.Text := OpenDialog1.FileName;
end;
m1sc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 09.05.13 17:46 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Do 09.05.13 17:55 
user profile iconm1sc hat folgendes geschrieben Zum zitierten Posting springen:
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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 09.05.13 18:41 
user profile iconm1sc hat folgendes geschrieben Zum zitierten Posting springen:
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.
ausblenden Delphi-Quelltext
1:
TEdit(Sender)					


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
ausblenden 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
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:
if pos(Wort, DateiInhalt)>0 then 
  //Zeichenfolge vorhanden
else 
  //Zeichenfolge nicht vorhanden

//wenn du aber wissen möchtest wo es ist und damit weiterarbeiten willst, dann ist das Ergebnis von pos die Stelle an der es das Wort beginnt..
length(Wort)+pos(Wort, DateiInhalt)-1// liefert die Position des letztens Zeichens des Wortes im String

//Denk daran, wenn du mehr als nur ein befehl ausführen willst, reicht eine Befehlszeile nicht aus! du musst dann 
if pos(Wort, DateiInhalt)>0 then 
  begin
  //Zeichenfolge vorhanden
  end
else
  begin 
  //Zeichenfolge nicht vorhanden 
  end;

//Wenn es auch kein Unterwort sein soll wie "Hi" von "Hit" 
//dann frage es folgendermaßen ab
if pos(' '+Wort+' ', DateiInhalt)>0 then 
  begin
  //Wort vorhanden
  end
else
  begin 
  //Wort nicht vorhanden 
  end;
//wenn es aber das letzte wort im Sring ist, dann kommt nach dem Wort kein Leerzeichen mehr, 
// also 
if pos(' '+Wort, Dateinhalt)>0 then 
 if pos(' '+Wort, DateiInhalt)+length(' '+Wort)=length(DateiInhalt) then //wort ist das letzte wort des strings
  begin

  end
 else
  if pos(' '+Wort+' ', DateiInhalt) then  //Wort kommt mitten im String vor
   begin
   
   end;


Bedenke: vor einem ELSE kein Simikolon (;)

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!


Zuletzt bearbeitet von IhopeonlyReader am Do 09.05.13 19:10, insgesamt 2-mal bearbeitet
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: 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?

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
m1sc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: 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
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: Do 09.05.13 19:50 
was verstehst du allgemein in der Programmierung nicht?
gute Tutorials:
www.paukert.at/progs/delphi01.pdf //Allgemeine Grundlagen
www.paukert.at/progs/delphi02.pdf //Sprachelemente und Strukturen
www.paukert.at/progs/delphi03.pdf //SIEBEN ÜBUNGSPROGRAMME
www.paukert.at/progs/delphi04.pdf //Standard-Komponenten
www.paukert.at/progs/delphi05.pdf //Sortier- und Suchalgorithmen
www.delphi-treff.de/tipps/?id=54

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
m1sc Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 09.05.13 19:55 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
assignfile(f, Dateiname) //bereitet die Datei (Textdatei) vor
//f ist die Textdatei die vorbereitet wird,
//Dateiname ist der Pfad, wo die eigentliche Datei liegt
reset(f) //setzt einen Zeiger auf den Anfang der Datei
eof(f) //checkt, ob der zeiger am End Of File angekommen ist
ReadLn(f, zeileninhalt) //liest die zeile, wo sich der zeiger gerade befindet und schreibt dann den Inhalt der Zeile in den String der dahinter steht..
                        //in diesem Beispiel heißt die variable ZeilenInhalt (variblen Name passend gewählt)
Ergebnis := Ergebnis + Zeileninhalt;// fügt nun den Zeileninhalt an das Ergebnis an
Closefile(f) //schließt die Datei wieder, damit sie von anderen Anwendungen wieder verwendet werden kann.. wenn du das weglässt, kannst du deine *.txt z.B. 
//nicht löschen..
//dass hast du sicherlich schon oft erlebt, wenn bei einer Datei steht, "diese Datei kann nicht gelöscht werden, da sie von einem Programm noch verwendet wird"
//das ensteht, wenn die Datei nicht freigegeben wird..


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
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
try
//machwas
Result := false;
  except
  Result := true;
  end;

//Result gibt nun an, ob es einen Fehler gab oder nicht.

try
//machwas
Result := false;
  finally
  Result := true;
  end;

//Result ist IMMER true, egal ob es ein fehler gab oder nicht...

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
IhopeonlyReader
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 600
Erhaltene Danke: 23


Delphi 7 PE
BeitragVerfasst: 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 ;)

_________________
Sucht "neueres" Delphi :D
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: 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.

ausblenden 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ß