Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Mit Programm öffnen... per doppelklick (https://www.delphipraxis.net/150997-mit-programm-oeffnen-per-doppelklick.html)

SimonRap 2. Mai 2010 22:32


Mit Programm öffnen... per doppelklick
 
Hi Leute,
Wiedermal ich:
Ich hab nen Programm, was nen bestimmten (ausgedachten z.B. *.bla) Dateityp öffnen kann, geschrieben...
Ist es möglich über Delphi hinzukriegen? Ich hab davon leider gar keine Ahnung...
Und wie wird das dann abgefragt?
Wird irgendwie die geöffnete Datei mitgeliefert? oder nur der Pfad?
Wie krieg ich das in die Registry??

Viele, Viele Fragen...
Danke schonmal im Voraus

con muchos saludos simon

Fussball-Robby 2. Mai 2010 22:58

Re: Mit Programm öffnen... per doppelklick
 
Du musst dein programm mit dem Dateitypen verknüpfen (wie das geht, weiß ich leider nicht genau - es gibt aber einiges hier im Forum). Wenn du dann soweit bist, wird der Name der geöffneten Datei als Parameter mitgeliefert (geht auch über Rechtsklick auf Datei -> Öffnen mit.. -> Dein Programm). Über ParamCount fragst du ab, wieviele Parameter es gibt. In ParamStr(0) steht der Dateiname (inklusive Pfad) der eigenen Exe, in ParamStr(1) dann der des 1. Parameters - in deinem Fall der der geöffneten Datei (auch inklusive Dateipfad).

Gruß

SimonRap 3. Mai 2010 18:56

Re: Mit Programm öffnen... per doppelklick
 
ok thx schonmal...
wenn ich jetzt ne neue Forum aufrufe mit checkboxen (für die verschiedenen Dateitypen), wie kann ich dann das über Delphi direkt und nicht von hand hinkriegen?
Also: die Verknüpfung meines Programmes mit den einzelnen Dateitypen

mfg simon

lbccaleb 3. Mai 2010 18:58

Re: Mit Programm öffnen... per doppelklick
 
Schau mal hier

SimonRap 3. Mai 2010 19:11

Re: Mit Programm öffnen... per doppelklick
 
jo thx das hab ich gesucht, aber ne fehlermeldung:
er kennt kein TRegistryhttp://simonrap.square7.ch/bla/simon.JPG
weiß jemand warum`?
mfg simon

wicht 3. Mai 2010 19:14

Re: Mit Programm öffnen... per doppelklick
 
Du musst "Registry" in die "uses"-Klausel mit aufnehmen.

SimonRap 3. Mai 2010 19:19

Re: Mit Programm öffnen... per doppelklick
 
ok also hab jetzt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if InstallExt('.SimRap', 'SimRap-Datei', 'Prog by SimonRap', ParamStr(0), '"%1"',0) then
   Showmessage('Dateiendung konnte erfolgreich registriert werden.');
end;

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;
an sich schön und gut... aber er macht nix... als rückgabewert kommt false... warum das?

mfg simon
[edit] also paar sachen hab ich geändert, weil er gemeckert hat:
if Extension '' then -->> if Extension = '' then
if Extension[1] '.' then -->> if Extension[1] = '.' then

könnnte es daran liegen?
[/edit]

wicht 3. Mai 2010 19:23

Re: Mit Programm öffnen... per doppelklick
 
Debugg doch mal..
Benutzt du Windows Vista oder höher? Dann versuch mal dein Programm im Explorer mit Rechtsklick->"Als Administrator ausführen" zu starten.

Delphi-Quellcode:
    if Extension[1] ='.' then
      Extension := '.' + Extension;
Sollte es nicht <> anstatt = heißen im if?

Und warum
Delphi-Quellcode:
  if Extension='' then
  begin
Soll die Erweiterung nur registriert werden, wenn keine angegeben wurde?

-Phantom- 3. Mai 2010 19:40

Re: Mit Programm öffnen... per doppelklick
 
Mir hat das hier schon gereicht
Delphi-Quellcode:
k := Application.ExeName;
reg := Tregistry.Create;
try
reg.RootKey := HKEY_CLASSES_ROOT;
reg.OpenKey('Ultimate Zip\Shell\open\',True);
reg.WriteString('','Öffnen mit UZip');
reg.OpenKey('command',True);
reg.WriteString('',k+'"%1"');
reg.CloseKey;
reg.OpenKey('.zip',True);
reg.WriteString('','Ultimate Zip');
finally
reg.Free;
end;
Ist für mein Entpacker.

SimonRap 3. Mai 2010 19:45

Re: Mit Programm öffnen... per doppelklick
 
jo danke leute^^

Luckie 3. Mai 2010 19:47

Re: Mit Programm öffnen... per doppelklick
 
Zitat:

Zitat von -Phantom-
Mir hat das hier schon gereicht

Von Fehlerbehandlung hältst du wohl nicht viel? :roll:

-Phantom- 3. Mai 2010 19:51

Re: Mit Programm öffnen... per doppelklick
 
Mit ParamCount und Paramstr machste das so :

Du legst eine Globale Variable an z.B
Delphi-Quellcode:
Aktive : Boolean ;
Das schreibst du dann bei Form.create rein :
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
Aktive := True;
...
Dann bei FormActivate :
Delphi-Quellcode:
procedure TForm2.FormActivate(Sender: TObject);
var
pfad : String;
begin
if (aktive) and (ParamCount>0) then
begin
aktive := False;
pfad := Paramstr(1);
________________________________________

Gruß

Mathias

DeddyH 3. Mai 2010 19:51

Re: Mit Programm öffnen... per doppelklick
 
Zitat:

Zitat von Luckie
Von Fehlerbehandlung hältst du wohl nicht viel? :roll:

Wozu? Man kann ja im Fehlerfall hier nachfragen :?

SimonRap 3. Mai 2010 19:53

Re: Mit Programm öffnen... per doppelklick
 
Vielen Dank...
normalerweise such ich auch erst, bevor ich frage, aber die Frage hat sich grad so ergeben...
Schande über mich :wall: ... ich werd nächste Mal zuerst Tante google und onkel delphipraxis.net/search.php benutzen...
mfg simon
nich wundern, ich schreib das noch bei 3 anderen themen rein^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 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 by Thomas Breitkreuz