Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-9092
HDD
2002-02-05 16:13
2002.03.04
Люди добрые помогите пожалуйста


1-9229
s.dog
2002-02-15 12:47
2002.03.04
SOS !!! зачет сегодня, 2 маленьких вопроса.


4-9322
cad
2002-01-03 12:59
2002.03.04
Имя пользователя windows


6-9265
Evgenii
2001-12-14 23:09
2002.03.04
Народ, помогите, как звонить через Modem.


1-9233
staratel
2002-02-13 15:29
2002.03.04
web





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