Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Реестр и левые данные [D5]


Страницы:   1 2

hooky-mars ©   (2002-02-12 21:18:00) 

Всем доброго времени суток!
Я написал (к примеру) графический редактор, и при инсталляции в реестр добавляется данные, которые позволяют устанавливать свои иконки и путь к прогре. И в результате при запуске файлов типа *.bmp,*.jpg,*.ico происходит запуск моей прогры, но сам файл не отображается. Я тут у себя на Левокумке узнал по слухам, что такая форма записи: ""c:\Program Files\Graphics\Graphics2.exe"%1" не только запускает прогру, но и отсылает ей данные на загрузку. Ну так вот подскажите, как обрабатывать ети данные? Или подскажите другое решение моей проблемы, главное чтобы все настройки ставились при инсталляции.
И ещё как в Inno Setup сделать так, чтобы при унинстале удалял и свои данные в реестре.
За участие в этой проблеме заранее большое спасибо!


hooky-mars   (2002-02-15 20:48:00) [1]

Набережных С.
Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!Пашет!
Спасибо всем, кто принимл фучасти в решении этого вопроса!!!!!!
И чтобы не создовать второго форума есть ещё вопросец. Как в MEmo слова сравнивать, те проверать (как в Вёртане)?


Набережных С.   (2002-02-15 20:25:00) [2]

C:\Project2.exe "%1"
Скопируй эту строку в буфер, вставь в реестр и попробуй.


hooky-mars   (2002-02-15 19:16:00) [3]

Анонимщик
Мне это и не нужно. Т.к. все коды будут создоваться в процессе инстала.


hooky-mars   (2002-02-15 18:51:00) [4]

1) valery_f
Реестр
Создаю:
HKEY_CLASSES_ROOT\.eeee--> (по умолчанию) "d"
HKEY_CLASSES_ROOT\d\shell\open\command--> (по умолчанию) ""C:\Project2.exe" %1"
D5 листинг кода на кнопке:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
if (ParamCount > 0) and FileExists(ParamStr(1)) then
SHOWMessage(ParamStr(1))
end;
2)Анонимщик нет.


valery_f   (2002-02-15 12:48:00) [5]

2kaif> таки не до ParamCount-1, а до ParamCount!

2hooky-mars> будь человеком, покажи что ты делаешь с реестром и код работы с командной строкой, а то мы еще долго будем спорить ни о чем... Можешь мылом.


kaif   (2002-02-15 11:21:00) [6]

это лажа:
for i := 0 to i <= ParamCount do
так как выражение i <= ParamCount имеет тип boolean, как правильно заметил компилятор. :))

нужно
for i := 0 to ParamCount - 1 do

а в данном случае просто обратись к ParamsStr(1), как правильно заметил >valery_f.


Анонимщик   (2002-02-15 10:43:00) [7]

Этот код пробовал?

//Use the registry to register your own filetype. uses registry; procedure TForm1.RegisterFileType(prefix:String; exepfad:String); var reg:TRegistry; begin reg:=TRegistry.Create; reg.RootKey:=HKEY_CLASSES_ROOT; //create a new key --> .pci reg.OpenKey("."+prefix,True); //create a new value for this key --> pcifile reg.WriteString("",prefix+"file"); reg.CloseKey; //create a new key --> pcifile 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 --> c:\project1.exe,0 reg.WriteString("",exepfad+",0"); reg.CloseKey; reg.OpenKey(prefix+"file\shell\open\command",True); //create value where exefile is stored --> c:\project1.exe "%1" reg.WriteString("",exepfad+" "%1""); reg.CloseKey; reg.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin RegisterFileType("pci","c:\project1.exe"); end;



hooky-mars   (2002-02-14 21:16:00) [8]

valery_f
Всё бы хорошо, но с реестром это дело не проходит!
Что делать? Помагите !


valery_f   (2002-02-14 12:29:00) [9]

Маленькое дополнение. Если файл ассоциирован с EXE и по нему щелкнуть - его имя с путем нормально попадет в ParamStr, а если файл перетащить и бросить на иконку EXE - то это имя с путем будет коротким (в стандарте 8.3)...

Теперь о деле:
ParamStr(0) присутствует всегда и содержит путь к самому EXE + его имя (оно же Application.ExeName).
ParamStr(1)..ParamStr(ParamCount) - параметры командной строки (от 1 до ParamCount, а не от 0 до ParamCount-1 !). Если EXE вызывался без параметров, то ParamCount=0.

Что касается пути к файлу - винда его подставляет, так что остается просто проверить его наличие, к примеру:

if (ParamCount > 0) and FileExists(ParamStr(1)) then ОТКРЫВАЕМ


Анонимщик   (2002-02-13 22:24:00) [10]

К какому данному файлу? Этот путь - весь целиком, от начала и до конца содержится в ParamStr(i). И только само имя файла, если этот файл находится в той же директории, что и экзешник.


hooky-mars   (2002-02-13 21:15:00) [11]

Анонимщик
Я сделал немного по другому, но результат ясен. Только он мне не чиго не дает. Так как мне нужен путь к данному файлу


Анонимщик   (2002-02-13 21:00:00) [12]

У тебя i каким типом объявлена?


hooky-mars   (2002-02-13 20:53:00) [13]

Анонимщик
[Error] Unit1.pas(30): Incompatible types: "Integer" and "Boolean" -->(for i := 0 to i <= ParamCount do)
И не до такой же степени я юзер( чтоб так жевать мне).


Анонимщик   (2002-02-13 20:35:00) [14]

Сделай вот как. Создай, чтобы ничего не напортить, файл,
например, mytest.mmm

Потом через Explore (не интернет эксплоуэр, а обычный, котрорым
просмативают директории и файлы открывают; можно еще щелкнуть правой кнопкой мышки по кнопке Start в левом нижнем углу экрана - выпадет список, там будет Explore) найди этот свой файл mytest.mmm и щелкни дважды мышкой по нему - якобы для открытия. Эксплоэр спросит, какой программой открывать этот твой файл - выпадет окошко с программами, в нем щелкаешь по кнопке Другая (т.е. программа не из тех, что он предлагает), найди свой этот экзешник и по нему щелкни. После этого твой экзешник запустится. А в нем сделай кнопку и повесь на нее процедуру:

for i := 0 to i <= ParamCount do
ShowMessage(ParamStr(i));

Все и увидишь. И хелп по ParamStr почитай.


hooky-mars   (2002-02-13 20:26:00) [15]

Анонимщик У меня работает только так:ParamStr.Count+1.
Но это решает проблему отчасти, так как остается только вытянуть путь к файлу.


Анонимщик   (2002-02-13 14:34:00) [16]

Ничего в Uses писать не нужно. ParamStr(i) будет работать правильно при i = от 0 до ParamStr.Count - 1.
Напиши кусок кода, где рушается, смеяться не будем.


hooky-mars   (2002-02-13 13:03:00) [17]

valery_f я так и сделал, всё равно ругается. Мож что-то надо прописывать в uses?


valery_f   (2002-02-13 12:05:00) [18]

См. функции ParamCount и ParamStr - в хелпе есть пример, разок попробуй - сам все увидишь. Кстати, в строке ""c:\Program Files\Graphics\Graphics2.exe"%1" перед "%1" нужен пробел!


Anatoly Podgoretsky (M)   (2002-02-12 22:31:00) [19]

hooky-mars © (12.02.02 22:22)
Лучше создавать, а так Memo.Lines.Count


hooky-mars   (2002-02-12 22:22:00) [20]

Чтобы не создовать нового форума
Как например в Memo посчитать кол-во строк?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо