Главная страница
    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
1-100792
Ancara
2003-07-17 09:52
2003.07.31
Ресурсы компонента


14-100957
Vlad Oshin
2003-06-30 19:48
2003.07.31
Вы верите в определение качеств человека по мимике, поче-


3-100592
jk
2003-07-08 18:28
2003.07.31
Как прервать перетаскивание (Drag&Drop)


1-100736
Nucl
2003-07-19 12:38
2003.07.31
monochrome mode


3-100568
62mkv
2003-07-08 13:12
2003.07.31
BDE 5.2





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский