![]() |
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:
Danke schon mal im Voraus!
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. |
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:
Damit die Schleife terminiert ;)
begin
Repeat2:=False; Repeat1 = 0; repeat (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 ;) |
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! |
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.
|
Re: Kann fehler nicht finden, Programm hängt sich auf
Hi
Zitat:
Wennn du richtig eingerückt hättest, dann wäre dir aufgefallen, das bei der Repeat-Schleife an der Abbruch-Bedingung
Delphi-Quellcode:
etwas faul ist.
Until Repeat2;
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 21:55 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 by Thomas Breitkreuz