![]() |
Machen wir doch ein kleines Einsteiger-Tutorial
Liste der Anhänge anzeigen (Anzahl: 1)
Du hast ein Programm, das Zugangsdaten erfordert: Benutzername und Passwort. Gehen wir mal davon aus, die sind im Programm als globale Konstanten gespeichert, und zwar im Code für das Formular FormPass, auf dem sich zwei Editfelder und zwei Labels befinden. Einen Button brauchst du nicht, denn du kannst im Editfeld ja einfach Enter drücken und diese Taste dort abfragen. Nun möchtest du erreichen, daß der Anwender drei Versuche hat, um die richtige Name-Passwort-Kombination einzugeben. Nach dem fehlgeschlagenen dritten Versuch soll das Programm mit dem Hinweis, daß Anzahl der Versuche erreicht wurde, beendet werden. All das wird in der unitpass angehandelt. An die Mainform geht dann nur noch die Information, ob der Versuch erfolgreich war. Dazu wird in der Mainform die FormPass modal aufgerufen, was erstens zur Folge hat, daß alle anderen Formulare gesperrt sind, während sie angezeigt wird, und zweitens einen Rückgabewert erlaubt, der die Mainform dann darüber informiert, ob die Eingabe zulässig war.
Beim Start der Passwort-Form werden erst einmal die beiden Editfelder geleert und die Variable, die die Versuche zählen soll, mit dem Wert 0 initialisiert. Dann wartet das Programm auf Benutzereingaben, konkret auf die Betätigung der Enter-Taste. Erst wenn die Enter-Taste gedrückt wurde, geht es an die Auswertung. In der Auswerten-Methode wird erst einmal geprüft, ob der Text in den Edit-Feldern den gespeicherten Zugangsdaten entspricht. Ist das der Fall, wird das Fenster mit dem Rückgabe-Wert mrOK geschlossen. Dazu muß man wissen, daß bei modal aufgerufenen Fenstern jede Änderung der Variable ModalResult das Fenster schließt. Diese Variable steht beim Start eines modalen Fensters auf mrNone. Ist die Eingabe falsch, springt das Programm in den darunterstehenden Begin-End-Block: Die Variable Versuche wird um 1 erhöht und gleich darauf abgefragt, ob sie bereits den Wert 3 erreicht hat. Ist das der Fall, wird das Passwort-Fenster mit dem Modalresult mrCancel geschlossen, andernfalls wird eine Meldung ausgegeben, daß dies der soundsovielte Fehlversuch war, die Editfelder geleert und wieder auf Enter gewartet.
Delphi-Quellcode:
P.S.: Bis ich fertig bin, ist schon wieder alles erledigt. Das hat man nun davon, wenn man sich die Zeit nimmt ... :lol:
// ***** Hauptformular *****
unit unitmain; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs; type { TFormMain } TFormMain = class(TForm) procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); private { private declarations } Var StartModus : Boolean; public { public declarations } end; var FormMain: TFormMain; implementation {$R *.lfm} uses unitpass; { TFormMain } procedure TFormMain.FormCreate(Sender: TObject); begin StartModus := True; end; procedure TFormMain.FormShow(Sender: TObject); Var w : Integer; begin If StartModus Then // Startmodus ist nur beim Programmstart True; OnShow wird aber auch beim Wiederanzeigen ausgelöst, z.B. wenn die App minimiert war begin FormPass.Left := 500; FormPass.Top := 300; w := FormPass.ShowModal; If w <> mrOK then begin ShowMessage('Ihre Anmeldung war inkorrekt ... Programm wird beendet!'); Close; end; end; StartModus := False; end; end. // ***** Formular für Passworteingabe ***** unit unitpass; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TFormPass } TFormPass = class(TForm) Edit_Pass: TEdit; Edit_Name: TEdit; Label_Name: TLabel; Label_Pass: TLabel; procedure FormShow(Sender: TObject); procedure Edit_NameKeyPress(Sender: TObject; var Key: char); private { private declarations } Const BName = 'Name'; BPass = 'Pass'; Var Versuche : Integer; Procedure EditsLeeren; Procedure Auswerten; public { public declarations } end; var FormPass: TFormPass; implementation {$R *.lfm} { TFormPass } procedure TFormPass.EditsLeeren; begin Edit_Name.Clear; Edit_Pass.Clear; end; procedure TFormPass.Auswerten; begin If (Edit_Name.Text = BName) and (Edit_Pass.Text = BPass) then ModalResult := mrOK else begin Inc(Versuche); If Versuche = 3 Then ModalResult := mrCancel Else begin ShowMessage(IntToStr(Versuche) + '. Versuch fehlgeschlagen!'); EditsLeeren end; end; end; procedure TFormPass.FormShow(Sender: TObject); begin Versuche := 0; EditsLeeren; end; procedure TFormPass.Edit_NameKeyPress(Sender: TObject; var Key: char); begin If Key = #13 Then begin Key := #0; Auswerten; end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz