Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];

Вниз

Как сделать,чтоб форма не показывалась?   Найти похожие ветки 

 
Abcdef123   (2009-06-02 06:36) [0]

Здравствуйте, Мастера.
Извините за примитивный вопрос.
Пишу небольшой проект, всего одна форма (автоматически создаваемая, она же объявдена как главная).
Цель этого проекта - создать кое-какой датасет и потом передать этот датасет в другую ВНЕШНЮЮ программу.
Так вот надо чтоб мой маленький проект работал в двух режимах. В зависимости от параметров вызова, форма будет показываться или не будет. Если будет - тут нет проблем. А вот если не надо показывать, то создаем датасет на основе переданных параметров и сразу вызываем внешнюю программу. При закрытии внешней программы сразу надо чтоб и мой проект закрывался. И это происходит. Но, форма проекта все-равно мельком показывается при закрытии. Хоть это и не надолго, но не красиво все равно. Можно как то этого избежать?
Для информации...на FormShow у меня так:
 if ParamStr(3) = "" then   //надо показать форму
   SetScreenDefaults
 else   //не надо показывать форму
 begin
   MainForm.OnShow := nil;  //пробовала так
   ShowWindow(FRM_MainForm.Handle,SW_HIDE); //или так
   Botton1.Click;  //здесь вызывается внешняя программа
   Close;    //здесь форму закрываем, и она мелькает один раз при закрытии
 end;


 
qwerty321   (2009-06-02 08:31) [1]

F1 Application.ShowMainForm()


 
Dennis I. Komarov ©   (2009-06-02 09:22) [2]

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


 
clickmaker ©   (2009-06-02 11:07) [3]

в dpr
if ParamStr(3) = "" then
 Application.CreateForm(TMyMainForm, MyMainForm);


 
oldman ©   (2009-06-02 11:14) [4]


> При закрытии внешней программы сразу надо чтоб и мой проект
> закрывался. И это происходит. Но, форма проекта все-равно
> мельком показывается при закрытии. Хоть это и не надолго,
>  но не красиво все равно.


Напиши на форме красиво "Щас выполню работу и закроюсь" и sleep секунд на 5.


 
Abcdef123   (2009-06-03 08:53) [5]

To Dennis I. Komarov [2]
На форме происходят обработки параметнов проекта - которые потом передаются во внешний проект. И поскольку, мой проект должен работать в 2= режимах, давать пользователю на форме выбрать критерии и запустить обтаботку (в этом случае форму показываю), а иногда сами параметры передаю программе и обработку как бы симулирую, то есть процесс в обеих случаях должен быть одинаков для формирования параметров внешней программы. Вот разница только в одном - показ или непоказ формы.

To clickmaker  [3]
это не подойдет по причине описанной to [2]


 
Palladin ©   (2009-06-03 09:18) [6]


> На форме происходят обработки параметнов проекта

Ну так убери эту обработку параметнов из методов формы и следуй [2]


 
Dennis I. Komarov ©   (2009-06-03 09:53) [7]


> то есть процесс в обеих случаях должен быть одинаков для
> формирования параметров внешней программы. Вот разница только
> в одном - показ или непоказ формы.

т.е. без формы ты ничего обрабатывать не можешь?


 
Abcdef123   (2009-06-03 10:14) [8]

To Palladin [6]
Не могу убрать, все данные завязаны на компонетны этой формы, такие как радиобоксы, листбоксы - данные в них загружаются из переданных параметров ИЛИ загружены в зависимости от ручного выбора критериев пользователем. И на основаннии того, какие данные определилсь в этих компонентах формы - от этого зависит формирование параметров во внешнюю программу.
Поскольку вручную польвователем процесс отработан, работает хорошо, то уже нет смысла разделять вообще функциональность всей обработки и прописывать все заново второй вариант только оттого, что форму показывать не надо.
Я надеюсь, что можно обойтись как то проще. То есть вопрос все еще остается прежним как избежать мелькания формы? :-\


 
Dennis I. Komarov ©   (2009-06-03 10:26) [9]


