Форум: "Начинающим";
Текущий архив: 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.015 c