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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2014, 15:13   #1
Serik2010
Пользователь
 
Регистрация: 26.05.2010
Сообщений: 26
Восклицание Как переделать форму в консольное приложение и получать параметры запуска

Ребята, очень нужна Ваша помощь!

У меня есть ооочень большой проект на Делфи 10. В нём куча разных форм.
Стоит задача: использовав "ядро" программы сделать "переключатель".

Т.е. если я запускаю свою прогу БЕЗ параметров, то она создаёт формы, и работает как всегда, если же у меня есть хотя бы ОДИН параметр, то я НЕ создаю формы и работаю в консоли, а желательно вообще в скрытом режиме.

Как это реализовать?

Что я нашёл:

Сразу же после program MyProject; вставил
Код:
{$AppType Console}.
Теперь у меня открывается пустая консолька и потом собственно программа с формами и окнами.

Далее нашёл как получить параметры запуска

Код:
if (paramstr(1) = '') then деляю что-то..
Так вот не понял как правильно параметры надо вбивать через командную чтобы вызвать:

Код:
MyProject.exe Param1 Param2
- так? если так, то у меня не работает тогда..

И как быть в инициализацией форм? они мне нужны, там тоже делаются вычисления (по-корявому, но что поделаешь)

Вообщем не имею опыта в таком деянии. Очень надеюсь на Вашу помощь. Заранее спасибо

Последний раз редактировалось Serik2010; 05.02.2014 в 15:56.
Serik2010 вне форума Ответить с цитированием
Старый 05.02.2014, 16:27   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

В файле DPR проверяй есть ли какие либо параметры запуска и если есть, то делай что тебе надо и завершай программу, иначе запускай формы.
Что-то типо этого должно получиться:
Код:
program Project1;

uses
  Forms,
  Windows,
  SysUtils,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  if LowerCase(ParamStr(1)) = '-msg' then
    begin
      // Тут делаешь то что тебе надо, например выводим сообщение
      MessageBox (0, 'Введён параметр -msg', 'Параметры',
        MB_OK or MB_ICONINFORMATION);
      // и закрываем прогу
      exit;
    end;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Если запустить эту программу так: Project1.exe -msg то программа выдаст сообщение и закроется, если параметра не будет, то откроется программа обычно с окном.

Последний раз редактировалось FaTaL; 05.02.2014 в 16:37.
FaTaL вне форума Ответить с цитированием
Старый 05.02.2014, 17:03   #3
Serik2010
Пользователь
 
Регистрация: 26.05.2010
Сообщений: 26
По умолчанию

Спасибо за ответ, но по сути это не консольное получается? или же не нужно писать этот {$AppType Console}.

И вопрос в том, что получается в куске
Код:
// Тут делаешь то что тебе надо, например выводим сообщение
      MessageBox (0, 'Введён параметр -msg', 'Параметры',
        MB_OK or MB_ICONINFORMATION);
      // и закрываем прогу
      exit;
Я могу делать по сути всё, что у меня включено в Uses, НО у меня часть процедур делается в файлах формы самой. Так ведь если параметр подходит, то у меня не создаётся форма, и тогда я не выполняю то что в ней...
Serik2010 вне форума Ответить с цитированием
Старый 05.02.2014, 17:06   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Так Вы же сами сказали, что Вам вообще не надо отображать никакое окно. И {$AppType Console} тоже не надо. А чтобы выполнить какие либо процедуры из других юнитов, то подключите их в Uses и спользуйте.
FaTaL вне форума Ответить с цитированием
Старый 05.02.2014, 17:06   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

вы же сами сказали что формы вам не нужны, зачем же их создавать?

ну а то что у вас в коде каша, так это вы сами и виноваты
eval вне форума Ответить с цитированием
Старый 05.02.2014, 17:28   #6
Serik2010
Пользователь
 
Регистрация: 26.05.2010
Сообщений: 26
По умолчанию

Хорошо, спасибо за ответы. +1 всем!

Буду пробовать..Просто эту кашу заварил не я, мне дали полусырой проект но с рабочим функционалом, сначала я его обернул в формы разные. а теперь нужно всё убрать)
Serik2010 вне форума Ответить с цитированием
Старый 05.02.2014, 17:34   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ну вот видите..
отделяйте мух от котлет сразу, в дальнейшем окупится сполна
код формы должен заниматься формой, а все что ее не касается отдельно и вызываться по мере необходимости
eval вне форума Ответить с цитированием
Старый 05.02.2014, 17:39   #8
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Как вариант ShowMainForm:=False; в файле проекта. Можно при этом посадить в трей иконку с менюшкой. Правда ни о какой консоли речь тут не идет. Просто само приложение будет работать как обычно, но без диалога с пользователем.
Но это очень плохой совет. Забудьте его сразу после прочтения.
northener вне форума Ответить с цитированием
Старый 05.02.2014, 17:39   #9
Serik2010
Пользователь
 
Регистрация: 26.05.2010
Сообщений: 26
По умолчанию

и еще один вопрос тогда, не сильно я в доступности процедур разобрался.

у меня в program в uses подключена форма, в которой есть процедура checkLengv();

Этот checkLengv(); я пишу прямо в програм. При наведении на него мне пишется что он объявлен в форме, ошибки как бы нету. НО когда компилю пишет:
[DCC Error] CoLiTecC.dpr(76): E2003 Undeclared identifier: 'checkLengv'

В чём пробелма? её еще где-то нужно объявлять?
Serik2010 вне форума Ответить с цитированием
Старый 05.02.2014, 20:37   #10
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Попробуйте его взывать так: ВашЮнит.checkLengv
FaTaL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стереть параметры запуска после запуска Anton911 Общие вопросы Delphi 18 14.04.2013 15:17
Как переделать консольное приложение в обычную программу? qwe1qwe2qwe3 Помощь студентам 0 18.05.2012 18:11
Как отменить параметры запуска kuzjaca Microsoft Office Access 3 23.11.2010 08:17
Как отловить параметры запуска приложения? Oskaria Помощь студентам 2 23.09.2010 07:56
Не консольное приложение с поддержкой ключей запуска, как? Человек_Борща Общие вопросы Delphi 3 24.02.2010 21:04