Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 670

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

Есть некая программа с формой,
можно ли как нибудь запускать её коммандной строкой, без отображения формы на экране?

slava863 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: slava863 (статус: Посетитель)
Вопрос отправлен: 20 января 2010, 16:23
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, slava863!
Все достаточно просто. открываем dpr файл и находим там три строки вида
Application.Initialize;
Application.CreateForm(...);
Application.Run;
эти строки создают и запускают окно.
мы же делаем так - завернем их в условие.

if (paramCount >=1) and (paramstr(1) = 'console') then //запустили с параметром console
begin
  AllocateConsole();//включим консоль.
  writeln('write to console!');
//делаем другую работу.
  FreeConsole();
end
else begin
//тут старые 3 (а может и больше их) строки с Application.
end;
end;

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 21 января 2010, 15:38
Оценка за ответ: 5

Комментарий к оценке: Спасибо

Мини-форум вопроса

Всего сообщений: 26; последнее сообщение — 28 января 2010, 17:55; участников в обсуждении: 5.

Страницы: [« Предыдущая] [1] [2]

slava863

slava863 (статус: Посетитель), 27 января 2010, 16:53 [#21]:

vlsavkin:
Навёрнутый(по крайней мере для меня) поиск шт 15 процедур и функций и шт 10 параметров коммандной строки.
Похоже в этот if много не вставишь, или можно подключить процедуры из Search_and_replacement_.pas?

program Search_and_replacement;
 
uses
  Forms,  SysUtils, Windows,
    Search_and_replacement_ in 'Search_and_replacement_.pas' {Form1};
 
 
begin
 
if (paramCount >0) then //запустили с параметром console
    begin
 
      AllocConsole;//включим консоль.
        try
           writeln('write to console!');
//           Write('press ENTER: ');
//           Readln;
         finally
      FreeConsole;
        end;
    end
else
    begin
        {$R *.res}
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
    //  Application.ShowMainForm:=false;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end;
 
end.
slava863

slava863 (статус: Посетитель), 27 января 2010, 17:18 [#22]:

Поставим вопрос так:
есть проект с формой(поиск через форму Search_and_replacement_.pas) и отдельно console.pas(поиск из коммандной строки с параметрами), как их обьеденить(что бы при вводе ключа из ком. строки выполнялся код из console.pas, если ключа нет то код из формы Search_and_replacement_.pas )?

program Search_and_replacement;
 
uses
  Forms, SysUtils, Windows,
   Console1 in 'Console1.pas';
  Search_and_replacement_ in 'Search_and_replacement_.pas' {Form1},
begin
 
if (paramCount >0) then //запустили с параметром console
    begin
      AllocConsole;//включим консоль.
        try
           Write('press ENTER: ');
           Readln;
         finally
      FreeConsole;
        end;
    end
else
    begin
        {$R *.res}
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
    //  Application.ShowMainForm:=false;
      Application.CreateForm(TForm1, Form1);
  Application.Run;
    end;
 
 
end.

и console1
unit Console1;
 
 {$APPTYPE CONSOLE}
 
interface
 
uses
  Windows, SysUtils, Classes, IniFiles;
 
var
VersionIni : integer;
LandocsIniFile : TIniFile;
InsertIniFile : TIniFile;
LandocsIniFileName : string;
InsertIniFileName : string;
LogFileName : string;
NotChangeFileName : string;
InsertIniSections : TStringList;
InsertIniValues : TStringList;
i: integer;
j: integer;
strPar : string;
compName : string;
strsNotChange : TstringList;
ChangeIniFlag : Boolean;
 
implementation
 
function GetComputerNetName: string;//получение имени компа
var
buffer: array[0..255] of char;
size: dword;
begin
size := 256;
if GetComputerName(buffer, size) then
Result := buffer
else
Result := ''
end;  
...
begin
...
end.
Вадим К

Вадим К (статус: Академик), 27 января 2010, 17:22 [#23]:

а кто внутри if мешает вызывать свой код с других модулей? никто, только лень.
Галочка "подтверждения прочтения" - вселенское зло.
slava863

slava863 (статус: Посетитель), 28 января 2010, 13:10 [#24]:

Вадим К:
Так в этот if , не даёт вызвать процедуру из из другого модуля ругается(вызываю как обычно TUnit1.LoadCommandString):
[DCC Error] Search_and_replacement.dpr(15): E2076 This form of method call only allowed for class methods

program Search_and_replacement;
uses
  Forms,
  SysUtils,
  Windows,
  Console1 in 'Console1.pas',
  Search_and_replacement_ in 'Search_and_replacement_.pas' {Form1};
 
begin
if (paramCount >0) then //запустили с параметром console
    begin
      AllocConsole;//включим консоль.
        try
           TUnit1.LoadCommandString;//чтение параметров ком строки
           Write('press ENTER: ');
           Readln;
//           LoadCommandString;
         finally
      FreeConsole;
        end;
    end
else
    begin
        {$R *.res}
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
    //  Application.ShowMainForm:=false;
      Application.CreateForm(TForm1, Form1);
  Application.Run;
    end;
end.
min@y™

min@y™ (статус: Доктор наук), 28 января 2010, 13:43 [#25]:

uses Unit1 забыл.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
slava863

slava863 (статус: Посетитель), 28 января 2010, 17:55 [#26]:

спасибо

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 апреля 2026, 03:37
Выполнено за 0.05 сек.