Форум: "Основная";
Текущий архив: 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 слова сравнивать, те проверать (как в Вёртане)?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c