> Abcdef123   (03.06.09 10:14) [8]

У тебя не правильная программа. Параметры не должны хранится в форме и контролах на ней. Они предназначены для отображения и изменения параметров, но не для хранения... Если тебя устраивает такая не правильная программа, то пусть себе мигает.


 
Плохиш ©   (2009-06-03 10:31) [10]


> Abcdef123   (03.06.09 10:14) [8]

Попытка приделать костыль...

PS. Неужели [1] так и не помогло? Стоит обдумать вопрос о найме программиста.


 
{RASkov} ©   (2009-06-03 10:56) [11]

> [8] Abcdef123   (03.06.09 10:14)

program Project1;
uses Forms, Unit1 in "Unit1.pas" {Form1};

{$R *.res}
begin
 Application.Initialize;
 Application.ShowMainForm:=False;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

Ничего не моргает....
Но всеж действительно контролы не для хранения параметров, а для их отображения....


 
Abcdef123   (2009-06-03 11:11) [12]

To Плохиш [10]
[1] не помогло, пыдает ошибку runtime error при выполнении программы :-(


 
Palladin ©   (2009-06-03 11:14) [13]


> пыдает ошибку runtime error при выполнении программы

больно слышать (С) ИШ


 
Плохиш ©   (2009-06-03 11:46) [14]


> Abcdef123   (03.06.09 11:11) [12]

Наймите программиста.


 
Abcdef123   (2009-06-03 12:13) [15]

To {RASkov} [11]
А что происходит у вас после выполнения Application.Run;  ?
У меня ничего не происходит, просто "висит", а мне ж надо, чтоб закончилось выполнение этой программы.

Я всем благодарна за комментарии насчет обработки без использования контролов, учту на будущее. Просто в данной ситуации давайте исходить из того что есть. В общем, если я прописываю, как сказал {RASkov}, то на этапе создания формы в процедуре FormCreate
1. проводим обработку
2. Вызываем внешнюю программу
3. После закрытия внешней программы выполняем Close; (закрываем форму).
Так вот как раз после закрытия формы у меня наступает выполнение строки dpr Application.Run; вот тут и сидит :-( Что не так?


 
Dennis I. Komarov ©   (2009-06-03 12:20) [16]


> то на этапе создания формы в процедуре FormCreate
> 1. проводим обработку
> 2. Вызываем внешнюю программу
> 3. После закрытия внешней программы выполняем Close; (закрываем
> форму).


Угу?


 
{RASkov} ©   (2009-06-03 12:29) [17]

> [15] Abcdef123   (03.06.09 12:13)

Убрать из FormCreate основную логику программы :) А Close там делать бесполезно....


 
Abcdef123   (2009-06-03 12:34) [18]

To Dennis I. Komarov [16]
УГУ!
1 на этапе создания ...так назвала всю последовательность действий, не правильно выразилась или принципиально что то не так?
2. Мне все равно где выполнить Close;   , главное, чтоб программа закончила работу.А как иначе ее закончить автоматически если мы форму не показываем? В любом случае что то не так, раз само приложение остается сидеть на application.run

Что не так, а?


 
{RASkov} ©   (2009-06-03 12:39) [19]

> [18] Abcdef123   (03.06.09 12:34)

если просто тупо убить свой процесс, то на FormCreate сделай Halt....
Но учти, что при таком подходе не будут выполнены OnClose и OnCloseQuery...


 
Abcdef123   (2009-06-03 12:40) [20]

To {RASkov} [17]
А куда переместить?
Если мы не показываем форму, после выполнения FormCreate, как (откуда, из какой процедуры) мне вызвать основную логику программы?


 
oldman ©   (2009-06-03 12:41) [21]

Можно и в лоб. Убрать модуль который выполняется без формы вот так:


program Project1;
uses Forms, Unit1 in "Unit1.pas" {Form1};

{$R *.res}
begin
Application.Initialize;
if ФормуНадоПоказать then Form1.ShowModal;
Модуль который надо;
end.


:))


 
oldman ©   (2009-06-03 12:42) [22]

