Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не завершается процесс программы. 
:(
    Опции темы
Boyur
Дата 30.5.2012, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 13.12.2007
Где: Новороссийск

Репутация: нет
Всего: нет



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


Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
Const
  login='vasya';
  pass='pass';

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (Edit1.Text=login) and (Edit2.Text=pass)
    then
      begin
       Form2.Show;
       Form1.Visible:=false;
      end
    else
    ShowMessage('Ошибка!');
end;

end.


Код

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Label1: TLabel;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  TEST_app.zip 9,05 Kb
PM MAIL ICQ   Вверх
northener
Дата 30.5.2012, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Boyur @  30.5.2012,  17:03 Найти цитируемый пост)
проблема в том, что если откроется окно приветствие, то после закрытия его, форма закроется а приложение будит весеть в задачах.

А как нужно сделать?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
kami
Дата 30.5.2012, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



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

Кстати,
Цитата(Boyur @  30.5.2012,  17:03 Найти цитируемый пост)
то после закрытия его,

в коде нет закрытия первой формы.
PM MAIL WWW   Вверх
Boyur
Дата 30.5.2012, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 13.12.2007
Где: Новороссийск

Репутация: нет
Всего: нет



Чтобы при закрытии программы... она закрывалсь полностью.. а не оставалась в процессах. (В 1 окне логина закрывается нормально, а в Приветствии остается в процессах).
PM MAIL ICQ   Вверх
kami
Дата 30.5.2012, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Boyur @  30.5.2012,  17:38 Найти цитируемый пост)
В 1 окне логина закрывается нормально

Зачем обманываешь? Не закрывается оно. Сам же писал:
Код

Form1.Visible:=false;


Это сообщение отредактировал(а) kami - 30.5.2012, 17:50
PM MAIL WWW   Вверх
Boyur
Дата 30.5.2012, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 13.12.2007
Где: Новороссийск

Репутация: нет
Всего: нет



Ну просто если в первой форме нажать крестик, то все нормально закроется и процесс закроется.
А если из второй формы, то процесс не закрывается.

Если в первой форме добавить Form1.Close; то после нажатия кнопки то закрывается все и вторая форма.

Добавлено через 8 минут и 8 секунд
Разобрался...
Во второй форме добавил:
Код

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Close;
end;


Теперь все нормально.

Это сообщение отредактировал(а) Boyur - 30.5.2012, 17:55
PM MAIL ICQ   Вверх
kami
Дата 30.5.2012, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Boyur @  30.5.2012,  17:54 Найти цитируемый пост)
Ну просто если в первой форме нажать крестик, то все нормально закроется и процесс закроется.А если из второй формы, то процесс не закрывается.

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

Почитай и сделай так же, только вместо LogoForm - свою форму логона.

Добавлено через 2 минуты и 30 секунд
Цитата(kami @  30.5.2012,  18:03 Найти цитируемый пост)
Потому что первая форма - главная.

Поправка - она главная в выложенном коде.

Добавлено через 6 минут и 11 секунд
Upd:
наверное, даже лучше вот это. В особенности - читать текст, а не только код.
PM MAIL WWW   Вверх
Boyur
Дата 30.5.2012, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 13.12.2007
Где: Новороссийск

Репутация: нет
Всего: нет



Вот хочу воспользоваться кодом который ты показал:
Код

logoform := TLogoform.Create(nil);
{ ВНИМАНИЕ! show!   НЕ showmodal }
logoform.Show;

{ Здесь может размещаться код инициализации приложения,
  например, открытие базы данных... }

{ После блока кода, создающего все ваши формы и перед
  строчкой Application.Run напишите: }

logoform.Hide;
logoform.Release;


У меня это все выглядит так:
Код

begin
Form_login := TForm_login.Create(nil);
Form_login.Show;

//---------------
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm_general, Form_general);
  Application.CreateForm(Tdm, dm);
  Application.CreateForm(TForm_prihod_prod, Form_prihod_prod);
  Application.CreateForm(TForm_select_prod, Form_select_prod);
  Application.CreateForm(TForm_rashod_prod, Form_rashod_prod);
  Application.CreateForm(TForm_select_prod_rashod, Form_select_prod_rashod);
//Application.CreateForm(TForm_login, Form_login);
//---------------------
Form_login.Hide;
Form_login.Release;
  Application.Run;
end.


Что нужно написать перед инициализацией, чтобы основаня программа запустилась после нажатие на кнопку Form_login.Button1Click?
PM MAIL ICQ   Вверх
kami
Дата 30.5.2012, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Boyur @  30.5.2012,  19:03 Найти цитируемый пост)
Form_login.Show;

1. В данном случае не Show, а ShowModal.
2. Application.Initialize должно идти первой строкой.
3. В обработчике OnClick кнопки OK вместо
Код

 if (Edit1.Text=login) and (Edit2.Text=pass)
    then
      begin
       Form2.Show;
       Form1.Visible:=false;
      end
    else
    ShowMessage('Ошибка!');

пишем
Код

 if (Edit1.Text=login) and (Edit2.Text=pass)
    then
      begin
       ModalResult:=mrOk;
      end
    else
      ModalResult:=mrCancel;


Всякие Hide и Release убрать.

Добавлено через 2 минуты и 9 секунд
Ах, да: 
код показа формы логина (в .dpr) будет выглядеть так:
Код

if IsNegativeResult(Form_login.ShowModal) then
  exit;

PM MAIL WWW   Вверх
Boyur
Дата 30.5.2012, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 13.12.2007
Где: Новороссийск

Репутация: нет
Всего: нет



Пишет [DCC Error] storage.dpr(27): E2003 Undeclared identifier: 'IsNegativeResult'
Незнает что такое IsNegativeResult
PM MAIL ICQ   Вверх
kami
Дата 30.5.2012, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Ну напиши
Код

if Form_login.ShowModal = mrCancel then


Добавлено через 4 минуты и 38 секунд
А вообще сложно нажать F1 на проблемной функции, чтобы посмотреть - в каком модуле она объявлена?
PM MAIL WWW   Вверх
Boyur
Дата 30.5.2012, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 13.12.2007
Где: Новороссийск

Репутация: нет
Всего: нет



Cпасибо те большое, все работает. F1 решает )))

Это сообщение отредактировал(а) Boyur - 30.5.2012, 20:08
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.