![]() |
Lazarus-Zahlenraten-Programm will nicht funktionieren
Hallo und guten Abend,
ich bin dabei ein Programm zum Zahlenraten zu programmieren und das mit Lazarus 1.0.14 . Das Programm soll folgende Eigenschaften besitzen: der Rechner bzw. das Programm erzeugt selbstständig eine Zufallszahl im Bereich von 1 bis 100, der Nutzer hat soll diese zufällig erdachte Zahl erraten, nach jedem Versuch wird die Eingabe vom Programm mit „Die Zahl ist zu groß!“, „Die Zahl ist zu klein!“ oder mit „Das war richtig !“ beantwortet. Nach dem Erraten einer Zahl hat der Nutzer die Möglichkeit, eine neue Zufallszahl zu erzeugen. Leider hängt sich Lazarus immer wieder an verschiedenen Zeilen auf, darunter auch an der Lrs-Datei. ![]() ![]() Der vollständige Quellcode sieht bisher so aus.
Code:
unit Zahlenraten;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; ErgebnisPanel: TPanel; Label1: TLabel; NeuButton: TBitBtn; RatenButton: TBitBtn; AbbruchButton: TBitBtn; EingabeEdit: TEdit; procedure AbbruchButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure RatenButtonClick(Sender: TObject); procedure NeuButtonClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation initialization {$I zahlenraten.lrs} var Zufallszahl : integer; procedure TForm1.AbbruchButtonClick(Sender: TObject); ({$R *.DFM}) var Zufallszahl: integer; procedure TForm1.AbbruchButtonClick(Sender: TObject); begin Close; end; procedure TForm1.FormCreate(Sender: TObject); begin Panel1.Caption:='Zahlenraten'; Label1.Caption:='Bitte wählen Sie eine Zahl von 1 bis 100:'; Randomize; Zufallszahl:=Random(100)+1; end; procedure TForm1.RatenButtonClick(Sender: TObject); var Eingabe : Integer; begin Eingabe:=StrToInt(EingabeEdit.Text); if Eingabe=Zufallszahl then ErgebnisPanel.Caption:=' Das war richtig! ' else if Eingabe<Zufallszahl then ErgebnisPanel.Caption:='Die Zahl ist zu klein!' else ErgebnisPanel.Caption:='Die Zahl ist zu groß!'; EingabeEdit.SetFocus; end; end. Ob mir jemand helfen kann? ^^' Ich würde mich sehr freuen. Schönen Abend noch! - Citaro |
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Zitat:
In Delphi gibt es TryStrToInt. Was in Lazarus geht, weiß ich nicht. BTW: Was ist eine LRS Datei? |
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Also der Befehl dürfte schon stimmen. ;)
StrToInt ist für das Auslesen aus dem Editierfeld und das Umwandeln in eine Integer-Zahl bei Lazarus üblich. Zitat:
Zitat:
|
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
An welchen Stellen hängt es denn genau? Ich denke mal, ohne diese Information kann man den Fehler nicht lösen.
Zitat:
PS: Nur eine Anmerkung, auf dem Foto, das Du eingestellt hast, sieht man so relativ gar nichts und könntest Du den Quellcode noch mal richtig formatieren, dann wird der auch übersichtlicher :wink: |
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Nee, idiotensicher muss es eigentlich nicht sein. :) Aber ein interessanter Gedanke, dieses Problem mit der Eingabe.
Weshalb sieht man auf dem Foto denn nichts? Ich habe das mal direkt als Rar verpackt. Wenn du oder jemand anderes sich kurz Zeit nehmen würde und auch noch Lazarus auf dem Rechner hat? Dann wäre das natürlich spitze. ![]() |
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Zitat:
Bilder und ZIPs mit Code solltest du hier ![]() //Edit: First!!111 |
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Zitat:
|
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Liste der Anhänge anzeigen (Anzahl: 1)
Ui, das tut mir Leid. Also hier noch mal das Bild! :oops:
|
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hab das mal schnell überflogen, du darfst nicht einfach alles ändern, schau dir mal meinen Code an. Wenn du die Namen der Kontrols ändern möchtest, musst du das unter "Name" links im Object Inspektor ändern. Erst dann kannst du mit den Kontrols und deren neuen Namen arbeiten.
Edit: Aso und wieso du da so viele Anhänge und verweise auf gar nicht vorhandene Forms hast, kann ich dir nicht sagen, hab das alles gelöscht was du nicht brauchst. Siehe Anhang |
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Nun ja, diesen Panel mit den Schaltflächen, dem Editfeld und der Überschrift, der war ja bereits vorhanden. Ich fange ja nicht mit dem Code allein an, sondern mit einer Benutzeroberfläche inkl. einer Schaltfläche zum Beenden des Programms. Wenn du die auszuführende Datei im Ordner der ausgepackten Rar-Datei anklickst und sie ausführst, dann erscheint die besagte Benutzeroberfläche. Nur funktionieren die Raten- und die Neue-Zahl-Schaltfläche noch nicht, eben weil der Code selbst fehlerhaft ist.
Die Datei, die du mir geschickt hast, wird zwar sauber compiliert, weist aber eben die grafische Benutzeroberfläche nicht mehr auf. Wenn ich die jetzt neu erstelle, programmiert er das neu in den Code rein. Aber eine Verbindung zu dem von dir veränderten Code bekomme ich so nicht hin … :| |
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Du solltest dich ein wenig mit dem Objekt-Inspektor auseinandersetzen und wie man den bedient (speziell das Zuweisen von Events), dann funktioniert das auch ;)
|
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Zitat:
|
AW: Lazarus-Zahlenraten-Programm will nicht funktionieren
Anmerkungen im Quelltext.
Delphi-Quellcode:
Bezüglich DFM und LRS: was ist denn bei dir unter Projekt => Projekteinstellungen => Ressourcentyp des Projekts eingestellt? Ich empfehle dir FPC-Ressourcen. Die Verwendung von LRS-Dateien ist seit ich glaub Lazarus 0.9.26 veraltet. Dann solltest du allerdings die DFM-Datei von Lazarus umwandeln lassen, dazu unter Werkzeuge den Menüpunkt "DFM- in LFM-Datei umwandeln" auswählen. Dann die Direktive {$R *.DFM} wieder aktivieren und die Dateiendung auf LFM ändern.
unit Zahlenraten;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; ErgebnisPanel: TPanel; Label1: TLabel; NeuButton: TBitBtn; RatenButton: TBitBtn; AbbruchButton: TBitBtn; EingabeEdit: TEdit; procedure AbbruchButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure RatenButtonClick(Sender: TObject); procedure NeuButtonClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation initialization // huh? wo kommt das denn her? diese beiden... {$I zahlenraten.lrs} // ... Zeilen sollten ganz am Ende vorm "end." sein var Zufallszahl : integer; procedure TForm1.AbbruchButtonClick(Sender: TObject); // warum hast du hier nochmal TForm1.AbbruchButtonClick? Für Methoden brauchst du keine Forwarddeklarationen, da diese bereits im Interface-Teil deklariert sind ({$R *.DFM}) // "(...)" ist nicht die richtige Variante, um Compiler-Direktiven zu deaktivieren. Wenn dann wäre es "{.$R *.DFM}", aber siehe unten var Zufallszahl: integer; // warum ist "Zufallszahl" zweimal angegeben? Es darf nur einmal vorkommen; außerdem wäre es besser die Variable innerhalb der Klasse TForm1 (zum Beispiel in der private-Section) zu deklarieren. procedure TForm1.AbbruchButtonClick(Sender: TObject); begin Close; end; procedure TForm1.FormCreate(Sender: TObject); begin // Die Captions beim Start kannst du auch im Objektinspektor angeben Panel1.Caption:='Zahlenraten'; Label1.Caption:='Bitte wählen Sie eine Zahl von 1 bis 100:'; Randomize; Zufallszahl:=Random(100)+1; end; procedure TForm1.RatenButtonClick(Sender: TObject); var Eingabe : Integer; begin // Eventuell besser StrToIntDef oder TryStrToInt verwenden; andernfalls kommt es zu ner Exception, wenn EingabeEdit.Text keine Zahl enthält. Alternativ ein MaskEdit verwenden, welches nur Zahleneingaben erlaubt, aber das führt eventuell zu weit... Eingabe:=StrToInt(EingabeEdit.Text); if Eingabe=Zufallszahl then ErgebnisPanel.Caption:=' Das war richtig! ' else if Eingabe<Zufallszahl then ErgebnisPanel.Caption:='Die Zahl ist zu klein!' else ErgebnisPanel.Caption:='Die Zahl ist zu groß!'; EingabeEdit.SetFocus; end; end. Das sollte hoffentlich etwas weiter helfen. :) Gruß, Sven |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 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