Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kann fehler nicht finden, Programm hängt sich auf (https://www.delphipraxis.net/123151-kann-fehler-nicht-finden-programm-haengt-sich-auf.html)

Mariaki 28. Okt 2008 16:15


Kann fehler nicht finden, Programm hängt sich auf
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
ich habe ein Programm geschrieben, in dem eine 8 Stellige Reihenfolge von Buchstaben, Zahlen und Zeichen in einem Edit-Feld erstellt wird. Wenn man auf Erstellen klickt passiert dies, der Button wird Deaktiviert und die Buttons Löschen und Kopieren aktiviert.
Ich habe das Startfenster und das Fenster nachdem Erstellen geklickt wurde unten angefügt.

Wenn man nun Löschen drückt sollte:
1.Button Erstellen aktivieren,
2.Die Buttons Löschen und Kopieren deaktivieren und
3.Es ermöglichen einen Neuen 8.Stelligen-Code zu erstellen!

Bis 2. Klappt das auch, aber wenn ich dann auf Erstellen klicke hängt sich da Programm auf. Ich vermute, dass da ein Fehler in der Repeat-Schleife ist, kann aber Irgendwie den Fehler nicht finden.

Hier der Quelltext:
Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    EdPasswort: TEdit;
    BtnErstellen: TButton;
    BtnLoeschen: TButton;
    BtnKopieren: TButton;
    procedure BtnErstellenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtnKopierenClick(Sender: TObject);
    procedure BtnLoeschenClick(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

var
 KennZ,GroßKlein,Repeat1:Integer;
 Z1:String;
 Repeat2:Boolean;

procedure TForm3.BtnErstellenClick(Sender: TObject);
begin
Repeat
 Repeat1:=Repeat1+1;
 Randomize;
 KennZ:=random(59);
 GroßKlein:=random(2);
 case KennZ of
  1:
   begin
   IF GroßKlein=1 THEN
    Z1:='a'
   ELSE
    Z1:='A';
   end;
  2:
   begin
   IF GroßKlein=1 THEN
    Z1:='b'
   ELSE
    Z1:='B';
   end;
  3:
  //... Hier sind die ganzen Bedeutungen Für die Buchstaben,Zahlen und Zeichen
  59:
   begin
   Z1:='°';
   end;
 end;
 EdPasswort.text:=EdPasswort.text + Z1;
 IF Repeat1=8 THEN
 begin
 Repeat2:=True
 end;
Until Repeat2;
BtnErstellen.Enabled:=False;
BtnKopieren.Enabled:=True;
BtnLoeschen.Enabled:=True;
end;

procedure TForm3.BtnLoeschenClick(Sender: TObject);
begin
Repeat2:=False;
EdPasswort.Clear;
BtnErstellen.Enabled:=True;
BtnKopieren.Enabled:=False;
BtnLoeschen.Enabled:=False;

end;

procedure TForm3.BtnKopierenClick(Sender: TObject);
begin
EdPasswort.CopyToClipboard;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
Repeat2:=False;
BtnKopieren.Enabled:=False;
BtnLoeschen.Enabled:=False;
EdPasswort.Clear;
EdPasswort.ReadOnly:=True;
end;

end.
Danke schon mal im Voraus!

jfheins 28. Okt 2008 16:23

Re: Kann fehler nicht finden, Programm hängt sich auf
 
Du solltest ganz am Anfang von BtnErstellenKlick zwischen begin und repeat folgendes einfügen:
Delphi-Quellcode:
begin
Repeat2:=False;
Repeat1 = 0;
repeat
Damit die Schleife terminiert ;)

(Ja, auch das repeatt2=false sollte da stehen, und nicht da unten beim löschenklick ;) )

Btw.:. Dein Code ist nicht besonders gut formatiert geschweige denn sauber, aber das ist ne andere Sache ;)

Mariaki 28. Okt 2008 16:33

Re: Kann fehler nicht finden, Programm hängt sich auf
 
diese art Quelltexte zu schreiben habe ich mir bei HTML angewöhnt und ich komme damit eigentlich ganz gut klar. und außer mir sieht ja normalerweise niemand. Aber ist ja egal.
Trotzdem danke!

SirThornberry 28. Okt 2008 16:39

Re: Kann fehler nicht finden, Programm hängt sich auf
 
Wenn sich ein programm "aufhängt" ist es das einfachste die Pause Taste zu drücken und zu schauen wo es hängt. Dann kann man mit F8 gemütlich Schritt für Schritt weiter gehen und schauen warum da irgendwo bestimmter Quelltext ausgeführt wird.

oldmax 29. Okt 2008 05:30

Re: Kann fehler nicht finden, Programm hängt sich auf
 
Hi
Zitat:

diese art Quelltexte zu schreiben habe ich mir bei HTML angewöhnt und ich komme damit eigentlich ganz gut klar. und außer mir sieht ja normalerweise niemand. Aber ist ja egal.
Nun ja, der Ordnung halber, einen Hinweis auf Formatierung sollte man ernst nehmen und Fehler aus vergangenen Tagen aus Bequemlichkeit nicht immer wieder machen. Die Aussage: "Außer mir ... " ist, wie hier geschehen, so nicht richtig und damit der Lächerlichkeit preisgegeben. Du blamierst dich, mit diesem Stil, nicht der Leser!
Wennn du richtig eingerückt hättest, dann wäre dir aufgefallen, das bei der Repeat-Schleife an der Abbruch-Bedingung
Delphi-Quellcode:
Until Repeat2;
etwas faul ist.
Ein Programm was sich scheinbar aufhängt, riecht immer verdächtig nach nicht korrekten Abbruchbedingungen und wie schon angesprochen, die Pausentaste hält dein Programm mit
100%tiger Sicherheit innerhalb der Repaet-Schleife an. Es wird sein, das die Variable vermutlich schon größer 8 ist. Dazu ist sie noch global vereinbart, d. h. sie behält ihren letzten Wert. Besser ist's, diese lokal zu vereinbaren, wenn der Wert außerhalb der Procedure nicht benötigt wird. Trifft auf Repeat2 auch zu.
Gruß oldmax


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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