Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.23;
Скачать: CL | DM;

Вниз

Ввод пароля перед запуском....   Найти похожие ветки 

 
^Sanya ©   (2002-12-10 21:41) [0]

Как правильно организоваьт сабж?
Делаю:
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.
...

var
Form1: TForm1;

implementation
uses unit2;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Application);
Form2.Show
end;

...

var
Form2: TForm2;

implementation
uses unit1;
{$R *.dfm}

procedure TForm2.FormShow(Sender: TObject);
begin
Form1.Free
end;

...



В итоге, главная форма(Form1) не уничтожается, а лишь исчезает.... :(


У меня получается через файл проекта, но при неправильном вводе форма пароля реурсивно пересоздаётся, что ведёт к мерцанию....:(
Помогите, плз,
Заранее благодарен!


 
^Sanya ©   (2002-12-10 21:43) [1]

А просто скрывать-показывать формы я не хочу....
Суть в том, чтобы динамически всё посоздавать и поуничтожать....


 
Song ©   (2002-12-10 21:55) [2]

А как она может уничтожится, если она главная? У Вас и выполнение программы при этом закончится...
Для ввода пароля сделайте не перввую, а вторую форму, которую показывайте на Form1.onShow, при необходимости делайте закрытие главной формы и всё получится.


 
Armageddon ©   (2002-12-10 22:25) [3]

Посмотри примеры, постовляемые к Delphi 6. Там есть пример программы для работы с паролем.


 
^Sanya ©   (2002-12-10 23:51) [4]


> Song © (10.12.02 21:55)

Это понятно, суть в том, чтобы при вводе пароля в памяти сидела только одна форма(Form2),
нажимаем "ОК", и form2 уничтожается, form1 создаётся....

Вопрос в том, возможно ли как-то справиться с Application.MainForm...


 
Юрий Зотов ©   (2002-12-11 00:49) [5]

Вот пример. Только не забудьте убрать PasswordForm из списка AutoCreate.

Итак, в проекте 5 файлов. Два файла главной формы (PAS и DFM) не привожу - это любая форма с именем AppMainForm. Привожу три остальные - это два файла формы ввода пароля (PAS и DFM) и файл самого проекта (DPR).

===== Файл PasswordUnit.dfm =====

object PasswordForm: TPasswordForm
Left = 488
Top = 418
BorderStyle = bsDialog
Caption = "PasswordForm"
ClientHeight = 101
ClientWidth = 217
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
PixelsPerInch = 120
TextHeight = 16
object Edit: TEdit
Left = 12
Top = 24
Width = 197
Height = 24
CharCase = ecUpperCase
PasswordChar = "*"
TabOrder = 0
end
object OkButton: TButton
Left = 16
Top = 68
Width = 75
Height = 25
Caption = "OK"
Default = True
ModalResult = 1
TabOrder = 1
end
object CancelButton: TButton
Left = 132
Top = 68
Width = 75
Height = 25
Cancel = True
Caption = "Cancel"
ModalResult = 2
TabOrder = 2
end
end

===== Файл PasswordUnit.pas =====

unit PasswordUnit;

interface

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

type
TPasswordForm = class(TForm)
Edit: TEdit;
OkButton: TButton;
CancelButton: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;

implementation

{$R *.DFM}

end.

===== Файл PasswordProject.dpr =====

program PasswordProject;

uses
Windows,
Controls,
Forms,
AppMainUnit in "AppMainUnit.pas" {AppMainForm},
PasswordUnit in "PasswordUnit.pas" {PasswordForm};

{$R *.RES}

begin
Application.Initialize;
with TPasswordForm.Create(nil) do
try
if ShowModal <> mrOK then Exit;
if Edit.Text <> "AAA" then
begin
MessageBox(Handle, "Invalid password", "Error", MB_OK or MB_ICONSTOP);
Exit
end
finally
Free
end;
Application.CreateForm(TAppMainForm, AppMainForm);
Application.Run;
end.


 
Rouse_ ©   (2002-12-11 01:06) [6]

Во первых: код Юрий Зотов © (11.12.02 00:49)
После этого: Song © (10.12.02 21:55)
И в конце: Application.ShowMainForm := False; в DPR

Желаю успехов


 
^Sanya ©   (2002-12-11 14:51) [7]


> Юрий Зотов © (11.12.02 00:49)


> begin
> Application.Initialize;
> with TPasswordForm.Create(nil) do
> try
> if ShowModal <> mrOK then Exit;
> if Edit.Text <> "AAA" then
> begin
> MessageBox(Handle, "Invalid password", "Error", MB_OK
> or MB_ICONSTOP);
> Exit
> end
> finally
> Free
> end;
> Application.CreateForm(TAppMainForm, AppMainForm);
> Application.Run;
> end.


Уважаемый Юрий Зотов, по0моему при непрвильном вводе пароля данное приложение завершит свою работу.
Я сам давно сделал нечто похожее, но с рекурсивным перезапуском приложения в случае ввода неправильного пароля.
Мне же нужно, чтобы при вводе неверного пароля после появления сообщения("Inalid pasword"), приложение не закрывалось и не пересоздавалось.
Фактически я прошу того, что можно легко реализовать, использую Show и Hide, НО: в конкретный промежуток времени в памяти должна сидеть ТОЛЬО ОДНА ФОРМА
Надеюсь, меня поняли...
Заранее благодарен.


 
Андрей Сенченко ©   (2002-12-11 15:17) [8]

>> в конкретный промежуток времени в памяти
>> должна сидеть ТОЛЬО ОДНА ФОРМА

В таком случае я вижу только 1 выход - все делать НА ОДНОЙ ФОРМЕ - но тогда IMHO все компонеты придется создават в RunTime, если конечно Тебя волнует размер окна ввода пароля.


 
han_malign ©   (2002-12-11 15:18) [9]

всего лишь немного поправить блок проверки пароля
begin
Application.Initialize;
with TPasswordForm.Create(nil) do
try
fPass:=(ShowModal=mrOK);
while(fPath and(Edit.Text <> "AAA"))do begin
MessageBox(Handle, "Invalid password", "Error", MB_OK or MB_ICONSTOP);
fPass:= (ShowModal=mrOK);
end;
finally
Free
end;
if(fPass)then begin
Application.CreateForm(TAppMainForm, AppMainForm);
Application.Run;
end;
end;


З.Ы. Юрий Зотов дал пример реализации для однократной проверки пароля, экстраполировать до своего случая могли бы сами, здесь ведь все-таки не благотворительное общество бесплатного написания проектов под ключ.


 
Юрий Зотов ©   (2002-12-11 15:36) [10]

> ^Sanya © (11.12.02 14:51)

Вы уж извините меня великодушно, будьте так любезны, пожалуйста! В следующий раз я непременно напишу за Вас не только форму ввода пароля, но и вообще весь проект, ОК?


> в конкретный промежуток времени в памяти должна сидеть ТОЛЬКО
> ОДНА ФОРМА. Надеюсь, меня поняли...

Вас-то поняли. А Вы сами? Поняли что в этом коде именно так и есть? Или не поняли, раз спрашиваете?


> han_malign © (11.12.02 15:18)

Готовьтесь к следующему вопросу: "Мне не нужно, чтобы пароль запрашивался бесконечно, мне нужно, чтобы после 3-х неверных попыток программа завершалась. Как это сделать?"

А через пару месяцев будет еще вопрос: "Знакомый программист влез в мою программу обычным редактором, за пару минут исправил в ней один байт и программа стала работать наоборот - пропускает любой неверный пароль и ругается на верный. Как защитить мою программу"?


 
^Sanya ©   (2002-12-11 17:04) [11]


> han_malign © (11.12.02 15:18)

Спасибо за прмер, до цикла я не додумался..... :(



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

Текущий архив: 2002.12.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
14-74941
MBo
2002-11-29 10:14
2002.12.23
Очередная задачка для разминки мозгов ;)


1-74638
Tik
2002-12-12 15:15
2002.12.23
Проблема


1-74840
Сутковой Вадим
2002-12-11 21:22
2002.12.23
Энгл Рус


1-74634
Beglec
2002-12-12 14:17
2002.12.23
QuickReport


1-74712
123000
2002-12-13 20:13
2002.12.23
Как определить кол-во иконок в файле???