Autor |
Beitrag |
Sylvus
      
Beiträge: 195
|
Verfasst: Di 31.03.09 18:05
Hay Leute, kleines Problem...
Ich will in meinem Programm ein beliebiges Dokument aufrufen, dessen Pfad der User selbst vorgibt, also z.B.:
D:\Programme\BlenderPortable2.46\meinDokument.odt
Ich weiß jedoch nicht, welches Dateiformat (doc,odt,txt..) die Datei hat, aber ich will ja auch das Windows die mit dem Standart Programm öffnet! Jetzt lautet meine Frage wie ich das anstelle
Also:
Delphi-Quelltext 1: 2: 3: 4: 5:
| var tempname : string = 'D:\Programme\BlenderPortable2.46\meinDokument.odt'; begin ShellExecute(Handle,nil,???,nil,tempname,SW_SHOW); end; |
Wäre nett wenn jemand die ??? ergänzen könnte, oder einfach den richtigen Befehl posten könnte
Dankeschön!!
Viele Grüße
Sylvus
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 31.03.09 18:10
Du musst das auf PChar casten, und der zweite Parameter ist 'open':
Delphi-Quelltext 1:
| ShellExecute(Handle, 'open', PChar(tempname), ...); |
|
|
Sylvus 
      
Beiträge: 195
|
Verfasst: Di 31.03.09 18:14
Herzlichen Dank, funktioniert super!
Nur werd ich nicht ganz aus der Hilfe schlau, also wenn ich versuche zu verstehen was ich gemacht habe^^
Ich wandle ja den string in ein PChar um, dabei besteht ein PChar aus verschiedenen Teilen? Oder ist ein PChar nur ein pointer, der immer ein Zeichen weiter wandert?
Viele Grüße
Sylvus
und nochmal dankeschön für die schnelle Antwort!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 31.03.09 18:16
PChar ist ein Pointer auf eine nullterminierte Zeichenkette. Du musst bei einer solchen Zeichenkette nach dem Nullzeichen suchen um die Länge der Zeichenkette zu ermitteln.
Im Gegensatz dazu steht vor der eigentlichen Zeichenkette beim Datentyp String in Delphi eine Information über die Länge der Zeichenkette und ein Referenzzähler.
|
|
Sylvus 
      
Beiträge: 195
|
Verfasst: Di 31.03.09 18:33
ahhh gut haben wir das auch geklärt, noch ne kurze Frage, dann ist alles geklärt
ich hab jetzt
Delphi-Quelltext 1: 2: 3: 4:
| try ShellExecute(...) except ShowMessage(...) end; |
aber er zeigt mir die Nachricht nicht an, auch wenn er keine Datei öffnen kann, weil die Datei nicht existiert!
Kann ich das irgendwie anders abfangen? Also prüfen ob er die Datei auch öffnet?
Vielen Dank
Sylvus
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Di 31.03.09 18:39
Shellexecute wirft keine Exceptions sondern gibt einen Fehlercode zurück, siehe Zitat: | SHELLEXECUTE: Return Value
If the function succeeds, it returns a value greater than 32. If the function fails, it returns an error value that indicates the cause of the failure.[...] |
Dort gibt's ne liste, was die Fehler-Zahlen bedeuten, aber für dich reicht einfach:
Delphi-Quelltext 1:
| if Shellexecute(...) > 32 then Erfolg else Fehler |
Edit: Autsch - Ich glaub das war ein Known-Bug.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Zuletzt bearbeitet von JayEff am Di 31.03.09 18:41, insgesamt 4-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 31.03.09 18:39
Wie wäre es mit dem Rückgabewert von ShellExecute?
// EDIT:  ja, ShellExecute^^
Zuletzt bearbeitet von jaenicke am Di 31.03.09 19:13, insgesamt 1-mal bearbeitet
|
|
Sylvus 
      
Beiträge: 195
|
Verfasst: Di 31.03.09 19:03
RückgabeWert von ShowMessage verstehe ich nicht, aber das andere funktioniert wunderbar!
Ich werd jetzt mal versuchen meine alte Delphi-Hilfe zu aktualisieren, damit ich mir das auch selbst erarbeiten kann!
Vielen Dank für die schnellen Antworten!
bye bye
Sylvus
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Di 31.03.09 19:09
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Sylvus 
      
Beiträge: 195
|
Verfasst: Di 31.03.09 19:14
aaachso ok alles klar - Problem gelöst! Danke nochmal an alle 
|
|
|