Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TLabel.Caption wird nicht geändert? (https://www.delphipraxis.net/175410-tlabel-caption-wird-nicht-geaendert.html)

milos 19. Jun 2013 13:54

Delphi-Version: XE2

TLabel.Caption wird nicht geändert?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo leute ^^
Habe mir heute die Delphi XE4 Testversion geholt um endlich wieder Mal Delphi ausprobieren zu können.
Ich habe vor Delphie so zu lernen, wie ich jede andere Programmiersprache auch gelernt habe. Mit Learning-By-Doing :D

Ich habe ein "Zahlen-Raten" Programm geschrieben. Auf die Idee kam ich, da es auch mein erstes Programm war als ich mit Delphi 3 angefangen habe ^^ Ich wollte es jedoch noch ein bisschen komplexer und "vollständiger" haben und habe daher noch Leben, Versuche sowie eine Konfiguration eingebaut. Das meiste funktioniert, jedoch wird bei einem Versuch mein Label nicht verändert um zu sehen wie der Stand der Leben und Versuche aussieht.

Was ich falsch gemacht habe, weiss ich leider auch nicht :/

Delphi-Quellcode:
unit GetTheNr;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type
  TGetTheNumber = class(TForm)
    Label1: TLabel;
    LabelLives: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    EditLives: TEdit;
    Button1: TButton;
    Label5: TLabel;
    Label6: TLabel;
    REasy: TRadioButton;
    RMiddle: TRadioButton;
    RHard: TRadioButton;
    RCustom: TRadioButton;
    Panel1: TPanel;
    Restart: TButton;
    EditNumber: TEdit;
    Label7: TLabel;
    Label8: TLabel;
    GuessBox: TEdit;
    Label9: TLabel;
    Result: TLabel;
    procedure RCustomClick(Sender: TObject);
    procedure RMiddleClick(Sender: TObject);
    procedure RHardClick(Sender: TObject);
    procedure REasyClick(Sender: TObject);
    procedure RestartClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  GetTheNumber: TGetTheNumber;
  number, lives, tries: integer; // Die gebrauchten Variabeln.
implementation

{$R *.dfm}

// Zahl überprüfen
// Status ausgeben
// Leben und Versuche berechnen
procedure TGetTheNumber.Button1Click(Sender: TObject);
var
guess:integer; // Damit ich den Inhalt der Textbox in einer Variable speichern kann.
begin
  // Und da geschiehts auch schon
  guess := StrToInt(GuessBox.Text);

  // Wenn die eingegebene Zahl zu gross ist,...
  if number > guess then
  begin
    result.Caption := 'Deine Zahl ist zu klein.';
    lives := lives - 1;
    tries := tries + 1;
  end
  // Zu klein...
  else if number < guess then
  begin
    result.Caption := 'Deine Zahl ist zu gross';
    lives := lives - 1;
    tries := tries + 1;
  end
  // Richtig!!!
  else if number = guess then
  begin
    result.Caption := 'Richtig!';
    tries := tries + 1;
  end;
  //////////////////////////////////////////
  // Das passiert irgendwie nicht:       //
  label3.Caption := tries.ToString();    //
  label8.Caption := lives.ToString();    //
  //////////////////////////////////////////
end;

procedure TGetTheNumber.RCustomClick(Sender: TObject);
begin
  // Wenn Benutzerdefiniert eingestellt ist, sollen die Textboxen erscheinen
  if RCustom.Checked = true then begin
    EditLives.Visible := true;
    EditNumber.Visible := true;
  end
  // Sonst nicht
  else begin
    EditLives.Visible := false;
    EditNumber.Visible := false;
  end;


end;

procedure TGetTheNumber.REasyClick(Sender: TObject);
begin
  EditLives.Visible := false;
  EditNumber.Visible := false;
end;

procedure TGetTheNumber.RHardClick(Sender: TObject);
begin
  EditLives.Visible := false;
  EditNumber.Visible := false;
end;

procedure TGetTheNumber.RMiddleClick(Sender: TObject);
begin
  EditLives.Visible := false;
  EditNumber.Visible := false;
end;
// ENDE DER CUSTOM TEXTBOXen LÖSUNG.

// Wenn man auf übernehmen klickt
procedure TGetTheNumber.RestartClick(Sender: TObject);
begin
  // Wenn Custom
  if RCustom.Checked = true then
  begin
    // Eigene Daten übernehmen
    Randomize();
    number := Round(Random() * StrToInt(EditNumber.Text));
    tries := 0;
    lives := StrToInt(EditLives.Text);
  end
  // Sonst vorgegebene
  else
  begin
    if REasy.Checked = true then
    begin
      Randomize();
      number := Round(Random() * 1000);
      tries := 0;
      lives := 20;
    end
    else if RMiddle.Checked = true then
    begin
      Randomize();
      number := Round(Random() * 5000);
      tries := 0;
      lives := 15;
    end
    else if RHard.Checked = true then
    begin
      Randomize();
      number := Round(Random() * 10000);
      tries := 0;
      lives := 15;
    end;
  end;
  Button1.Enabled := true;
end;

end.

// Wars auch schon :)
Die Labels werden auf den Zeilen 83 & 84 geändert, doch passieren tut nichts.
Hoffe einer kann mir helfen ^^

MfG

PS: Man kann im Forum nur die Delphi-Versionen 5-XE2 auswählen.

PS2: Wieso ist meine kleine Anwendung fast 10mg gross? xD Im anhang wäre die Anwendung :)

