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

Вниз

Формы   Найти похожие ветки 

 
LexXL   (2006-07-17 15:14) [0]

Подскажите пожалуйста, как создати приложение которое открывает сначало одну форму которая закрывается и открывает другую (после например ввода пароля)...?


 
Vlad ©   (2006-07-17 15:21) [1]

открой файл проекта (dpr), увидишь много интересного. Например как создается главная форма приложения и как оно (приложение) запускается.

Для размышления: там же можно создавать и другие формы, ставить условия if и все остальное.


 
LexXL   (2006-07-17 15:50) [2]

Конечно спасибо, но насколько я понимаю при создании главной формы необходимо эту форму (главную переназначить) например:

if Param(1) = "Param1" then
    SetAsMainForm(Form2);
что - то "вроде так" , но как при вводе правильно пароля закрыть form1 и открыть form2 так чтобы она стала главной? (вот в чем вопрос)..


 
LexXL   (2006-07-17 15:59) [3]

ах да,

procedure SetAsMainForm(aForm:TForm);
var
  P:Pointer;
begin
  P := @Application.Mainform;
  Pointer(P^) := aForm;
end;


 
Amoeba ©   (2006-07-17 16:30) [4]


> LexXL   (17.07.06 15:59) [3]
> ах да,
>
> procedure SetAsMainForm(aForm:TForm);
> var
>   P:Pointer;
> begin
>   P := @Application.Mainform;
>   Pointer(P^) := aForm;
> end;


Подумай, что написал.
Application.Mainform уже и так является указателем. Так что у тебя получается масло масляное.

Дальше вникать в приведенный код желания нет.


 
Amoeba ©   (2006-07-17 16:38) [5]

Все же прокомментирую цитатой из справки:

MainForm cannot be modified at run-time because it is read-only.

Так что приведенный автором вопроса код - полная чушь.


 
LexXL   (2006-07-17 16:46) [6]

program Project1;

uses
  Forms,
  Unit1 in "Unit1.pas" {Form1},
  Unit2 in "Unit2.pas" {Form2},
  Unit3 in "Unit3.pas" {Form3};

{$R *.res}

procedure SetAsMainForm(aForm:TForm);
var
  P:Pointer;
begin
  P := @Application.Mainform;
  Pointer(P^) := aForm;
end;

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);

  if Paramstr(1) = "Param1" then
    SetAsMainForm(Form2);

  if Paramstr(1) = "Param2" then
    SetAsMainForm(Form3);

  Application.Run;
end.


 
StriderMan ©   (2006-07-17 16:50) [7]


> procedure SetAsMainForm(aForm:TForm);
> var
>   P:Pointer;
> begin
>   P := @Application.Mainform;
>   Pointer(P^) := aForm;
> end;

и как, работает? :)


 
LexXL   (2006-07-17 16:51) [8]

Ладно забьем на этот кусок кода!!! Он плохой и не красивый...
Но кто нить вместо высказываний даст мне ответ.
Запускается приложение -> появляется форма с вводом email, если верно открываем программу.!!!!?????
Заставку я делал... но там был временной интервал. А как сделать как мне надо???????????
Заранее спасиб!!!


 
StriderMan ©   (2006-07-17 17:02) [9]

можно так

 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   constructor Create(AOwner: TComponent); override;
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

constructor TForm1.Create(AOwner: TComponent);
begin
 with TForm2.Create(nil) do //форма с вопросом
 try
   if ShowModal <> mrOK then
    raise Exception.Create("что-то не верно....")
 finally
   Free;
 end;
 inherited;
end;


Да, и убери Form2 из autocreate (Project-options-forms)


 
StriderMan ©   (2006-07-17 17:04) [10]

.. а еще лучше все формы убрать из autocreate и создавать их ручками. ИМХО.


 
Amoeba ©   (2006-07-17 17:10) [11]


> LexXL   (17.07.06 16:51) [8]
> Ладно забьем на этот кусок кода!!! Он плохой и не красивый.
> ..
> Но кто нить вместо высказываний даст мне ответ.
> Запускается приложение -> появляется форма с вводом email,
>  если верно открываем программу.!!!!?????
> Заставку я делал... но там был временной интервал. А как
> сделать как мне надо???????????
> Заранее спасиб!!!

Этот кусок кода представляет собой нагромождение ошибок (на них я уже указал в своих постах.

Делать надо примерно таким макаром:

Форма, которую показываешь первой, не должна быть ни Auto Create, ни MainForm;

Создаешь эту форму через вызов конструктора и показывешь ее модально перед Application.Run, владельцем указываешь Application. После закрытия этой формы проверяешь правильность введенных данных, и если неправильно, то вызывается

begin
 Application.MainForm.Visible := False;
 Application.Terminate;
end;

И никаких procedure SetAsMainForm(aForm:TForm); быть не должно.


 
Vlad ©   (2006-07-17 17:11) [12]


> LexXL   (17.07.06 16:51) [8]

Я же тебе сказал, в dpr-e перед созданием ГЛАВНОЙ формы, создавай любую другую форму с вводом е-мейла или пароля, чего угодно. И если он (е-мейл или пароль) верный, то идешь дальше, иначе - Exit. Чего неясно?
Причем тут

>   P := @Application.Mainform;

?


 
LexXL   (2006-07-18 11:02) [13]

Я блин уже запутался, дано 2 формы, вторая появляется первой, на ней edit и батон. если в edit введено yes то закрываем и открывает первую.
дайте код и я убегу....
или пойду за тубареткой мылом и веревкой, (буду сидя на тубаретке веревку мыть).....
ВСЕМ ОГРОМНОЕ СПАСИБО!!!

-легче 10 раз посоветовать чем 1 показать -


 
Vlad ©   (2006-07-18 11:25) [14]

простой пример, что называется втупую!

(в DPR -е)

var
 B: Boolean;
begin
 Application.Initialize;
 with TForm2.Create(Application) do
 try
   ShowModal;
   B := (Edit1.Text = "correct_password");
 finally
   Free;
 end;

 if not B then Exit;

 Application.CreateForm(TForm1, Form1);
 Application.Run;

end.


 
LexXL   (2006-07-18 12:13) [15]

!!!все спасибо мне нужна была срока:!!!B := (Edit1.Text = "correct_password");
в ней мона передать и переменную из форм2 (например пароль сверяется с базой и присваивет переменной per{boolean} истинна) а дальше B:=(per);
и дальше по тексту...

О ВЕЛИКИЙ VLAD С-П-А-С-И-Б-О !!!



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

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

Наверх




Память: 0.48 MB
Время: 0.012 c
2-1153316894
fast2
2006-07-19 17:48
2006.08.06
Не подключается ADOQuery


2-1153328997
learner
2006-07-19 21:09
2006.08.06
NamedPipe информация о подсоединившемся клиенте.


2-1152176819
Crazy monkey
2006-07-06 13:06
2006.08.06
Как перенести данные из одной таблицы в другую


2-1152733502
XeON
2006-07-12 23:45
2006.08.06
Добавление записи в динамический массив


2-1153165789
Vivax
2006-07-17 23:49
2006.08.06
popupmenu





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский