Witam!
Mój program, korzysta z poniższej procedury na zarejestrowanie rozszerzenia pliku w systemie(z torry).
procedure TMainFrm.RegisterFileType(prefix: string; exepfad: string; ikona : byte);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CLASSES_ROOT;
//create a new key --> .cnc
reg.OpenKey('.' + prefix, True);
try
//create a new value for this key --> cncfile
reg.Writestring('', prefix + 'file');
finally
reg.CloseKey;
end;
//create a new key --> cncfile
reg.CreateKey(prefix + 'file');
//create a new key pcifile\DefaultIcon
reg.OpenKey(prefix + 'file\DefaultIcon', True);
//and create a value where the icon is stored --> Sciezka\program.exe,0
try
reg.Writestring('', exepfad + ','+inttostr(ikona));
finally
reg.CloseKey;
end;
reg.OpenKey(prefix + 'file\shell\open\command', True);
//create value where exefile is stored --> sciezka\program.exe "%1"
try
reg.Writestring('', exepfad + ' "%1"');
finally
reg.CloseKey;
end;
finally
reg.Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
Po zarejestrowaniu rozszerzenia cnc, mogę teraz uruchamiać pliki wygenerowane przez mój program, po dwukrotnym kliknięciu w eksploratorze Windows. I prawidłowo. Wszystko jest OK, ale mam taki problem. W OnCreate programu mam:
if (ParamCount > 0) then
begin
OtworzPlikCNC(ParamStr(1));
end;
A w procedurze OtworzPlikCNC mam instrukcję, ktora ma mi odczytać nazwę otwieranego pliku. Nazwa jest pobierana, ale w starym systemie, tj. czytane jest 8 znaków tylko, np: nazwa pliku :Projekt 2(Odczytywanie) jest czytana jako: PROJEK~2(rozszeżenie ucinam).
Dlaczego tak się dzieje?
Używam takiej instrukcji do odczytania tej nazwy:
nazwa:=copy(ExtractFileName(Sciezka),1,(length(ExtractFileName(Sciezka))-4));
zmienna nazwa jest typu string, sciezka tez(podawana jako parametr w procedurze, czyli ParamStr(1).
Pozdr
Pepe