![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать,чтоб форма не показывалась? [D6, XP]
Abcdef123 © (2009-06-02 06:36:00)Здравствуйте, Мастера.
Извините за примитивный вопрос.
Пишу небольшой проект, всего одна форма (автоматически создаваемая, она же объявдена как главная).
Цель этого проекта - создать кое-какой датасет и потом передать этот датасет в другую ВНЕШНЮЮ программу.
Так вот надо чтоб мой маленький проект работал в двух режимах. В зависимости от параметров вызова, форма будет показываться или не будет. Если будет - тут нет проблем. А вот если не надо показывать, то создаем датасет на основе переданных параметров и сразу вызываем внешнюю программу. При закрытии внешней программы сразу надо чтоб и мой проект закрывался. И это происходит. Но, форма проекта все-равно мельком показывается при закрытии. Хоть это и не надолго, но не красиво все равно. Можно как то этого избежать?
Для информации...на FormShow у меня так:
if ParamStr(3) = '' then //надо показать форму
SetScreenDefaults
else //не надо показывать форму
begin
MainForm.OnShow := nil; //пробовала так
ShowWindow(FRM_MainForm.Handle,SW_HIDE);//или так
Botton1.Click; //здесь вызывается внешняя программа
Close; //здесь форму закрываем, и она мелькает один раз при закрытии
end;
{RASkov} (2009-06-03 20:09:00) [1]> [34] Dennis I. Komarov © (03.06.09 13:26)
> Дык вся логика в форме, откуда параметры брать?
А ну да.... точно.... ступил, там же вся логика в компонентах.... сорри... виноват :)
Dennis I. Komarov (2009-06-03 13:26:00) [2]
> begin
> if ParamStr(3)='' then OsnovnayaLogika('передали параметр
> в основную логику :)')
> else begin
> Application.Initialize;
> Application. CreateForm(TForm1, Form1);
...
Дык вся логика в форме, откуда параметры брать? :)
Плохиш (2009-06-03 13:25:00) [3]
> > "плохой тон" программирования
>
А что, в этой ветке было программирование? 8-О
Dennis I. Komarov (2009-06-03 13:22:00) [4]
> сделать чтоб хоть работало.
и есть
> "плохой тон" программирования
Да и не только...
{RASkov} (2009-06-03 13:14:00) [5]> [26] Dennis I. Komarov © (03.06.09 13:03)
Чуть-чуть переделали:
program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
if ParamStr(3)='' then OsnovnayaLogika('передали параметр в основную логику :)')
else begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.
------------------------------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
procedure OsnovnayaLogika(s: String);
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
OsnovnayaLogika('передали параметр в основную логику :)');
end;
procedure OsnovnayaLogika(s: String);
begin
ShowMessage(S);
ShowMessage('Всё сделали!');
end;
end.
можно было и без меня догадаться :)
Abcdef123 (2009-06-03 13:13:00) [6]To Dennis I. Komarov [26]
А что не так {RASkov} подсказал? Он обратил мое внимание, что мой подход не хорош, но исходя уж раз мне так надо, он написал мне как сделать чтоб хоть работало.
Или этот прием вызова процедуры из dpr вообще "плохой тон" программирования?
Плохиш (2009-06-03 13:09:00) [7]
> Хитрий Лис (03.06.09 13:08) [28]
Контора рога и копыта экономит на программистах ;-)
Хитрий Лис (2009-06-03 13:08:00) [8]Вот так общими усилиями и получаются из женщин программистки :)
Плохиш (2009-06-03 13:06:00) [9]Фраза из [0]
> В зависимости от параметров вызова, форма будет показываться
> или не будет.
Вот и подправьте в своём костыле - В зависимости от параметров вызова, выполнять Application.Run или не выполнять.
Dennis I. Komarov (2009-06-03 13:03:00) [10]
> {RASkov} © (03.06.09 12:44) [23][24]
И не стыдно тебе учить такому? :)))))
Abcdef123 (2009-06-03 12:53:00) [11]{RASkov} расцеловала бы! :-) Получилось наконец-то!
Огромное спасибо всем откликнувшимся!!!
И особое спасибо {RASkov}У :-)
{RASkov} (2009-06-03 12:52:00) [12]
program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.ShowMainForm:=False;
Application.CreateForm(TForm1, Form1);
Form1.OsnovnayaLogika('передали параметр в основную логику :)');
Application.Run;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure OsnovnayaLogika(s: String);
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
//Нафик отсюда всё
end;
procedure TForm1.OsnovnayaLogika(s: String);
begin
ShowMessage(S);
ShowMessage('Всё сделали и закрылись');
Close;
end;
end.
Но мне не нравится такой подход.... ибо лучше переделать проект так, что бы если форма не нужна, то и не создавать ее....
{RASkov} (2009-06-03 12:44:00) [13]> [20] Abcdef123 (03.06.09 12:40)
> Если мы не показываем форму, после выполнения FormCreate,
> как (откуда, из какой процедуры) мне вызвать основную логику
> программы?
Да хоть из *.dpr...
oldman (2009-06-03 12:42:00) [14]В [21] ошибок полно, но смысл понятен?
oldman (2009-06-03 12:41:00) [15]Можно и в лоб. Убрать модуль который выполняется без формы вот так:
program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
if ФормуНадоПоказать then Form1.ShowModal;
Модуль который надо;
end.
:))
Abcdef123 (2009-06-03 12:40:00) [16]To {RASkov} [17]
А куда переместить?
Если мы не показываем форму, после выполнения FormCreate, как (откуда, из какой процедуры) мне вызвать основную логику программы?
{RASkov} (2009-06-03 12:39:00) [17]> [18] Abcdef123 (03.06.09 12:34)
если просто тупо убить свой процесс, то на FormCreate сделай Halt....
Но учти, что при таком подходе не будут выполнены OnClose и OnCloseQuery...
Abcdef123 (2009-06-03 12:34:00) [18]To Dennis I. Komarov [16]
УГУ!
1 на этапе создания ...так назвала всю последовательность действий, не правильно выразилась или принципиально что то не так?
2. Мне все равно где выполнить Close; , главное, чтоб программа закончила работу.А как иначе ее закончить автоматически если мы форму не показываем? В любом случае что то не так, раз само приложение остается сидеть на application.run
Что не так, а?
{RASkov} (2009-06-03 12:29:00) [19]> [15] Abcdef123 (03.06.09 12:13)
Убрать из FormCreate основную логику программы :) А Close там делать бесполезно....
Dennis I. Komarov (2009-06-03 12:20:00) [20]
> то на этапе создания формы в процедуре FormCreate
> 1. проводим обработку
> 2. Вызываем внешнюю программу
> 3. После закрытия внешней программы выполняем Close; (закрываем
> форму).
Угу?