O MainForm de um aplicativo Delphi é um formulário (janela) que é o primeiro criado no corpo principal do aplicativo. Se você precisar implementar algum tipo de autorização para o seu aplicativo Delphi, convém exibir uma caixa de diálogo de login / senha antes que o formulário principal seja criado e exibido ao usuário. Em resumo, a idéia é criar, exibir e destruir a caixa de diálogo "login" antes de criar o formulário principal.
O Delphi MainForm
Quando um novo projeto Delphi é criado, "Form1" automaticamente se torna o valor da propriedade MainForm (do diretório global Inscrição objeto). Para atribuir um formulário diferente à propriedade MainForm, use a página Formulários do Projeto> Opções caixa de diálogo em tempo de design. Quando o formulário principal é fechado, o aplicativo é encerrado.
Caixa de diálogo Login / Senha
Vamos começar criando a forma principal do aplicativo. Crie um novo projeto Delphi contendo um formulário. Este formulário é, por design, o formulário principal.
Se você alterar o nome do formulário para "TMainForm" e salvar a unidade como "main.pas", o
código fonte do projeto se parece com isso (o projeto foi salvo como "PasswordApp"):programa PasswordApp;
usa
Formulários,
a Principal dentro 'main.pas' {MainForm};
{$ R * .res}
início
Inscrição. Inicializar;
Inscrição. CreateForm (TMainForm, MainForm);
Inscrição. Corre;
fim.
Agora, adicione um segundo formulário ao projeto. Por design, o segundo formulário adicionado é listado na lista "Criar formulários automaticamente" na caixa de diálogo Opções do projeto.
Nomeie o segundo formulário "TLoginForm" e remova-o da lista "Criação automática de formulários". Salve a unidade como "login.pas".
Adicione um rótulo, edição e botão no formulário, seguido por um método de classe para criar, mostrar e fechar a caixa de diálogo de login / senha. O método "Execute" retorna true se o usuário digitou o texto correto na caixa de senha.
Aqui está o código fonte completo:
unidade Conecte-se;
interface
usa
Windows, Mensagens, SysUtils, Variantes, Classes,
Gráficos, controles, formulários, caixas de diálogo, StdCtrls;
tipo
TLoginForm = classe(TForm)
LogInButton: TButton;
pwdLabel: TLabel;
passwordEdit: TEdit;
procedimento LogInButtonClick (Sender: TObject);
função publicclass Executar: booleano;fim;
implementação{$ R * .dfm}
função de classe TLoginForm. Executar: booleano;começar com TLoginForm. Crio(nada) dotry
Resultado: = ShowModal = mrOk;
finalmente
Livre;
fim; fim;
procedimento TLoginForm. LogInButtonClick (Sender: TObject); beginif passwordEdit. Texto = 'delphi' então
ModalResult: = mrOK
outro
ModalResult: = mrAbort;
fim;
fim.
O método Execute cria dinamicamente uma instância do TLoginForm e a exibe usando o ShowModal método. ShowModal não retorna até que o formulário seja fechado. Quando o formulário é fechado, ele retorna o valor do ModalResult propriedade.
O manipulador de eventos On Logick "LogInButton" atribui "mrOk" à propriedade ModalResult se o usuário tiver digitado a senha correta (que é "delphi" no exemplo acima). Se o usuário tiver fornecido uma senha incorreta, ModalResult será definido como "mrAbort" (pode ser qualquer coisa, exceto "mrNone").
Definir um valor para a propriedade ModalResult fecha o formulário. Execute retorna true se ModalResult for igual a "mrOk" (se o usuário tiver digitado a senha correta).
Não crie MainForm antes do login
Agora você só precisa garantir que o formulário principal não seja criado se o usuário não fornecer a senha correta.
Veja como o código-fonte do projeto deve ficar:
programa PasswordApp;
usa
Formulários,
main em 'main.pas' {MainForm},
faça o login em 'login.pas' {LoginForm};
{$ R * .res}
beginif TLoginForm. Executar então comece
Inscrição. Inicializar;
Inscrição. CreateForm (TMainForm, MainForm);
Inscrição. Corre;
endelsebegin
Inscrição. MessageBox ('Você não está autorizado a usar o aplicativo. A senha é "delphi". ',' Aplicativo protegido por senha Delphi ');
fim; fim.
Observe o uso do se então mais para determinar se o formulário principal deve ser criado. Se "Executar" retornar falso, MainForm não será criado e o aplicativo será encerrado sem iniciar.