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

Вниз

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

 
^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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
1-74831
VitGun
2002-12-11 18:17
2002.12.23
Memo с картинками


7-75009
olphi
2002-10-20 15:50
2002.12.23
Как узнать путь каталога Windows?


14-74957
Yuri Btr
2002-12-02 10:48
2002.12.23
Запись в реестр загружаемых значений для всех пользователей


14-74995
Ketmar
2002-12-03 21:13
2002.12.23
test


1-74790
dakus
2002-12-10 11:33
2002.12.23
Классы





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