В [21] ошибок полно, но смысл понятен?


 
{RASkov} ©   (2009-06-03 12:44) [23]

> [20] Abcdef123   (03.06.09 12:40)
> Если мы не показываем форму, после выполнения FormCreate,
> как (откуда, из какой процедуры) мне вызвать основную логику
> программы?

Да хоть из *.dpr...


 
{RASkov} ©   (2009-06-03 12:52) [24]

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.


Но мне не нравится такой подход.... ибо лучше переделать проект так, что бы если форма не нужна, то и не создавать ее....


 
Abcdef123   (2009-06-03 12:53) [25]

{RASkov} расцеловала бы! :-) Получилось наконец-то!
Огромное спасибо всем откликнувшимся!!!
И особое спасибо {RASkov}У  :-)


 
Dennis I. Komarov ©   (2009-06-03 13:03) [26]


> {RASkov} ©   (03.06.09 12:44) [23][24]

И не стыдно тебе учить такому? :)))))


 
Плохиш ©   (2009-06-03 13:06) [27]

Фраза из [0]

> В зависимости от параметров вызова, форма будет показываться
> или не будет.

Вот и подправьте в своём костыле - В зависимости от параметров вызова, выполнять Application.Run или не выполнять.


 
Хитрий Лис   (2009-06-03 13:08) [28]

Вот так общими усилиями и получаются из женщин программистки :)


 
Плохиш ©   (2009-06-03 13:09) [29]


> Хитрий Лис   (03.06.09 13:08) [28]

Контора рога и копыта экономит на программистах ;-)


 
Abcdef123   (2009-06-03 13:13) [30]

To Dennis I. Komarov [26]
А что не так {RASkov} подсказал? Он обратил мое внимание, что мой подход не хорош, но исходя уж раз мне так надо, он написал мне как сделать чтоб хоть работало.
Или этот прием вызова процедуры из dpr вообще "плохой тон" программирования?


 
{RASkov} ©   (2009-06-03 13:14) [31]

> [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.

можно было и без меня догадаться :)


 
Dennis I. Komarov ©   (2009-06-03 13:22) [32]


> сделать чтоб хоть работало.

и есть

> "плохой тон" программирования

Да и не только...


 
Плохиш ©   (2009-06-03 13:25) [33]


> > "плохой тон" программирования
>

А что, в этой ветке было программирование? 8-О


 
Dennis I. Komarov ©   (2009-06-03 13:26) [34]


> begin
>  if ParamStr(3)="" then OsnovnayaLogika("передали параметр
> в основную логику :)")

>  else begin
>   Application.Initialize;
>   Application.CreateForm(TForm1, Form1);
...


Дык вся логика в форме, откуда параметры брать? :)


 
{RASkov} ©   (2009-06-03 20:09) [35]

> [34] Dennis I. Komarov ©   (03.06.09 13:26)
> Дык вся логика в форме, откуда параметры брать?

А ну да.... точно.... ступил, там же вся логика в компонентах.... сорри... виноват :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.006 c
15-1242460113
PEAKTOP
2009-05-16 11:48
2009.07.26
Обновился Delphi RoadMap


15-1243085277
@!!ex
2009-05-23 17:27
2009.07.26
Не работает Shared Section.


4-1213170511
Игорь Х
2008-06-11 11:48
2009.07.26
Как получить информацию о памяти запущенного процесса?


2-1243489065
lewka
2009-05-28 09:37
2009.07.26
Работа с IP-адресом


15-1243234883
b/@.
2009-05-25 11:01
2009.07.26
Какой метод разработки предпочитаете ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский