Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2007, 14:36   #1
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию paramstr

обясните ктото что такое paramstr
ато я знаю что 0 - это сама програма, а большэ ничего и незнаю
Обясните как этим пользоватся, ПЛИЗЗЗ
и ещё как запускать програму с параметром, например чтобы при запуске файла путь файла добавлялся в TListBox
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 07.06.2007, 14:51   #2
Fainder
Участник клуба
 
Регистрация: 15.02.2007
Сообщений: 1,112
По умолчанию

paramstr - это строка, которую набрал юзверь, чтобы запустить твою прогу.
Параметры в ней разделяются пробелами, во фрагментах, помещённых в ковычках, пробелы не учитываются. Например, допустим, твоя програ C:\prg.exe
C:\prg.exe myfile.txt file2.cmd "D:\My photos\1.jpg" D:\temp\1.tmp
Здесь paramstr(0)='C:\prg.exe'
paramstr(1)='myfile.txt'
paramstr(2)='file2.cmd'
paramstr(3)='D:\My photos\1.jpg'
paramstr(4)='D:\temp\1.tmp'
Цитата:
как запускать програму с параметром, например чтобы при запуске файла путь файла добавлялся в TListBox
При создании главной формы:
if fileexists(paramstr(1))=true then listbox1.items.add(paramstr(1));
Fainder вне форума Ответить с цитированием
Старый 07.06.2007, 14:54   #3
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Вот из справки:
///////////////////
Paramcount - показывает сколько параметров передано
Paramstr(0) - это имя с путем твоей программы
Paramstr(1) - имя первого параметра
Paramstr(2) - имя второго параметра и т.д.

Если ты запускаешь:

с:\myprog.exe /a -b22 c:\dev

то Paramcount будет равен 3
Paramstr(0) будет равен с:\myprog.exe
Paramstr(1) будет равен /a
Paramstr(2) будет равен -b22
Paramstr(3) будет равен c:\dev


Параметер это просто строка, набор букв, выполнить ее нельзя - ты можешь только проверить на наличие строки и если она присутствует, то выполнить какое либо действие, это действие ты должен написать сам, никаких стандартных действий нет.

Например у тебя возможно 3 параметра:

Если параметер = "/v" то выдать сообщение, если параметер "/c" то покрасить форму в синий цвет, если параметер "/f" - поменять заголовок формы:

if paramstr(1)='/v' then
showmessage('Parameter "/v" was found!');
if paramstr(1)='/c' then
color:=clBlue;
if paramstr(1)='/f' then
caption:='Parameter "/f" was found';

Поставь этот код на событие формы onActivate, откомпиллируй и попробуй запустить программу с одним из 3х указанных параметров и ты увидишь что произойдет.
////////////////////////////////////////////////

Последний раз редактировалось Alex21; 07.06.2007 в 14:58.
Alex21 вне форума Ответить с цитированием
Старый 07.06.2007, 15:37   #4
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

WriteString('MyExt\Shell\First_Acti on\command','',
'C:\MyApp.Exe /LotsOfParamaters %1');

обясните мне это!
при нажатии на строку контекстного меню, открывшыгося по нажатию на файл , этот файл (путь к ниму) добавлялся допустим в мою прогу C:\MyApp.Exe
Зарание всем большое спасибо!
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 07.06.2007, 16:06   #5
Fainder
Участник клуба
 
Регистрация: 15.02.2007
Сообщений: 1,112
Радость что-то знакомое

Итак, здесь 'MyExt\Shell\First_Action\command' - ссылка на твой тип файл, объявленный в той же процедуре раньше
'C:\MyApp.Exe /LotsOfParamaters %1' - это то, что ты будешь запускать, а точнее 'C:\MyApp.Exe - путь к проге, /LotsOfParamaters - какие нибудь папаметры, чтобы определить, что именно нужно делать с файлом и %1 - непосредственно имя файла.

Всю эту ботву можно упростить, например так:
WriteString('MyExt\Shell\First_Acti on\command','', 'C:\MyApp.Exe open %1 ');

