Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ratespiel, Zahlen 1-9 mit RadioButtons (https://www.delphipraxis.net/103515-ratespiel-zahlen-1-9-mit-radiobuttons.html)

Tobicaster 16. Nov 2007 18:46


Ratespiel, Zahlen 1-9 mit RadioButtons
 
Ich möchte, dass der Wert (Caption) des angeklickten RadioButtons in die Variable radiobutton geschrieben wird.
Wie kann ich da vorgehen?

Vielen Dank schonmal!

Delphi-Quellcode:
unit Main;

interface

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

type
  TForm1 = class(TForm)
    LblZahl: TLabel;
    BtnEnde: TButton;
    BtnNeu: TButton;
    BtnPruefe: TButton;
    LblHeadline: TLabel;
    RBtn1: TRadioButton;
    RBtn2: TRadioButton;
    RBtn5: TRadioButton;
    RBtn3: TRadioButton;
    RBtn4: TRadioButton;
    RBtn6: TRadioButton;
    RBtn8: TRadioButton;
    RBtn9: TRadioButton;
    RBtn7: TRadioButton;
    procedure FormCreate(Sender: TObject);
    procedure BtnPruefeClick(Sender: TObject);
    procedure BtnEndeClick(Sender: TObject);
    procedure BtnNeuClick(Sender: TObject);

  private
    zahl, radiobutton: integer;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
zahl := random(8) + 1;
{Jetzt: Alle RadioButtons entchecken}
LblZahl.Caption := 'Errate mich!';
end;

procedure TForm1.BtnPruefeClick(Sender: TObject);
begin
  radiobutton := {StrToInt vom RBtn.Caption, wo RBtn.Checked = true ist}
    if radiobutton < zahl then
      LblZahl.Caption := IntToStr(radiobutton) + '? Nee, größer'
    else
    if radiobutton > zahl then
      LblZahl.Caption := IntToStr(radiobutton) + '? Nee, kleiner'
    else
      begin
      LblZahl.Caption := 'Richtig! Es ist die ' + IntToStr(zahl);
      ShowMessage('Alter, du hast es voll drauf!');
      end;
end;

procedure TForm1.BtnNeuClick(Sender: TObject);
begin
  Form(sender);
end;

procedure TForm1.BtnEndeClick(Sender: TObject);
begin
  close;
end;

end.

gasty 16. Nov 2007 18:59

Re: Ratespiel, Zahlen 1-9 mit RadioButtons
 
Hi, ich bin selbst neu in Delphi, aber ich denke, dass ich das schaffe.
Übernehme keine Garantie :-D

Also ich würde radiobutton erstmal public deklarieren:
Delphi-Quellcode:
...
  end;

var
  Form1: TForm1;
  radiobutton, zahl: Integer;

implementation

{$R *.dfm} 
...
Dann würde ich bei jedem RadioButton ne If-Clause machen:
Delphi-Quellcode:
If RadioButton1.Checked then radiobutton := 1;
If RadioButton2.Checked then radiobutton := 2;
...
Delphi-Quellcode:
procedure TForm1.BtnPruefeClick(Sender: TObject);
begin
// Hier zeile entfernt
    if radiobutton < zahl then
      LblZahl.Caption := IntToStr(radiobutton) + '? Nee, größer'
    else
    if radiobutton > zahl then
      LblZahl.Caption := IntToStr(radiobutton) + '? Nee, kleiner'
    else
      begin
      LblZahl.Caption := 'Richtig! Es ist die ' + IntToStr(zahl);
      ShowMessage('Alter, du hast es voll drauf!');
      end;
end;
Müsste so eigentlich klappen.

DeddyH 16. Nov 2007 19:00

Re: Ratespiel, Zahlen 1-9 mit RadioButtons
 
So vielleicht?
Delphi-Quellcode:
type
  TForm1 = class(TForm)
...
  private
    zahl, radiobutton: integer;
    procedure SetRadioButton(Sender: TObject);
...
end;
...

procedure TForm1.SetRadioButton(Sender: TObject);
begin
  radiobutton := StrToInt(TRadioButton(Sender).Caption);
end;

procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
  for i := 0 to ComponentCount - 1 do
    if (Components[i] is TRadioButton) then
      TRadioButton(Components[i]).OnClick := SetRadioButton;
end;
[edit] Alternativ könntest Du auch eine RadioGroup nehmen, die RadioButtons über die Eigenschaft Items definieren und den ItemIndex der RadioGroup auswerten. [/edit]

hoika 16. Nov 2007 19:04

Re: Ratespiel, Zahlen 1-9 mit RadioButtons
 
Hallo,

setze bei jedem Radiobutton das property Tag im Objectinspector,
erzeuge eine OnClick für den 1. Radiobutton,
setze diese OnClick für alle anderen

und dann etwa so

Delphi-Quellcode:
procedure TForm1.OnRadioButton1Click(Sender: TObject);
var
  RB: TRadioButton;
begin
  if Sender is TRadioButton then
  begin
    RB:= TRadioButton(Sender);
 
    Label.Caption:= IntToStr(RB.Tag)
  end;
end;

Heiko

DeddyH 16. Nov 2007 19:06

Re: Ratespiel, Zahlen 1-9 mit RadioButtons
 
Das sollten genug Möglichkeiten sein :D

Tobicaster 17. Nov 2007 14:50

Re: Ratespiel, Zahlen 1-9 mit RadioButtons
 
Heyho!

Danke erstmal, ich werd's gleich mal probieren.

@ gasty: Das wollte ich nicht machen, da es zu viel Schreibarbeit ist und es sicher viel einfacher geht ;)
Wieso muss ich die Variablen public deklarieren?


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