Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Приложение в контекстное меню файла открыть с помо 
:(
    Опции темы
Sanek123
Дата 11.2.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



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

В общем можно ли поставить пункт "Открыть с помощью... (мое приложение)" в контекстное меню под винду, точнее чтобы таким образом приложение открыло файл, и желательно чтобы приложение не переписывать на чистое WinApi.
--------------------
Вас разыскивают бойцы 139-го порта...
PM MAIL   Вверх
Virtuals
Дата 12.2.2009, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



Код

procedure TForm1.FormCreate(Sender: TObject);
begin
if paramcount=1 then createfile(ParamStr(1)...


PM MAIL ICQ   Вверх
Sanek123
Дата 12.2.2009, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



Если можно поподробнее.
--------------------
Вас разыскивают бойцы 139-го порта...
PM MAIL   Вверх
Virtuals
Дата 12.2.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 476
Регистрация: 27.11.2006

Репутация: 4
Всего: 11



когда вы в проводнике вызываете открыть с помощью (напр по файлу вася.тхт открыть с помощью myprog.exe)
то оболочка вызовет ваш myprog.exe а параметром передасть вася.тхт, и комманда будет выглядеть так
Код

myprog.exe с:\этокаталоггдележитфайлвася\вася.тхт

соответственно вам осталось узнать что запустились с параметром и получить его

Код

procedure TForm1.FormCreate(Sender: TObject); \\при создании формы
begin
if paramcount=1 \\если количество переданных параметров равно 1
 then 
   createfile(ParamStr(1)... \\открываем файл с именем переданным как первый параметр.


PM MAIL ICQ   Вверх
Данкинг
Дата 12.2.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Не помню, откуда у меня этот пример, но, если я правильно понял, это то, что нужно:

Код

uses  
  Registry;  
    
procedure AddFileMenue(FilePrefix, Menue, Command: string);  
var  
  reg: TRegistry;  
  typ: string;  
begin  
  reg := TRegistry.Create;  
  with reg do  
  begin  
    RootKey := HKEY_CLASSES_ROOT;  
    OpenKey('.' + FilePrefix, True);  
    typ := ReadString('');  
    if typ = '' then  
    begin  
      typ := Fileprefix + 'file';  
      WriteString('', typ);  
    end;  
    CloseKey;  
    OpenKey(typ + '\shell\' + Menue + '\command', True);  
    WriteString('', command + ' "%1"');  
    CloseKey;  
    Free;  
  end;  
end;  
procedure DeleteFileMenue(Fileprefix, Menue: string);  
var  
  reg: TRegistry;  
  typ: string;  
begin  
  reg := TRegistry.Create;  
  with reg do  
  begin  
    RootKey := HKEY_CLASSES_ROOT;  
    OpenKey('.' + Fileprefix, True);  
    typ := ReadString('');  
    CloseKey;  
    OpenKey(typ + '\shell', True);  
    DeleteKey(Menue);  
    CloseKey;  
    Free;  
  end;  
end;  
{ Example / Beispiel:}  
procedure TForm1.Button1Click(Sender: TObject);  
begin  
  { Register the Menuepoint: }  
  AddFileMenue('rtf', 'Edit with Notepad', 'C:\Windows\system\notepad.exe');  
  {  
   If you now click with the right mousebutton on a *.rtf-file then  
   you can see a Menuepoint: "Edit with Notepad".  
   When Click on that point Notepad opens the file.  
   Wenn man nun mit der rechten Maustaste im Explorer auf eine *.rtf-Datei Clickt,  
   dann erscheint dort der Menuepunkt "Edit with Notepad".  
   Beim Clicken darauf, цffnet Notepad diese Datei.  
 }  
end;  
procedure TForm1.Button2Click(Sender: TObject);  
begin  
  {  
  Unregister the Menuepoint / Undo your changes in the Registry:  
  Lцscht den Menuepunkt wieder aus der Registry:  
 }  
  DeleteFileMenue('rtf', 'Edit with Notepad');  
end; 
 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Sanek123
Дата 12.2.2009, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



Вот эта тема про Parametr мне понравилась, потому что вопрос собственно не столько в том чтоб запихнуть ярлык в контекст, сколько дать понять приложению что и как оно должно открыть. Т.е. указать приложению, скажем, путь к открываемому файлу. Если можно, поясните, так сказать на пальцах как передать и получить эти параметры, или пример.
--------------------
Вас разыскивают бойцы 139-го порта...
PM MAIL   Вверх
Snowy
Дата 12.2.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Читай справку по ParamCount и ParamStr.
Поюзай поиск по форуму.
Поюзай любую книгу по паскалю или дельфи.
PM MAIL   Вверх
Sanek123
Дата 12.2.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



Не будете ли вы так любезны дать небольшой пример кода: Какие параметры, откуда и куда?
--------------------
Вас разыскивают бойцы 139-го порта...
PM MAIL   Вверх
Sanek123
Дата 13.2.2009, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 22.10.2008

Репутация: нет
Всего: нет



Благодарю за содействие, разобрался сам:
Код


procedure TForm1.FormCreate(Sender: TObject);
Var
 FileName: string;
begin
DragAcceptFiles(Handle, true);
if ParamCount()=1 then begin
    FileName := ParamStr(1);
Memo1.Lines.LoadFromFile(FileName);
end;
end;


А по поводу инициализации управляющего приложения - через реестр (hkey_root).
--------------------
Вас разыскивают бойцы 139-го порта...
PM MAIL   Вверх
Poseidon
Дата 16.2.2009, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(Snowy @  12.2.2009,  15:43 Найти цитируемый пост)
Читай справку по ParamCount и ParamStr.Поюзай поиск по форуму.Поюзай любую книгу по паскалю или дельфи.
+ учебник по русскому языку, а то в первом посте вообще ни черта не понятно.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0792 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.