Entwickler-Ecke

Dateizugriff - Dateien in ein Formular einfügen


FireFighter112 - Di 04.05.10 22:01
Titel: Dateien in ein Formular einfügen
Wie kann ich in einem Formular bei Klick auf einen Button, eine .exe (oder eine andere) Datei öffnen???

Schon einmal vielen Dank für die Antworten!!!


Narses - Di 04.05.10 22:09

Moin und :welcome: im Forum!

Such mal nach Suche in: Delphi-Forum, Delphi-Library SHELLEXECUTE, damit solltest du weiter kommen. :lupe: :les: :think: ;)

cu
Narses


Sybok Factor - Mi 05.05.10 13:39

... oder du schaust dir die TActionlist Komponente an und dort die Action TFileRun. (ist allerdings weniger lehrreich als der erste Weg).

Viele Grüße
Sybok


FireFighter112 - Mi 05.05.10 16:25

Danke schonmal...
Mit dem shellexecute versteh ich das iwie nicht so ganz! Ich möchte mit einem Klick auf einen Button eine Word-Datei aufrufen (die also nicht auf dem Formular anzeigen)! Aber was genau muss ich dazu schreiben???
FireFighter112


Xentar - Mi 05.05.10 16:57

Du hast ein Stichwort bekommen, wonach du bestimmt schon gesucht hast.

Wie sehn denn nun deine zugehörigen Versuche aus, bzw. was für eine Fehlermeldung erhälst du da?


FireFighter112 - Mi 05.05.10 17:18

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Du hast ein Stichwort bekommen, wonach du bestimmt schon gesucht hast.

Ich habe auf einer Seite folgendes gefunden: ShellExecute(0'open', PChar(cExecute), nilnil, SW_ShowNormal); Doch was muss ich daran verändern, damit ich die Datei "Text.doc" öffnen kann?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Xentar - Mi 05.05.10 18:17

Klick mal auf ShellExecute, und drück F1, dann sollte die Hilfe aufgehen..
Dort wirst du dann lesen können, dass der Dateiname der dritte Parameter ist.


jaenicke - Mi 05.05.10 18:18

Schau dir einfach die Dokumentation an, da steht was die Parameter bedeuten:
http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx


FireFighter112 - Mi 05.05.10 22:08

HILFEEEE!!!!

Ich versteh das nicht...

wenn ich F1 drücke, kommt dass ich die hilfe nicht anzeigen kann ider sowas

könnt ihr mir vielleicht sagen, wo ich was genau eingeben muss. Das wäre super nett :D


jaenicke - Mi 05.05.10 22:14

Dann hast du vermutlich noch eine Uraltversion von Delphi und Vista oder neuer. Du brauchst dann das entsprechende Update:
http://www.delphi-library.de/viewtopic.php?p=544403

Ich habe dir aber den Link zur Dokumentation gepostet, da steht ja alles drin. Und zudem wurde dir bereits gesagt, dass der dritte Parameter der zu öffnende Dateiname ist (natürlich inklusive Pfad)...


JayEff - Mi 05.05.10 22:18

user profile iconFireFighter112 hat folgendes geschrieben Zum zitierten Posting springen:
könnt ihr mir vielleicht sagen, wo ich was genau eingeben muss. Das wäre super nett :D
Dabei lernste nix, das wär also nich super nett sondern super un-hilfreich.
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Schau dir einfach die Dokumentation an, da steht was die Parameter bedeuten:
http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx

Der Link erklärt schon alles, halt auf englisch. Wie jaenicke schon gesagt hat, der dritte Parameter ist der Dateiname+Pfad, den Rest kannst du lassen. Zu beachten ist, dass die Funktion PChars als Parameter will, keine Strings, darum der Cast (sprich: Typenumwandlung) von String zu PChar im von dir geposteten Code. (PChar(cExecute)
Du kannst dir sicher denken, dass cExecute eine Variable vom Typ String ist.


elundril - Mi 05.05.10 22:20

ich denke wenn er bei delphi f1 drückt wenn er shellexecute markiert hat, wird sowieso nix kommen, denn die hilfe für diesen befehl steht in der WinApi-Hilfe drin, die bei der Delphi-Hilfe nicht dabei ist. Zumindest bei D7 nicht.

lg elundril


Martok - Mi 05.05.10 22:28

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
ich denke wenn er bei delphi f1 drückt wenn er shellexecute markiert hat, wird sowieso nix kommen, denn die hilfe für diesen befehl steht in der WinApi-Hilfe drin, die bei der Delphi-Hilfe nicht dabei ist. Zumindest bei D7 nicht.

Oh doch. Nur will OpenHelp da nicht, und deswegen findet der die nicht automatisch. In dem dann auftauchenden Index einfach mal ShellExecute eingeben, da stehts dann wirklich ;)

Oder eben gleich ins MSDN, das ist dann auch aktueller als jede lokale Version.


jaenicke - Mi 05.05.10 22:28

Bei Delphi 7 geht vieles nicht, das ist halt so, ist nun einmal fast 10 Jahre alt. Also was erwartest du? :lol:

Bei Delphi 2006 geht das natürlich, siehe Anhang, das kommt heraus beim Druck auf F1...


FireFighter112 - Di 11.05.10 22:08

Ich lerne seid vllt 2 monaten delphi, das meiste selbst beigebracht und ich versteh echt überhauptnicht wo ich dass mit dem shellexecute hinschreiben muss...


Delphi-Quelltext
1:
2:
3:
4:
ShellExecute(0'open', PChar(cExecute), nilnil, SW_ShowNormal);
-------------------------------^----------------------------------------------------
-------------------------------|----------------------------------------------------
-------------------Muss dahin dann "Text.doc"???------------------------------------


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


elundril - Di 11.05.10 22:15

nein, statt dem cExecute. das Wort PChar castet deinen String (also dein Namen von der Datei) nach PChar, damit Windows was damit anfangen kann. Ich würde mal google raten, Christian's Crashkurs [http://www.christian-stelzmann.de/index_tutorials_crashkurs.html] und das Delphi-Wikibook [http://de.wikibooks.org/wiki/Programmierkurs:_Delphi].

lg elundril


jaenicke - Di 11.05.10 22:18

user profile iconFireFighter112 hat folgendes geschrieben Zum zitierten Posting springen:
Muss dahin dann "Text.doc"???
Ohne, dass du sowas einfach ausprobierst wirst du beim Programmieren nicht weit kommen...

Statt cExecute muss der Pfad plus der Dateiname der Datei hin. Ich habe bisher noch nichts gesehen was du in der Richtung probiert hast (seid dazu etwas geschrieben wurde), wie sollen wir da dann helfen?
Probier es und wenn es nicht klappt zeig doch einfach was du versucht hast...


ALF - Di 11.05.10 22:33

Dein Topic heist aber "Dateien in ein Formular einfügen"!!! ist dann aber auch nicht richtig!
Du willst aber Office öffnen mit einer *.doc Datei wenn ich es richtig verstehe!?
PChar(cExecute), bedeutet das dort die ausführbare Datei rein muss!
und Nil, Nil sind parameter die Du der ausführbaren Datei(exe) mit übergibst, damit sie evtl weiss, was sie machen soll!
als kleine Hilfe :wink:

Gruss Alf


FireFighter112 - Mi 12.05.10 15:14

Also wäre das, wenn es im selben Ordner ist:

Delphi-Quelltext
1:
ShellExecute(0'open', PChar(Text.txt), nilnil, SW_ShowMinimized);                    

Ich habe bis jetzt sehr viel ausprobiert, doch ich wusste nicht, wo genau ich das hinschreiben muss.
Muss ich das jetzt in die Procedure von einem Button schreiben oder wohin?
In der Procedure, kam bis jetzt immer eine Fahlermeldung, dass der Befehl unbekannt ist...


LG FireFighter112

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


ALF - Mi 12.05.10 15:29

Das ist aber jetzt nicht Dein ernst!
Lesen und verstehen sind zwar unterschiedliche Dinge aber, Lesen ist anscheinend nicht Deine Stärke!
Was willst Du den nun!!
Eine txt Datei in Dein Formular einfügen zum ansehen/bearbeiten
oder
ein externes Prog z.B. (edit.exe starten) und Deine txt Datei diesem Prog (edit.exe) übergeben!!

Gruss Alf


elundril - Mi 12.05.10 16:01

Ok, das wird mir jetzt zu doof, ich liefere statt hinweise jetzt ne copy-paste-lösung für alle die anscheinend du faul zum denken sind. Viel Spass in der Arbeitslosigkeit dann!

Also: Bei uses muss du dazuschreiben: ShellApi

dann bei dem Button oder wo du hast die textdatei öffnen willst schreibst du hin:

Delphi-Quelltext
1:
  ShellExecute(0, PChar('open'), PChar(ExtractFileDir(Application.Exename)+ '\Text.txt'), nilnil, SW_ShowNormal);                    


lg elundril


Dude566 - Mi 12.05.10 16:05

Kommt es mir nur so vor, oder wird diese Frage mindestens einmal im Monat gestellt? :D


ALF - Mi 12.05.10 16:32

Och nööö, das nützt ihm nichts @elundril, mit Fehlern :wink:
Gruss Alf


elundril - Mi 12.05.10 16:38

Tschuldigung, die Klammern fehlen natürlich und der schrägstrich.


ALF - Mi 12.05.10 16:48

Sorry @elundril, ich will nicht nerven aber, Application.Exename, wird ihm auch nichts nutzen :wink:
Schreib 'Notepad.exe' z.B. mit rein, das wird ihm besser helfen.
Hoffentlich weis er aber auch, das er den Pfad der txt Datei richtig angeben muss, sonst kommt die nächste Frage :lol:

Gruss ALf


jaenicke - Mi 12.05.10 16:53

Dann kommt sicher bald die entsprechende Frage. Vielleicht sollte man auch noch dazusagen, dass man den Button mit der linken Maustaste anklicken muss, damit das Ereignis dahinter ausgelöst wird.

Jaja, da merkt man was passiert, wenn man automatische Updates deaktiviert (also für die brain.exe meine ich).

Sorry, aber wenn man sich so anstellt... :roll:

Ich unterstreiche mal noch einmal diesen Post...
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
Ich würde mal google raten, Christian's Crashkurs [http://www.christian-stelzmann.de/index_tutorials_crashkurs.html] und das [url=http://de.wikibooks.org/wiki/Programmierkurs:_Delphi]Delphi-Wikibook[/url].


FireFighter112 - Mi 12.05.10 17:04

Mir ist schon klar, dass ich den button mit der linken Maustaste anklicken muss... nur wenn ich frage, was ich hinschreiben muss, um eine Datei zu öffnen.. sollte man mir schon sagen, dass ich bei uses ShellApi eingeben muss!! sonst kann ich lange probieren.
Noch eine letzte kleine Frage, wie gebe ich den Pfad der Datei an???


ALF - Mi 12.05.10 17:13

lol, aber Du bist Anfänger, ansonsten hilft auch mal lesen, nicht nur Fragen
Dort wo @elundril den '\text.txt' gesetzt hat

Gruss Alf


jaenicke - Mi 12.05.10 17:13

user profile iconFireFighter112 hat folgendes geschrieben Zum zitierten Posting springen:
sollte man mir schon sagen, dass ich bei uses ShellApi eingeben muss!!
Das steht in der Doku und auch in den diversen Suchergebnissen drin.

user profile iconFireFighter112 hat folgendes geschrieben Zum zitierten Posting springen:
Noch eine letzte kleine Frage, wie gebe ich den Pfad der Datei an???
Der Pfad der Exe selbst steht ja dabei in dem Beispiel (ExtractFileDir(Application.Exename)). Und wenn du da einen anderen haben willst, dann kannst du den z.B. direkt vor den Namen der Textdatei in den String schreiben oder als Variable, eben statt ExtractFileDir(Application.Exename). Ganz wie du möchtest.


elundril - Mi 12.05.10 20:12

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Sorry @elundril, ich will nicht nerven aber, Application.Exename, wird ihm auch nichts nutzen :wink:
Schreib 'Notepad.exe' z.B. mit rein, das wird ihm besser helfen.


Das Notepad.exe hat im ShellExecute nix zu suchen wenn er eigentlich nur die "Text.txt" im Programmverzeichnis öffnen will. Und da braucht er das ExtractFileDir(Application.Exename), aus dem Grund weil das Ausführungsverzeichnis sich vom Programmverzeichnis unterscheiden kann und ohne Pfad, wird das Ausführungsverzeichnis genommen. Jetzt kann es natürlich zu Problemen kommen, da es im ausführungsverzeichnis kein "Text.txt" gibt, oder wenn es so eine Datei gibt, es vielleicht die falsche ist. ;)

lg elundril


ALF - Mi 12.05.10 20:36

@elundril

user profile iconFireFighter112 hat folgendes geschrieben Zum zitierten Posting springen:
Ich möchte mit einem Klick auf einen Button eine Word-Datei aufrufen (die also nicht auf dem Formular anzeigen)!

oder hab ich da was falsch verstanden? wenn nicht mit der office.exe über shellexecute z.B.
Gruss Alf


elundril - Mi 12.05.10 20:43

user profile iconFireFighter112 hat folgendes geschrieben Zum zitierten Posting springen:
Also wäre das, wenn es im selben Ordner ist:


ja, weil bezog mich dann auf diesen Post ;)

wenn er eine bestimmte datei richtig mit word.exe aufrufen will, müsste er statt der ExtractFileDir(Application.Exename) mal den pfad von word.exe finden und einfügen und dann statt dem ersten nil den pfad für die zu öffnende datei als PChar mitgeben. das erste nil wäre nämlich der erste parameter für word.exe. ;)

lg elundril


ALF - Mi 12.05.10 20:53

Ok, sollte er selbst entscheiden was er nun wirklich will 8)
Gruss Alf


Andreas L. - Do 13.05.10 09:57

user profile iconFireFighter112 hat folgendes geschrieben Zum zitierten Posting springen:
Also wäre das, wenn es im selben Ordner ist:

Delphi-Quelltext
1:
ShellExecute(0'open', PChar(Text.txt), nilnil, SW_ShowMinimized);                    



1. Werden Strings mit einem ' eingeleitet und wieder mir einem ' abgeschlossen:

Delphi-Quelltext
1:
'DeineDatei.txt'                    


2. Musst du einen Pfad angeben. Wenn die Datei im selben Ordner wie die EXE liegt: ParamStr(0) ansonsten schau dir mal TOpenDialog an


Delphi-Quelltext
1:
ShellExecute(Handle, 'open', PChar(ExtractFilePath(ParamStr(0)) + 'Text.txt'), nilnil, SW_SHOW);                    


EDIT: Mist, 2te Seite übersehen. Ich geh wieder ins Bett....