Теперь в твоей проге при создании формы:
if fileexists(paramstr(2))= true then
if paramstr(1)= 'open' then ///ну дальше открываешь файл, имя которого передано в paramstr(2).
Соответственно, если во втором действии написать не open а print - то печать. В общем эти команды ограничены только возможностями твоей проги и фантазией (разумеется в пределах необходимого).
Вот реальный фрагмент кода для моего Спутника пользователя
в этом примере регистрируется тип файлов zwl - списки обоев и действия по клику на таком файле, а также элементы контекстного меню для него:
Цитата:
//обои
R := TRegIniFile.Create('');
with R do
begin
RootKey := HKEY_CLASSES_ROOT;
WriteString('.zwl','','ZWL');
WriteString('ZWL','','Список обоев Спутника пользователя');
WriteString('ZWL\DefaultIcon','',Pa th+'ZWL.ico');
WriteString('ZWL\Shell','','This_Is _Our_Default_Action');
WriteString('ZWL\Shell\First_Action ','','Изменить');
WriteString('ZWL\Shell\First_Action \command','',Path+'RegFiles.exe ZWL Edit %1');
WriteString('ZWL\Shell\This_Is_Our_ Default_Action','','Принять');
WriteString('ZWL\Shell\This_Is_Our_ Default_Action\command',
'',Path+'RegFiles.exe ZWL Go %1');
WriteString('ZWL\Shell\Second_Actio n','','Показ слайдов');
WriteString('ZWL\Shell\Second_Actio n\command','',Path+'RegFiles.exe ZWL Slide %1');
Free;end;
Следует отметить, что Path - это заранее определённая переменная, в которой храниться путь к моей проге
Path := ExtractFilePath(Application.Exename )
Fainder вне форума Ответить с цитированием
Старый 08.06.2007, 11:17   #6
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

"C:\MyApp.Exe -o %1" - здесь можно вместо поставить любое слово?? например add

Fainder, а как зделать так чтобы система забыла вообще о том что ты асоцыировал своё розшэрение, иными словами как удалить ту асоцыацыю из реестра?
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 08.06.2007, 11:26   #7
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Любое (ну тока тогда и в твоей программе должно другое быть, само собой).
Убрать ассоциацию - удали ключи, которые создал )
пыщь
JTG вне форума Ответить с цитированием
Старый 08.06.2007, 11:31   #8
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

"C:\MyApp.Exe open %1"

"C:\MyApp.Exe add %1"


if FileExists(paramstr(2))=true then
begin
if paramstr(1)='open' then
begin
playlist.add(paramstr(2));
form1.Play.Click;
end;
if paramstr(1)='add' then playlist.add(paramstr(2));
end;

когда выполнилось 'open' , а потом повторяя процэдуру с 'add' то открывается новая форма, а как зделать чтобы всё добавлялось в одну без создания новой формы
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Старый 08.06.2007, 14:11   #9
Fainder
Участник клуба
 
Регистрация: 15.02.2007
Сообщений: 1,112
По умолчанию

Вижу по предыдущему вопросу, разобрался без меня и это правильно, ведь ломать не строить, а удалить из реестра гораздо легче, чем туда поместить.

По поводу появления новой формы - она появлялась, появляется и появляться будет потому, что каждый раз, когда кликаешь на файл, приложение снова запускается в ещё одном экземпляре. Чтобы этого не происходило нужно(или):
1. Выхватывать наличие уже одного экземпляра приложения и произвести закрытие новой копии с передачей сообщения работающей
2. Связать с файлами не само приложение а другой экзешник и им регулировать передачу информации, хотя это по-ламерски Лучше первое выбирать!
Fainder вне форума Ответить с цитированием
Старый 08.06.2007, 15:29   #10
ZhekON
Форумчанин
 
Аватар для ZhekON
 
Регистрация: 24.01.2007
Сообщений: 323
По умолчанию

Цитата:
1. Выхватывать наличие уже одного экземпляра приложения и произвести закрытие новой копии с передачей сообщения работающей
КАК ЭТО ЗДЕЛАТЬ???
Всё проще чем вы думаете, нужно только правильно подойти к тому или иному вопросу?
ZhekON вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск