Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Вниз

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


hooky-mars   (2002-02-12 21:18) [0]

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



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

Тебе при запуске программы нужно анализировать ParamStr. У нее есть Count - дает все строки через пробел. Насчет инсталляции - было в этом месяце в рассылке, напомни завтра, пришлю, если не найдешь - там написано, что в реестр прописывать. А ParamStr и из оболочки компилятора задать можн, там пункт меню есть такой - Parameters, кажись, поэкспериментируй.



hooky-mars   (2002-02-12 22:19) [2]

Я по справкам нашел ParamStr и Count как ети ставить, но он ругается на Count. Разжуй пожалуйста, а то я ведь только не давно из под QBasic.



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

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



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

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



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

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



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

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



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

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



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

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



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

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

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

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

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



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

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



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

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



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

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



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

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



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

Маленькое дополнение. Если файл ассоциирован с 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 ОТКРЫВАЕМ



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

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



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

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

//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;




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

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

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

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



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

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

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



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

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)Анонимщик нет.



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

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



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

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



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

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




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.76 MB
Время: 0.033 c
1-9189            Скалли                2002-02-08 13:27  2002.03.04  
Переход по элементам формы по ENTER


1-9200            KS                    2002-02-13 15:36  2002.03.04  
Borland Delphi


14-9278           Сергей Чурсин         2001-08-07 19:14  2002.03.04  
---|Ветка была без названия|---


6-9244            rubin                 2001-12-11 11:57  2002.03.04  
Выход в интернет ч-з HTTPS Proxi


1-9117            romulas               2002-02-13 14:33  2002.03.04  
Help!!!