AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Quellcode Überprüfung (For Schleifen Fehler)
Thema durchsuchen
Ansicht
Themen-Optionen

Quellcode Überprüfung (For Schleifen Fehler)

Ein Thema von atzornf · begonnen am 6. Dez 2015 · letzter Beitrag vom 6. Dez 2015
Antwort Antwort
Seite 4 von 4   « Erste     234   
Perlsau
(Gast)

n/a Beiträge
 
#31

Machen wir doch ein kleines Einsteiger-Tutorial

  Alt 6. Dez 2015, 19:16
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:
// ***** 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.
P.S.: Bis ich fertig bin, ist schon wieder alles erledigt. Das hat man nun davon, wenn man sich die Zeit nimmt ...
Miniaturansicht angehängter Grafiken
passworttest.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz