Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.31;
Скачать: CL | DM;

Вниз

Ассоциирование файлов с программой   Найти похожие ветки 

 
alois   (2003-07-16 18:56) [0]

Уважаемые мастера, подскажите PLZ, как мне ассоциировать мою прогу с файлами определённых форматов. Буду очень признателен.
Чтобы кликнул, например, по RTF-файлу, и в моей проге он открылся. Я пытался через свойства папки - программа запускается, а содержимого файла не видно.


 
Иван Шихалев ©   (2003-07-16 19:08) [1]

В реестре прописать соответствующие подключи HKEY_CLASSES_ROOT. Открыв редактор реестра можно достаточно быстро разобраться, что и как прописывать.


 
Anatoly Podgoretsky ©   (2003-07-16 20:22) [2]

alois (16.07.03 18:56)
Путь использовал правильный (он самый простой), но наверно у тебя неверно написана программа.


 
alois   (2003-07-17 18:23) [3]

Я знаю, что это делается через HKEY_CLASSES_ROOT.
Я делал вот так:

var reg: Tregistry;
………………….
1 begin
2 reg:=Tregistry.Create; {создаём переменную класса}
3 reg.RootKey:=HKEY_CLASSES_ROOT; {определяем имя активного раздела}
4 reg.CreateKey(".cid"); {определяем расширение файла, созданного из-под нашего приложения}
5 reg.OpenKey(".cid",true); {Открываем ключ с расширением и редактируем}
6 reg.WriteString("","Cool.Document"); {прописываем строку значения}
7 reg.CloseKey; {закрываем активный ключ}
8 reg.CreateKey("Cool.Document\shell\open\command");{создаём новый ключ}
9 reg.OpenKey("Cool.Document\shell\open\command",true);
10 reg.WriteString(" ",InputString+"myapp.exe "%1""); {прописываем путь к приложению с параметром %1, о котором скажем позже}
11 reg.CloseKey; {закрываем ключ}
12 reg.CreateKey("Cool.Document\DefaultIcon"); {создаём новый ключ}
13 reg.OpenKey("Cool.Document\DefaultIcon",true); {разрешаем редактирование и открываем его}
14 reg.WriteString(" ",InputString+"Icon.ico,0"); {прописываем путь к иконке нашего регистрируемого документа}
15 reg.CloseKey; {закрываем ключ}
16 end;


Вот так обрабатывал командную строку:
S:=ANSISTRSCAN(windows.GetCommandLine,"""); {перевод указателя на заданный символ в командной строке, а именно "}
SS:=ANSIEXTRACTQUOTEDSTR(S,"""); {избавляемся от кавычек в командной строке и получаем "чистый" путь к файлу данных}

Но, ни то, ни другое, не получается. Не могли бы Вы мне подсказать правильный алгоритм. Очень нужно. Please.


 
horse ©   (2003-07-17 18:29) [4]

Создай ассоциацию в св-вах папки, посмотри что написало в реестр, удали, сравни с тем что пишет твоя программа


 
alois   (2003-07-17 22:12) [5]

Так я и в свойствах папки создавал ассоциацию, а всё равно никакого толка. Не могу ничего понять. Всё вроде так делаю.


 
nikus ©   (2003-07-17 22:30) [6]

>>S:=ANSISTRSCAN(windows.GetCommandLine,""");
>>SS:=ANSIEXTRACTQUOTEDSTR(S,""");

А не проще ли ss := ParamStr(1); ?


 
Anatoly Podgoretsky ©   (2003-07-17 22:55) [7]

ShowMessage(SS); ???


 
alois   (2003-07-18 19:15) [8]

Да, наверное, проще.
А вообще, мне хотя бы суметь открыть текстовый файл своей программой из контекстного меню Explorer. Никак не получается. Смотрел, куда другие прги прописываются в реестр, свою прописывал туда же - никакой реакции. У меня используется RxRichEdit. Может из-за этого?


 
мыш ©   (2003-07-19 08:58) [9]

Попробуй так, у меня работает:

procedure TForm1.registIcon;
var
R : TRegIniFile;
begin
R := TRegIniFile.Create("");
with R do
begin
RootKey := HKEY_CLASSES_ROOT;
WriteString(".www","","proga");
WriteString("proga","","Описание файла");
WriteString("proga\DefaultIcon","",installpath+extractfilename(application.exename)+",0");

WriteString("proga\Shell","","Default_Action");
{WriteString(proga\Shell\First_Action","","This is our first action");
WriteString("proga\Shell\First_Action\command","",
application.exename+" /LotsOfParamaters %1");}

WriteString("proga\Shell\Default_Action","","Контекстное меню Windiws текст");
WriteString("proga\Shell\Default_Action\command",
"",application.exename+" %1");
{
WriteString("proga\Shell\Second_Action",
"","This is our second action");
WriteString("proga\Shell\Second_Action\command",
"",installpath+extractfilename(application.exename)+" /TonsOfParameters %1");}
Free;
end;
end;

proga-название твоей программы


 
alois   (2003-07-19 11:01) [10]

Спасибо за совет, но пока почему-то не получается.


 
alois   (2003-07-19 17:24) [11]

Да, спасибо, теперь получилось. Дело было не в реестре.
Я сделал так:

var ss : string;
begin
SS:=ParamStr(1);
if fileexists(ss) then begin
Editor.Lines.LoadFromFile(ss);
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2003.07.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
3-100585
??
2003-07-08 18:46
2003.07.31
про ADO.


8-100846
Saracin
2003-02-05 19:32
2003.07.31
Как получить размеры картинки


3-100564
jack128
2003-07-08 12:47
2003.07.31
computed by - поля


1-100746
Катерина
2003-07-15 17:42
2003.07.31
TChart


14-100951
antonyan
2003-07-15 14:23
2003.07.31
Контрольная сумма файла