Форум: "Основная";
Текущий архив: 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