Autor Beitrag
Sylvus
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 195



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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 31.03.09 18:10 
Du musst das auf PChar casten, und der zweite Parameter ist 'open':
ausblenden Delphi-Quelltext
1:
ShellExecute(Handle, 'open', PChar(tempname), ...);					
Sylvus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 195



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 195



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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 31.03.09 18:39 
Shellexecute wirft keine Exceptions sondern gibt einen Fehlercode zurück, siehe
Zitat:
Suche im MSDN 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 31.03.09 18:39 
Wie wäre es mit dem Rückgabewert von ShellExecute?
// EDIT: :oops: ja, ShellExecute^^


Zuletzt bearbeitet von jaenicke am Di 31.03.09 19:13, insgesamt 1-mal bearbeitet
Sylvus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 195



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 31.03.09 19:09 
user profile iconSylvus hat folgendes geschrieben Zum zitierten Posting springen:
RückgabeWert von ShowMessage verstehe ich nicht, aber das andere funktioniert wunderbar!
Er meinte auch den Rückgabewert von Shellexecute, Showmessage ist eine Prozedur und hat keinen :mrgreen:

Shellexecute steht so leider nicht in der Hilfe drin, API-Funktionen findet man aber immer auf msdn, siehe der Link in meinem Zitat :zustimm:

Edit: Die MSDN-Suche vom Delphi-Forum scheint nicht zu funktionieren, hier ein direkter Link :motz:
msdn.microsoft.com/e...bb762153(VS.85).aspx

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Sylvus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 195



BeitragVerfasst: Di 31.03.09 19:14 
aaachso ok alles klar - Problem gelöst! Danke nochmal an alle :)