Entwickler-Ecke
Windows API - Öffnen mit... --> Mein Programm
Bergmann89 - Mo 23.06.08 00:01
Titel: Öffnen mit... --> Mein Programm
HI,
ich hab mir n Prog geschrieben wo man die Sachen die man erstellt hat in ner Datei speichern kann. Die Datei hat n eigenen Typ von mir bekommen, also keinen dem Windows schon kennt.
Nun die Frage: Ist es möglich beim Doppelklick auf die Datei das Programm zu öffnen und gleichzeitig die Datei zu laden?
Wenn ja, wie geht das?
Schonma danke für die Hilfe.
MfG & Thx Bergmann.
Moderiert von
Christian S.: Überflüssige Zeilenumbrüche entferntModeriert von
Christian S.: Topic aus VCL (Visual Component Library) verschoben am Mo 23.06.2008 um 00:03
optikandy - Mo 23.06.08 00:25
du kannst bei windows einstellen, dass sich dateien mit bestimmten endungen auch mit bestimmten programmen öffnen lassen...
z.B. ".doc" wird normal mit "microsoft word" geöffnet... du kannst es aber auch so einstellen, dass diese datei mit dem programm von open office geöffnet wird.
aber keine ahnung, wie der diese datei dann auch laden kann...
Bergmann89 - Mo 23.06.08 00:46
HI,
wie man das im Win-Explorer ändert weiß ich, aber ich wollte das gern mein Programm erledigen lassen, denn nich jeder User weiß wie das geht^^
Sowas wie Xentar verlinkt hat such ich...THX!
Jetzt muss ich nur noch in erfahrung bringen wie ich die Datei dann laden kann, wenn ich sie per Doppelklick geöffnet hab!
MfG & Thx Bergmann.
Moderiert von
Narses: überflüssige Zeilenumbrüche entfernt
optikandy - Mo 23.06.08 01:12
bei dem link von xentar steht doch ganz unten, wie man eine solche datei öffnet.
so wie ich das sehe, musst du den Parameter im zusammenhang von assingfile beutzen.
musst das mal ausprobieren, habe kp ob das klappt
Timosch - Mo 23.06.08 12:34
Dateiname wird als erster Parameter übergeben, also
Delphi-Quelltext
1:
| If ParamCount>0 then ShowMessage(ParamStr(1)); |
(zeigt dir z.B. den Dateinamen an)
hansa - Mo 23.06.08 14:52
Timosch hat folgendes geschrieben: |
(zeigt dir z.B. den Dateinamen an) |
Das ist etwas irreführend. Der Dateiname des aufrufenden Programmes wird mit ParamStr (0) angezeigt. Wird dieses Programm mit einem oder mehreren Parametern aufgerufen, dann wäre der erst davon ParamStr (1)
Timosch - Mo 23.06.08 14:54
hansa hat folgendes geschrieben: |
Timosch hat folgendes geschrieben: | (zeigt dir z.B. den Dateinamen an) |
Das ist etwas irreführend. Der Dateiname des aufrufenden Programmes wird mit ParamStr (0) angezeigt. Wird dieses Programm mit einem oder mehreren Parametern aufgerufen, dann wäre der erst davon ParamStr (1) |
Sag ich doch. Wenn über Öffnen mit eine Datei mit deinem Programm geöffnet wird, steht der Name dieser Datei in ParamStr(1), also dem ersten Parameter. ParamStr(0) ist ja kein Parameter, sondern der Programmname selbst.
Bergmann89 - So 29.06.08 21:31
Hi,
hab folgendes Problem:
Ich hab das jetzt alles in meinem Prog eingebaut, die Dateiendung Regestriert und das Prog
geht auch auf wenn ich die Datei anklick.
Nur wird sie nich geladen! Und das is noch nich alles: das komiche ist, wenn ich die Datei
nich anklick, sondern auf die Exe zieh, dann gehts??! VERWIRRENT!!
Wenn ich mich richtig erinner, dann ging das mit anklicken in meinem Test-Programm auch.
kp was ich falsch mach!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| if ParamCount > 0 then if ParamSTR(1) <> '' then if ExtractFileExt(ParamSTR(1)) <> '.mdb' then begin MessageDLG('Unbekanntes Format',mtError,[mbOK],0); Close; end else begin Daten.Clear; Daten.LoadFromFile(ParamSTR(1)); MessageDLG('Laden erfolgreich!',mtInformation,[mbOK],0); end; |
Kann jmd helfen?
MfG Bergmann.
huuuuuh - So 29.06.08 21:42
gibt es denn eine fehlermeldung beim falschen format?
Bergmann89 - So 29.06.08 21:44
ne eben nich, das Programm geht einfach auf, so als ob ich ganz normal auf die exe geklickt hätte...
Bergmann89 - So 29.06.08 22:13
jetzt gehts...?!
vorher
Delphi-Quelltext
1:
| InstallExt('.XXX','XXX-Datei','XXX',ExtractFilePath(ParamStr(0))+'XXX.exe','',0) |
nachher
Delphi-Quelltext
1:
| InstallExt('.XXX','XXX-Datei','XXX',ExtractFilePath(ParamStr(0))+'XXX.exe','"%1"',0) |
und jetzt wird der name übergeben, aber nur bis ein Leerzeichen kommt. dann muss ich den nächsten ParamStr nehmen, komisch!
auf jedenfall sieht das jetzt so aus:
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:
| if ParamCount > 0 then begin if FileExists(ParamStr(1)) then FileName := ParamStr(1) else begin FileName := ''; for i := 1 to ParamCount do begin FileName := FileName + ParamStr(i); if i <> ParamCount then FileName := FileName + ' '; end; end;
if ParamSTR(1) <> '' then if ExtractFileExt(FileName) <> '.mdb' then begin MessageDLG('Unbekanntes Format',mtError,[mbOK],0); Close; end else begin Daten.Clear; Daten.LoadFromFile(FileName); MessageDLG('Laden erfolgreich!',mtInformation,[mbOK],0); end; end; |
MfG Bergmann.
eins.null - Di 29.07.08 09:38
Hallo
Sobald ein Leerzeichen im Parameter-String auftaucht, wird dies als neuer Parameter gewertet. Somit wird auch 'Eigene Dateien' als zwei Parameter gewertet.
Als Lösung schlage ich dir vor, alle Pfade und Dateinamen immer in Anfüruhrungszeichen zu setzen.
(So wie du das schon mit '"%1"' gemacht hast)
Beste Grüße
Matthias
Wolle92 - Di 29.07.08 12:28
Aber obwohl er es so gemacht hat, werden es mehrere parameter
Terra23 - Di 10.11.09 16:54
So, da ja meine Antwort von vorhin verschwunden ist, frage ich halt nochmal:
Ist es normal, dass der Pfad der zu öffnenden Datei immer zerlegt wird, sobald man auf ein Leerzeichen trifft?
Gibt es keine andere Möglichkeit, damit man sich nicht selbst den kompletten Pfad zusammenbasteln muss?
Und warum muss man erst abfragen...
Delphi-Quelltext
1:
| If FileExists(ParamStr(1))... |
..., wenn der Pfad doch zerlegt ist? Dann kann ja nur False bei rauskommen, denn in meinem Programm ist ParamStr(1) nämlich C:\Dokumente
Gruß,
Terra
Xentar - Di 10.11.09 19:50
Und für sowas gräbst du einen ein Jahr alten Thread aus?
Pack den Parameter in "" und schon gehts.
Terra23 - Di 10.11.09 20:01
Ja, für sowas grabe ich einen solch alten Thread aus, denn in diesem Thread gab es ja auch augenscheinlich keine Lösung.
Was willst du eigentlich von mir? Auf der einen Seite soll man die Suche benutzen bevor man neue Threads aufmacht und auf der anderen Seite darf man dann in die gefundenen Threads nicht posten?
Ich war 5 Jahre in einem anderen Forum Moderator und ich kann deine Engstirnigkeit absolut nicht nachvollziehen. Wäre der Thread nun 2 oder 3 Jahre alt, dann ja. Aber so?
Und BTW: Meine Parameter sind in "", so wie es auch in EasyHelper gemacht wurde.
Bei mir steht also: '"%1"' und der Pfad wird trotzdem zerlegt.
Ich habe es aber inzwischen so gelöst, dass ich die Anzahl von ParamCount abfrage und den Pfad selber wieder zusammenbaue.
Terra
PS: Wenn es nicht erwünscht ist, dass man in solche Threads postet, dann solltet ihr die vielleicht schließen. Aber da hier ja auch noch keine Lösung für den Threadersteller vorhanden war (sonst hätte er das Thema ja markiert), wird man ja wohl posten dürfen, oder?
Bergmann89 - Di 10.11.09 20:38
Hey,
eigentlich war das Problem behoben, habs nur nich abgehackt ^^
MfG Bergmann
Terra23 - Di 10.11.09 21:04
Dann schlage ich an dieser Stelle vor, dass in solchen Fällen evtl. die Lösungen nochmal zum Abschluss gepostet werden, denn ich persönlich bin nicht draus schlau geworden.
Aber wie dem auch sei:
Ich möchte mich nochmal eben für meine forsche Antwort entschuldigen, die ich Xentar gab.
Terra
Bergmann89 - Mi 11.11.09 08:24
Wo hast du denn noch Probleme? Mit den Leerzeichen in dem String? Das hab ich auch net anders gelöst als du: einfach mit ner Schleife zusammenstückeln...
jaenicke - Mi 11.11.09 11:35
Das ist gar nicht notwendig, wenn die in Anführungszeichen stehen. Dann wird das komplett in einem Parameter übergeben.
Das Problem in diesem Fall war, dass nicht nur einmal welche hinzugefügt wurden, sondern zweimal. Also ""%1"", so dass es wieder nicht ging. Mit "%1" in der Registry klappt es auch.
Terra23 - Mi 11.11.09 11:52
jaenicke hat folgendes geschrieben : |
Das ist gar nicht notwendig, wenn die in Anführungszeichen stehen. Dann wird das komplett in einem Parameter übergeben.
Das Problem in diesem Fall war, dass nicht nur einmal welche hinzugefügt wurden, sondern zweimal. Also ""%1"", so dass es wieder nicht ging. Mit "%1" in der Registry klappt es auch. |
Das Problem an sich war, dass der Fehler schon aus dem Eintrag in EasyHelper hervorging.
Für alle, die in Zukunft nach diesem Thread suchen und keine Lösung finden:
Dies ist die Funktion zur Verknüpfung einer Dateiendung mit dem Programm:
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:
| function TForm1.InstallExt(Extension, ExtDescription, FileDescription, OpenWith, ParamString: string; IconIndex: Integer = 0): Boolean; var Reg: TRegistry; begin Result := False; if Extension <> '' then begin if Extension[1] <> '.' then Extension := '.' + Extension;
Reg := TRegistry.Create; try Reg.RootKey := HKEY_CLASSES_ROOT; if Reg.OpenKey(Extension, True) then begin Reg.WriteString('', ExtDescription); if Reg.OpenKey('\' + ExtDescription, True) then begin Reg.WriteString('', FileDescription); if Reg.OpenKey('DefaultIcon', True) then begin Reg.WriteString('', Format('%s,%d', [OpenWith, IconIndex])); if Reg.OpenKey('\' + ExtDescription + '\Shell\Open\Command', True) then begin Reg.WriteString('', Format('"%s" %s', [OpenWith, ParamString])); Result:=True; end; end; end; end; finally Reg.Free; end; end; end; |
--> Der orangene Teil ist im EasyHelper-Eintrag auch noch in " " geschrieben.
So verknüpft man eine bestimmte Dateiendung mit dem Programm:
Delphi-Quelltext
1:
| InstallExt('.Dateiendung', 'Beschreibung der Dateiendung', 'Beschreibung des Programms', ParamStr(0), '"%1"', 0); |
--> ParamStr(0) gibt den Pfad der EXE zurück, die die Datei ausführen soll; in diesem Fall ist es euer Programm. Die 0 am Ende gibt das Icon eurer Anwendung mit und somit erhalten die registrierten Dateien euer Logo, so wie auch jedes Word-Dokument ein eigenes Symbol hat.
So wertet man die Parameter aus, wenn die Datei z.B. über den Explorer geöffnet wird:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| If ParamCount > 0 Then If FileExists (ParamStr(1) ) Then Begin FileName := ParamStr(1); TueWas mit FileName; End; |
Danke für die Hilfe (auch in meinem Thread) und dann sollte man hier evtl. dann doch schließen, bevor jemand den Thread in einem Jahr nochmal ausgräbt. ;)
Gruß,
Terra
Xentar - Mi 11.11.09 13:02
Terra23 hat folgendes geschrieben : |
Danke für die Hilfe (auch in meinem Thread) und dann sollte man hier evtl. dann doch schließen, bevor jemand den Thread in einem Jahr nochmal ausgräbt. ;) |
Dann wird er schon drauf aufmerksam gemacht.. :D
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!