Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Меню


Автор: RTV 20.4.2006, 18:03
Добрый вечер! подскажите пожайлуста каким образом можно запустить программу с параметром, так что бы в меню появлялся дополнительное меню.
Например
Выполняем программу Zakaz.exe -S или - setup, ну что то типа того. При открытии появлятся скрытое меню "Особые установки". и т.д. если можно покажите пример.  smile  

Автор: _hunter 20.4.2006, 18:10
ParamStr(1) (или второй -- не помню я ваших (делфийских) приколов) и смотри -S он или нет (или по всем пройдись (ParamCount()) в поисках нужного
 

Автор: x77 20.4.2006, 18:31
меню проектируется как обычно и целиком. далее, у меню "Особые установки" будет некий итем, на котором всё это меню висит. у этого итема есть удивительное свойство Visible. знающие люди говорят, что его можно попробовать поставить в FALSE smile 

а проверку - как сказал _hunter. в Form1.OnCreate прописать что-то типа 

MySecretItem.Visible := (AnsiUpperCase (ParamsStr (1)) = '-S'); 

Автор: Sunvas 21.4.2006, 07:31
А если ты зачочешь, чтобы параметров было много, то тогда придется еще фор заводить от 1 до paramcount, и в нем обрабатывать paramstr(n) для каждого параметра. 

Автор: AKN 21.4.2006, 08:13
Все правильно, в ParamStr(1) висит твой параметр в виде строки. Дальше ты можешь проверить его на то, что в параметре действительно указан -s и сделать видимым (нивидимым) некий итем в менюшке или другие действия.
Код

procedure TForm1.FormCreate(Sender: TObject);
var parametr:String;
begin
parametr:=ParamStr(1);
if UpperCase(parametr) = 'S' then //UpperCase() стоит для того, чтобы в качестве параметра понималось 's' и 'S'
  begin
    //  тут ставим итем меню видимым или выполняем другой код. В переменной parametr  висит твой первый по счету параметр
  end
end;
 

Автор: RTV 21.4.2006, 11:09
Делаю так 

  parametr:=ParamStr(1);
    if UpperCase(parametr) = 'as' then
    MainMenu1.Items.Items[4].Visible:=True;   не работает

Делаю так 

  parametr:=ParamStr(1);
    if UpperCase(parametr) = '123' then
    MainMenu1.Items.Items[4].Visible:=True;   работает
Почему??? 

Автор: x77 21.4.2006, 11:42
возможно потому, что UpperCase работает только с 7-ми битной кодировкой. попробуй всё-таки AnsiUpperCase. 

Автор: Демо 21.4.2006, 13:27
Цитата(RTV @  21.4.2006,  11:09 Найти цитируемый пост)
if UpperCase(parametr) = 'as' then
    MainMenu1.Items.Items[4].Visible:=True;   не работает


А ты отладчиком пройди. Тогда увидишь, что ты сравниваешь - первую строку, преобразованную в верхний регистр со строкой в нижнем регистре. 

Автор: x77 21.4.2006, 13:30
точно smile слона-то я и не заметил. 

Автор: RTV 21.4.2006, 13:58
Все работатет с AnsiLowerCase
Всем огромное спасибо.  smile  

Автор: Sunvas 22.4.2006, 07:36
Цитата(RTV @  21.4.2006,  11:09 Найти цитируемый пост)
 if UpperCase(parametr) = '123' then

Разве цифры имеют регистр (верхний/нижний)? smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)