Jak zmusić pliki, aby otwierały się w istniejącej kopii programu

Vogel

Co tydzień na forum pojawia się mniej więcej takie pytanie. Odpowiedź jest prosta i wymaga pogrzebania w helpie. Oto ona:

  1. Piszesz procedurę rejestrująca rozszerzenie:
procedure Zarejestruj(Rozszerzenie, Sciezka: string);
var
  Reg: TRegistry;
  root: string;
begin
  Reg:=TRegistry.Create;
  Reg.RootKey:=HKEY_CLASSES_ROOT;
  Reg.OpenKey('.' + Rozszerzenie, True);
  Reg.WriteString('', Rozszerzenie + '_file');
  root:='' + Rozszerzenie + '_file\shell\open';
  Reg.OpenKey(root + '\command', true);
  Reg.WriteString('', sciezka);
  Reg.OpenKey(root + '\ddeexec', True);
  Reg.WriteString('', '[open(%1)]');
  Reg.OpenKey(root + '\ddeexec\Application', True);
  Reg.WriteString('', 'MojProgram');
  Reg.OpenKey(root + '\ddeexec\Topic', True);
  Reg.WriteString('', 'MojProgram'); 
  Reg.Free
end; 
  1. Wstaw na formę komponent TDDEServerConv i nazwij go MojProgram (tak samo jak string, który wrzucałeś powyżej do rejestru).

  2. Wrzuc TDDEServerItem i ustaw ServerConv na MojProgram.

  3. Teraz zdarzenie MojProgram.OnExecuteMacro:

begin
  s:=Msg[0];
  if Pos('open', s) > 0 then begin
    s:=Copy(s, 7, Length(s) - 9);
    //teraz otwórz plik s
  end
end;

3 komentarzy

a jak chciałbym żeby do TImage załadować jpeg'a, to co mam zrobić

  1. Doesn't work a nie Not work
  2. Działa, sam z tego korzystałem

Not work :/

[Dopisane]
Me nie znać angielski too good to speak smoothly :P
Musiałem trochę pozmeiniać żeby u mnie działało, otóż w kluczu \ddeexec\Application zamiast zapisywać MojProgram czy jak kto wymyśli trzeba by dać to co jest pod Application.Title tak myślę, bo jak robiłem na standartowym nazewnictwie Delphi [Unit1, Project1 itp] to z MojProgram wywalało błędy a jak dałem tam Project1 to odrazu działa :] Dobra trochę zamotane, ale komu nie będzie działała Vogelowa wersja to będzie wiedział czego się uczepić :P