![]() |
Registry - FileExtensions eintragen
Also unter der folgenden Url
![]() habe ich eine Function gefunden, um Dateiendungen in die Registry einzutragen. So das ganze sieht bei mir jetzt so aus. Also auf einem Form befindet sich eine Check-List-Box (ClBoxFileAssis) u.A mit folgenden Items: .mp2 .mp3 .wma Dan wird bei einem ButtonOnClick das folgende gemacht:
Delphi-Quellcode:
Dann in TMainform:
var
I:Integer; begin [...] for I:=0 to CLBoxFileAssis.Items.Count do if CLBoxFileAssis.Checked[I] then mainform.RegistExtension(ClBoxFileAssis.Items[I],ClBoxFileAssis.Items[I] + '-File','PhynPlayer',mainform.pppath + 'phynplayer.exe',ParamStr(0),'"%1"',0);
Delphi-Quellcode:
function Tmainform.RegistExtension(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; Nun erscheint der folgende Fehler: "Incompatible Types: Integer and String" soweit recht logisch. Aber in diesem Fall weiß ich nicht, was hier falsch ist. :wiejetzt: Und dann noch etwas: würden damit beim Aufruf mehrerer Dateien über den Explorer auch alle Datei-Namen an das Prog übermittelt werden, oder nur einer davon? Und denn Sinn von ParamStr(0), '"%1"' habe ich auch nicht so ganz verstanden :gruebel: Joa, mal gucken, ob das jemand erklären kann ^^ Naja bestimmt :thumb: |
Re: Registry - FileExtensions eintragen
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Registry - FileExtensions eintragen
Fehler: Ja, er ist deutlich, aber hier gehört ein Integer hin und da ist auch einer!
Instanzen: Gut ist bei mir aufgrund einer Mutex nicht möglich, aber ich werd' mich noch mal damit befassen Parameter: Danke Nachdenken: Wenn ich es mir erklären könnte, würde ich hier nicht posten |
Re: Registry - FileExtensions eintragen
Zitat:
|
Re: Registry - FileExtensions eintragen
Da:
Delphi-Quellcode:
als Aufruf folgender Funktion:
mainform.RegistExtension(ClBoxFileAssis.Items[I],ClBoxFileAssis.Items[I] + '-File','PhynPlayer',mainform.pppath + 'phynplayer.exe',ParamStr(0),'"%1"',0);
Delphi-Quellcode:
function Tmainform.RegistExtension(Extension, ExtDescription, FileDescription,
OpenWith, ParamString: string; IconIndex: Integer = 0): Boolean; |
Re: Registry - FileExtensions eintragen
Zitat:
Zitat:
|
Re: Registry - FileExtensions eintragen
Bei mir klappts so:
Delphi-Quellcode:
InstallExt = RegistExtension
InstallExt('.mp3', 'MP3 - Datei', 'MP3 Audio', Application.ExeName, '%1',0);
|
Re: Registry - FileExtensions eintragen
Ja kuhl jetzt klappt das.
Möglicherweise lag' der Fehler nicht mal unbedingt da :oops: Jetzt muss ich nur noch zusehen, dass ich damit mehrere Datei-Parameter an die Appi bekomme, aber ich glaub' das habe ich schon. Und dann gucken, wie ich das noch mit der Mutex vereinbaren kann. :gruebel: Na, fällt mir schon noch ein Danke vielmals! ( Vor allem, wenn das wirklich gar nicht der Hauptfehler gewesen sein sollte :roll: ) |
Re: Registry - FileExtensions eintragen
Delphi-Quellcode:
Das is meine Form.Create Methode
procedure TForm1.FormCreate(Sender: TObject);
type Einstellungen = record Lautstaerke : integer; Skin : string[1]; {Buttons} playlistnamen : boolean; {Vollst. Namen anzeigen?} Color : Tcolor; {Hintergrund} Color_ue : Tcolor; {Ueberschriftenfarbe} Color_sch : Tcolor; {Schriftfarbe} Font_ue : TFont; {Schriftart(Ueberschriften)} Font : TFont; {Schriftart(Normalschriften)} end; var i,j:integer; groesse:longint; Sem: THandle; strin:string; Mutex: THandle; Was:Einstellungen; f:file of byte; temp:textfile; label 99; begin if paramcount>0 then begin i:=0; assignfile(temp,(extractfiledrive(paramstr(0))+'\Mediaplayer_System\temp.dat')); if not fileexists(extractfiledrive(paramstr(0))+'\Mediaplayer_System\temp.dat') then rewrite(temp) else append(temp); 99: strin:=''; if (paramcount>0) then begin {mehre Dateien in Temporärer Datei speichern} while not fileexists(strin) do begin i:=i+1; strin:=strin+paramstr(i); end; writeln(temp,strin); if i<paramcount then goto 99; closefile(temp); {Überprüfung ende} if GetLastError = ERROR_ALREADY_EXISTS then halt; listbox1.items.clear; listbox1.items.add(extractfilename(strin)); maxlied:=1; mediaplayer1.close; Label1.caption:=extractfilename(strin); FillID3TagInformation(strin, Title,Artist,Album,Year,Comment, Genre); mediaplayer1.filename:=strin; mediaplayer1.open; SetMPVolume(mediaplayer1,trackbar2.position); gesamtzeitsek:=(mediaplayer1.length div 1000); gesamtzeitmin:=0; trackbar1.max:=mediaplayer1.length; gauge1.maxvalue:=mediaplayer1.length; while (gesamtzeitsek>=60) do begin gesamtzeitsek:=gesamtzeitsek-60; gesamtzeitmin:=gesamtzeitmin+1; end; if gesamtzeitsek<10 then gesamtzeit.caption:=inttostr(gesamtzeitmin)+':0'+inttostr(gesamtzeitsek) else gesamtzeit.caption:=inttostr(gesamtzeitmin)+':'+inttostr(gesamtzeitsek); mediaplayer1.play; end; end; for i:=0 to MaxID3Genre do genre.items.add(ID3Genre[i]); MediaplayerMsg := RegisterWindowMessage('Mediaplayer'); Mutex := CreateMutex(nil, False, 'Mediaplayer'); if GetLastError = ERROR_ALREADY_EXISTS then halt; if Mutex <> 0 then ReleaseMutex(Mutex); Hoffe ich konnte helfen |
Re: Registry - FileExtensions eintragen
Ô.o
Ah ja ... also ich muss gestehen, dass sieht toll aus :roll: Aber ich hab KP, was das alles soll :gruebel: |
Re: Registry - FileExtensions eintragen
Das ist auch unwichtig, weil es dir für dein Projekt vermutlich nicht helfen wird.
|
Re: Registry - FileExtensions eintragen
Naja ich habe vereinzelt "MediaPlayer" und Mutex etc erspäht ... das ist schon mal gut (:
Also im Prinzip habe ich jetzt noch das Problem, dass beim Öffnen, einer nun ja erfolgreich registrierten Datei zwar das Prog geöffnet wird und der Parameter übergeben. Das Problem an der Sache ist nur, dass immer nur ein Dateiname übergeben wird. Vermutlich, weil normalerweise für jede Datei das Prog neu gestartet wird. Dies wird allerdings durch die Mutex gleich wieder gekillt. Also muss ich jetzt versuchen, dass vor der "Vernichtung" die Parameter an die Haupt-App übergeben werden. :gruebel: Oder so in der Art :zwinker: Edit: Plural von "Problem" durch den Singular ersetzt - scheinbar habe ich beim schreiben vergessen, was mein 2. Prob war ;) |
Re: Registry - FileExtensions eintragen
Delphi-Quellcode:
So Hui
assignfile(temp,(extractfiledrive(paramstr(0))+'\Mediaplayer_System\temp.dat')); {Weise der Variable temp die temporäre Datei zu}
if not fileexists(extractfiledrive(paramstr(0))+'\Mediaplayer_System\temp.dat') then {Wenn die temporäre Datei nicht existiert dann} rewrite(temp) {erstelle sie} else append(temp); {sonst öffne sie um Dateien anzuhängen} 99: {label 99} strin:=''; {setze den zwischenspeicher für den Dateinamen auf nichts zurück} if (paramcount>0) then {wenn einer oder mehrere Dateinamen übermittelt wurden dann} begin {mehre Dateien in Temporärer Datei speichern} while not fileexists(strin) do begin {solange (strin) nicht existiert füge den nächsten Parameter hinzu} i:=i+1; {da ich keine For-Schleife benutzen kann, aber der Parameter verändert werden soll} strin:=strin+paramstr(i); {Zwischenspeicher = Zw.Speicher + aktueller Parameter} end; writeln(temp,strin); {temp ist die temporäre auslagerungsdatei; Schreibe in temp eine neue Zeile mit dem Inhalt (strin)} if i<paramcount then goto 99; {wenn i kleiner als die Gesamtanzahl an Paramtern ist, dann gehe zu label 99} closefile(temp); {Schließe die Temporäre Datei} {Überprüfung ende} if GetLastError = ERROR_ALREADY_EXISTS then halt; {Wenn das Program schon geöffnet ist, schließe es (nachdem die temporäre Datei geschrieben wurde)} hoffe ich konnte dir etwas helfen |
Re: Registry - FileExtensions eintragen
Zitat:
![]() |
Re: Registry - FileExtensions eintragen
Also die Unit von Nico ist mir ehrlich gesagt irgendwie zu kompliziert.
Ich kann das natürlich einfach alles kopieren und in mein Prog einfügen - vermutlich ginge es auch, aber ich wills ja auch schon irgendwie verstehen (: Ich will nicht auch irgend ein Copy-n-Paste-Prog haben, bei dem ich das meißte nicht mal selber verstehe ;) Aber die Lösung von Gregg klingt für mich nachvollziehbar. Die Frage ist jetzt nur, wie ich das bereits aktive Prog dazu bringe, zu bemerken, dass die Temp-Datei jetzt von einer anderen Instanz geändert wurde. |
Re: Registry - FileExtensions eintragen
Delphi-Quellcode:
Ich überprüfe im Intervall von einer Sekunde mit einem OnTimer Event
procedure TForm1.Timer2Timer(Sender: TObject);
var j,groesse:integer; fmp:TFileStream; s:string; i:integer; label 1,3; begin if ((label1.caption<>'Verzeichnis') or fileexists(extractfiledrive(paramstr(0))+'\Mediaplayer_System\temp.dat')) and (mediaplayer1.error=0) then begin if fileexists(extractfiledrive(paramstr(0))+'\Mediaplayer_System\temp.dat') then {Überprüfe ob die temporäre Datei existiert und wenn ja dann} begin memo1.lines.loadfromfile(extractfiledrive(paramstr(0))+'\Mediaplayer_System\temp.dat'); {Der Inhalt der Playlist wird der inhalt der temporären Datei übergeben} listbox1.items:=memo1.lines; deletefile(extractfiledrive(paramstr(0))+'\Mediaplayer_System\temp.dat'); {lösche die temporäre Datei} {...Nochn paar andere Einstelungen...} playbutton.glyph:=pausebutton.glyph; if playlistnamen.checked=false then for i:=0 to memo1.lines.count-1 do listbox1.items[i]:=extractfilename(listbox1.items[i]); listbox1.sorted:=false; listbox1.itemindex:=0; zaehler:=0; maxlied:=memo1.Lines.count-1; Label1.caption:=extractfilename(memo1.lines[0]); mediaplayer1.close; mediaplayer1.filename:=memo1.lines[0]; FillID3TagInformation(mediaplayer1.filename,title,artist,album,year,comment,genre); mediaplayer1.open; trackbar1.max:=mediaplayer1.length; gauge1.maxvalue:=mediaplayer1.length; gesamtzeitsek:=(mediaplayer1.length div 1000); gesamtzeitmin:=0; while (gesamtzeitsek>=60) do begin gesamtzeitsek:=gesamtzeitsek-60; gesamtzeitmin:=gesamtzeitmin+1; end; if gesamtzeitsek<10 then gesamtzeit.caption:=inttostr(gesamtzeitmin)+':0'+inttostr(gesamtzeitsek) else gesamtzeit.caption:=inttostr(gesamtzeitmin)+':'+inttostr(gesamtzeitsek); mediaplayer1.play; end; |
Re: Registry - FileExtensions eintragen
Ja ok ist zwar natürlich weitaus unprofessioneller, aber das versteh' ich ^^
Kann ich ja sonst später immernoch durch das andere ersetzen. Danke Auch den anderen - gute Ratschläge, aber ich bin vermutlich einfach noch nicht weit genug! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz