Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
8-100839
[Baradoo]
2003-03-18 22:48
2003.07.31
Растягивание Wave на определенную длину...


3-100578
Alex_x
2003-07-08 14:36
2003.07.31
MultiSelect в QuantumGrid4


14-100891
HolyGlory
2003-07-15 18:36
2003.07.31
запись в Tevent, созданном в другом процессе.


14-100981
Soft
2003-07-10 11:23
2003.07.31
Пишушие CD-ROM


1-100805
Kosha
2003-07-17 10:06
2003.07.31
Как открыть и закрыть другое приложение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский