|
Вопрос # 3 670/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Есть некая программа с формой,
можно ли как нибудь запускать её коммандной строкой, без отображения формы на экране?
 |
Вопрос задал: 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 (статус: Посетитель), 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 (статус: Посетитель), 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 (статус: Посетитель), 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™ (статус: Доктор наук), 28 января 2010, 13:43 [#25]:
uses Unit1 забыл.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
slava863 (статус: Посетитель), 28 января 2010, 17:55 [#26]:
спасибо
|
Страницы: [« Предыдущая] [1] [2]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|