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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правельно закрыть форму 
:(
    Опции темы
Potia
Дата 29.8.2005, 20:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть такая задача. Открыть форму авторизации, ввести два параметра, сравнить, загрузить главную форму и передать туда эти значения.

Так все начинается.
Код

begin
  Application.Initialize;
  Application.Title := 'Ïóíêò îáìåíà âàëþòû 1.0V';
  Application.CreateForm(TForm2, Form2); //Форма авторизации
  Form2.ShowModal;
  Application.Run;
  end.


Код

procedure TForm2.Button1Click(Sender: TObject);
begin
if EditPass.Text = IntToStr(123)
  then
  Application.CreateForm(TForm1, Form1)
  //И здесь нужно закрыть форму2 и передать  EditPass.Text в форму1
  else
  EditPass.Text := '';
end;


Как это можно сделать
  Вверх
Pakshin A. S.
Дата 29.8.2005, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

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



Заведи в моуле с Form1 переменную в секции var раздела innitialization

Код

var
 Form1: TForm1;
 Pass: string;


Теперь закрываем форму вот так:
Код

procedure TForm2.Button1Click(Sender: TObject);
begin
if EditPass.Text = IntToStr(123)
  then
  Application.CreateForm(TForm1, Form1)
  Pass:=EditPass.Text;
  Form1.ShowModal;
  Form1.Free;
  else
  EditPass.Text := '';
end;


Для проверки сделаем обработчик OnShow дял формы Form1:
Код

procedure TForm1...;
begin
 ShowMessage(Pass);


Подойдет? Можно и лучше сделать, если опишите что конкретно прога делает (на словах и по пунктам)
PM   Вверх
Alex
Дата 30.8.2005, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Код проекта:
Код

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Главная форма приложения:
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  unit2
;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  with TForm2.Create(Application) do try
    ShowModal;
    label1.Caption:= Edit1.Text;
  finally
    Release;
  end;
end;

end.


Форма для ввода пароля:
Код

unit Unit2;

interface

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

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

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Close;
end;

end.




--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Marriage
Дата 30.8.2005, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Potia @ 29.8.2005, 20:28)
сравнить, загрузить главную форму и передать туда эти значения.

А что мешает использовать глобальные переменные ???


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Alex
Дата 30.8.2005, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Цитата(Marriage @ 30.8.2005, 11:04)
А что мешает использовать глобальные переменные ???

Стремление написать код, который будет работать всегда и везде, экономия памяти.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Guest
Дата 30.8.2005, 18:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Pakshin A. S., Да задача проста: при загрузке вылетает первая фрма где вводиться пароль и проверяется на соответствие, далее должна открыться программа именно от того человека, который ввел пароль.

  Вверх
Guest
Дата 30.8.2005, 19:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ничего не получается вот в этом моменте.

Код

procedure TForm2.Button1Click(Sender: TObject);
begin
if EditPass.Text = IntToStr(123)
  then
  begin
  Application.CreateForm(TForm1, Form1);
  Pass:=EditPass.Text;
  Form1.ShowModal; //Здесь начинает ругаться
  Form2.Free; //А это вообще делать не хочет
  end
  else
  EditPass.Text := '';
end;


Хочу заметить что первым вылитает Form2, от которой нужно получить значение PASS и закрыть, чтобы осталась только Form1
  Вверх
Potia
Дата 30.8.2005, 19:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А можно как-то сделать вот такое
Код

procedure TForm2.Button1Click(Sender: TObject);
begin
if EditPass.Text = IntToStr(123)
  then
  begin
  Application.CreateForm(TForm1, Form1);
  Pass:=EditPass.Text;
// Передать все права на Form1
  Form2.Close; // А тут просто ее закрыть
  end
  else
  EditPass.Text := '';
end;


Почему родилась такая мысль, если из Form1 родить Form3, вот так

Код

Application.CreateForm(TForm3, Form3);
Form3.ShowModal;


А зыкрыть form3 вот так

Код

Form3.close;


То все супер form3 закрывается и все хорошо, а если я использую form2.close, то вся программа закрывается.
  Вверх
Pakshin A. S.
Дата 30.8.2005, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

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



А можно и так сделать...

Демонстрационный проектик:
1) Создаем две формы Form1 и Form2. Form2 убираем из автокреита.

2) Ставим на вторую форму Edit для ввода имень пользователя.

3) Ставим Button на вторую форму.

4) Заводим переменные в Form2:
Код

var
 Form2: TForm2; // Это уже есть
 IsInsert: boolean;
 User: string;


5) На клик кнопки ставим
Код

IsInsert:=true;
User:=Edit1.Text;
Close;


6) Переделываем модуль основного проекта под наши нужды:
Код

begin
 Application.Initialization;
 Form2:=TForm2.Create(self);
 IsInsert:=false;
 Form2.ShowModal;
 Form2.Close;
 if IsInsert
  then
   begin
    Application.CreateForm(Form1, TForm1); // или как тама пишется 
    (*Если есть лэйбл, то можно проверить так Form1.Label1.Caption:=User;*)
    Application.Run;
  end;
end.


PM   Вверх
Alex
Дата 30.8.2005, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



А чем вам мой пример не подходит? Если вас смущает, что загрузку второй формы я осуществляю в первой, то пусть вас это не смущает, т.к. при выполнении Create первой формы она еще не видна на экране и пользователь сначала в любом случаи увидит вторую форму и токо когда ее закроет ему на экране появится первая


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Pakshin A. S.
Дата 31.8.2005, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

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



PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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