Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Mit Enter-Taste bestätigen?


Leon_derZocker - Do 15.03.18 10:34
Titel: Mit Enter-Taste bestätigen?
Hallo,
Ich bin dabei ein einfaches Zahlen-Raten-Spiel zu programmieren.
Ich bin damit eigentlich auch fertig aber es stört mich das ich ständig auf OK klicken muss um eine von mir geratene Zahl zu bestätigen.
Daher wollte ich es so programmieren das ich die Zahl mit der ENTER-Taste bestätigen kann.
Ich bin ein Neuling im Bereich programmieren.
Kann mir bitte jemand helfen(ein Tipp wäre auch OK)?
Danke schon mal im Voraus. :zustimm:

Hier der Quellcode:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
unit Raten3;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Enter(Sender: TObject; var Key: Char);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const Max = 15 ;  // Ein Dutzend ist genug
var
  Form1: TForm1;
  Eingabe, Zufall, Versuche: Integer;
  SpielEnde: Boolean;

implementation

{$R *.DFM}

Ab hier________________________________________________

procedure TForm1.Button1Click(Sender: TObject);
var
Ergebnis, Differenz: Integer;
begin
  if SpielEnde
    then Close;
  try
    Edit1.SetFocus;
    Eingabe := StrToInt (Edit1.Text);
    inc (Versuche);
    Ergebnis := Eingabe - Zufall;
    // Versuche mitzählen und bei Max warnen
    if Versuche <= Max
      then Label2.Caption := IntToStr (Versuche) + '. Versuch:'
      else Label2.Caption := 'Es reicht!';
    // Eingabe auswerten ob zu klein oder zu groß  oder Richtig
    if Eingabe = Zufall
      then Label1.Caption := 'Richtig geraten!';

    if Eingabe < Zufall
      then
      begin
      Label1.Caption := 'Deine Zahl ist zu klein!';
    if Abs(Eingabe - Zufall) < 3
      then Label1.Caption := 'Deine Zahl ist zu klein! Nah dran!';
    end;

    if Eingabe > Zufall
      then
      begin
      Label1.Caption := 'Deine Zahl ist zu groß!';
      if Abs(Eingabe - Zufall) < 3
        then Label1.Caption := 'Deine Zahl ist zu groß! Nah dran!';
    end;

    // Wenn richtig geraten oder zu viele Versuche
    if (Eingabe = Zufall) or (Versuche > Max)
      then
      begin
      Button1.Caption := 'Ende';
      SpielEnde := true;
      end;
    except
      Label1.Caption := 'Quatsch!';
  end;
end;

Bis hier_______________________________________

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.SetFocus;
  // Wenn neues Spiel, Startwerte/Zufallszahl neu
  Label1.Caption := 'Ich denke mir eine neue Zahl!';
  Label2.Caption := 'Rate mal!';
  Button1.Caption := 'OK';
  Zufall := random(100) + 1;
  Versuche := 1;
  SpielEnde := false;
end;

procedure TForm1.Enter(Sender: TObject; var Key: Char);
begin

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  Zufall := random(100) + 1;
  Versuche := 1;
  SpielEnde := false;
end;

end.


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Do 15.03.2018 um 15:03


Symbroson - Do 15.03.18 13:35

Du könntest zB dem Edit ein OnKeyDown Event hinzufügen in dem du prüfst, ob die gedrückte Taste [Enter] war - und dann dein Button1Click aufrufen.


Delphi-Quelltext
1:
2:
3:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if key = 13 then Button1Click(Sender);
end;


13 ist sozusagen der KeyCode von Zeilenumbrüchen.
Windows nutzt für Zeilenumbrüche als Escape-Sequenz \r\n, bzw die Zeichencodes 13 und 10 hintereinander.

LG


jasocul - Do 15.03.18 13:52

Im Objektinspektor des Buttons die Eigenschaft "Default" auf True setzen, sollte eigentlich schon reichen.


Symbroson - Do 15.03.18 13:57

Stimmt, das geht auch
bei mehreren Edits mit unterschiedlichen callbacks wird es dann aber problematisch. Dann lieber gleich richtig


jasocul - Do 15.03.18 14:24

Mehrere Edits, die unterschiedlich auf ein <Enter> reagieren? Kann man machen, aber ... einheitliche Benutzersteuerung hätte da bei mir Priorität. :wink:

Ich denke aber, dass diese Überlegungen für den TE an dieser Stelle zu weit gehen. Daher sollten wir vielleicht in diesem Thread nicht weiter darauf eingehen.