PS3: Kann mir jemand einen Tipp geben wie man am besten ein Form designd? Wie man bei meiner Anwendung sehen kann, schaffe ich das iwie nicht die Controls so zu platzieren wie ich das gerne haben will, da immer diese "ich-muss-alles-so-doof-nebeneinander-setzen-aber-nie-neben-das-richtige-control" zeug mich nervt ^^

DeddyH 19. Jun 2013 13:59

AW: TLabel.Caption wird nicht geändert?
 
Ist integer neuerdings eine Klasse wie in .NET? Ansonsten müsste der Compiler bei dem ToString() doch eigentlich meckern. Naja, wie dem auch sei, versuch es mal mit
Delphi-Quellcode:
label3.Caption := IntToString(tries);

Thom 19. Jun 2013 14:04

AW: TLabel.Caption wird nicht geändert?
 
Unter XE4 besitzen auch einfache Typen Helper-Methoden.
Siehe Docwiki.

milos 19. Jun 2013 14:07

AW: TLabel.Caption wird nicht geändert?
 
Zitat:

Zitat von DeddyH (Beitrag 1219044)
Ist integer neuerdings eine Klasse wie in .NET? Ansonsten müsste der Compiler bei dem ToString() doch eigentlich meckern. Naja, wie dem auch sei, versuch es mal mit
Delphi-Quellcode:
label3.Caption := IntToString(tries);

Hi und danke für die Antwort ^^
Irgendwie hatte ich in erinnerung, dass IntToStr in D3 nicht vorhanden war. Sicher bin ich mir jedoch nicht.
Ich habe einfach nach der Variable einen Punkt gesetzt und ToString() als vorschlag gesehen. Dachte wird so funktionieren ^^

Jedoch funktioniert IntToStr() auch nicht.

MfG

PS: Debugger meldet keine Fehler.

baumina 19. Jun 2013 14:21

AW: TLabel.Caption wird nicht geändert?
 
Ich habe deine EXE gerade mal bei mir gestartet. Mir fällt auf, dass wenn ich die [ALT]-Taste drücke dann die Zahlen sehen kann. Demnach hat es etwas mit der Aktualisierung bzw. dem Fensterhandling zu tun. Eine einfache Abhilfe wäre da ein Invalidate oder Refresh der Labels.

Uwe Raabe 19. Jun 2013 14:24

AW: TLabel.Caption wird nicht geändert?
 
Es würde übrigens helfen, wenn du die Sourcen des Projekts anhängen würdest. Die Exe kann sich daraus dann ja jeder selbst erstellen. Das ist dann auch nicht so ein großer Upload.

milos 19. Jun 2013 14:42

AW: TLabel.Caption wird nicht geändert?
 
Zitat:

Zitat von baumina (Beitrag 1219050)
Ich habe deine EXE gerade mal bei mir gestartet. Mir fällt auf, dass wenn ich die [ALT]-Taste drücke dann die Zahlen sehen kann. Demnach hat es etwas mit der Aktualisierung bzw. dem Fensterhandling zu tun. Eine einfache Abhilfe wäre da ein Invalidate oder Refresh der Labels.

Danke, das hat mich auf die Lösung gebracht.
Habe zuerst Invalidate und Refresh ausprobiert. Beides hat nicht geklappt. [ALT] funktionierte jedoch.
Der Fehler war, dass ich die Labels zuerst gestzt habe und sie dann auf das Panel gezogen habe und die Labels "nicht drauf" waren. - Wieso auch immer - Ist dies normal oder habe ich nur was komplett falsches gemacht?
Wenn ich den Panel jedoch wegschiebe, klappts wunderbar. Wirklich blöder Fehler den ich gemacht habe >.<


Zitat:

Zitat von Uwe Raabe (Beitrag 1219051)
Es würde übrigens helfen, wenn du die Sourcen des Projekts anhängen würdest. Die Exe kann sich daraus dann ja jeder selbst erstellen. Das ist dann auch nicht so ein großer Upload.

Danke, werde ich beim nächsten Mal berücksichtigen :)

Nochmal jedem ein dankeschön, dass ihr euch zeit genommen habt :)


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