Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bowling(anfänger) (https://www.delphipraxis.net/115877-bowling-anfaenger.html)

Arathok 19. Jun 2008 11:17


Bowling(anfänger)
 
mal wieder ein anfänger problem ich möchte dass sich mein button 1 caption: namen einlesen wenn man ihn zum ersten mal clickt in caption:bestätigen umwandelt und wenn man ihn zum zweitenmal anklickt sich in caption:Bitte werfen umwandelt
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Button2: TButton;
    Button3: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
S1,S2,S3,S4,S5:String;
Punkte,j,Wuerfe:integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var a,n,i:integer;//das sind die zeilen
begin
j:=0+n;
if j=0 then
for i:=0 to 1 do
begin
Button1.Caption:='Bestätigen.';
inc (a);
n:=1;
end;
S1:=Edit1.Text;
S2:=Edit2.Text;
S3:=Edit3.Text;
S4:=Edit4.Text;
S5:=Edit5.Text;
memo1.lines.add('Die namen sind:'+S1+','+S2+','+S3+','+S4+'und '+S5+' ist das richtig?');

If a = 1 then
Button1.Caption:='Bitte werfen';
end;

end.
Grüße
christian

WIng2005 19. Jun 2008 11:26

Re: Bowling(anfänger)
 
Hallo,

suchst du sowas:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if button1.caption='namen einlesen' then
  Begin
    // mache was....

    button1.caption='bestätigen'
    exit;
  end
else if button1.caption='bestätigen' then
  Begin
    // mache was....

    button1.caption='Bitte werfen'
    exit;
end

else if button1.caption='Bitte werfen' then
Begin
    //mache was...

end;
end;
?

MFG
Steffen

angos 19. Jun 2008 11:27

Re: Bowling(anfänger)
 
Hi,

bist du sicher das du nur das willst?
Momentan sieht das so aus, als ob der Knopp bei jedem klick auch eine andere Aktion durchführen soll, also...

.. du kannst für solche dinge die Eigenschaft TAG des Buttons nutzen. Belege das einfach im Objektinspektor mit 0 vor


und dann machste so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  case Button1.Tag of
    1:
      begin
        Button1.Caption := 'Aktion3';
        Button1.Tag := 2;
        // hier weitere Dinge die beim ZWEITEN Klick passieren sollen;
      end;
    2:
      begin
        Button1.Caption := 'Aktion1';
        Button1.Tag := 0; // Also beim nächsten klicken wieder Aktion 1
        // hier weitere Dinge die beim DRITTEM Klick passieren sollen;
      end;
    else
    begin
      Button1.Caption := 'Aktion2';
      Button1.Tag := 1;
      // hier weitere Dinge die beim ERSTEN Klick passieren sollen;
    end;
  end;
end;

WIng2005 19. Jun 2008 11:37

Re: Bowling(anfänger)
 
Naja, prinzipiell machst du ja nix anderes. Die zusätzl. Zeile für die Tags kannst sparen.

MFG
Steffen

angos 19. Jun 2008 12:18

Re: Bowling(anfänger)
 
Hi,

klar kann man sich die sparen, ist vielleicht auch nur ne Esthetik-Frage.
Dein Source funktioniert genau so, da geb ich dir recht.

Gruß
angos

Jürgen Thomas 19. Jun 2008 12:35

Re: Bowling(anfänger)
 
Hallo,

wenn es schon so variabel gehalten wird, dann sollte man es auch konsequent machen. Benutze für jede dieser Aktionen eine eigene Prozedur, und die jeweils aktuelle wird (genauso wie der Text) dem Button zugeordnet.
Delphi-Quellcode:
procedure EinlesenClick(Sender: TObject);
procedure BestaetigenClick(Sender: TObject);
procedure WerfenClick(Sender: TObject);
Jede dieser Prozeduren bekommt die betreffenden Maßnahmen und ändert abschließend den Button, so ähnlich, wie die vorigen Antworten es innerhalb der "großen" Prozedur gemacht haben.
Delphi-Quellcode:
procedure EinlesenClick(Sender: TObject);
begin
  // mache was....

  //  Button auf den nächsten Schritt setzen
  button1.Caption := 'bestätigen';
  button1.OnClick := BestaetigenClick; // oder button1.Click? ich weiß nicht mehr genau
end;
Gruß Jürgen

PS. Was hat diese Frage eigentlich mit Internet oder LAN oder ASP.NET zu tun? Das Thema gehört doch stinknormal zu VCL/Controls.

alzaimar 19. Jun 2008 13:13

Re: Bowling(anfänger)
 
Zitat:

Zitat von WIng2005
Naja, prinzipiell machst du ja nix anderes. Die zusätzl. Zeile für die Tags kannst sparen.

Nein! Ändere die Beschriftung eines Knopfes und schon hast Du ein Problem. Das mit dem "Tag" ist schon die bessere Wahl.

Sherlock 19. Jun 2008 13:21

Re: Bowling(anfänger)
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von WIng2005
Naja, prinzipiell machst du ja nix anderes. Die zusätzl. Zeile für die Tags kannst sparen.

Nein! Ändere die Beschriftung eines Knopfes und schon hast Du ein Problem. Das mit dem "Tag" ist schon die bessere Wahl.

Bitte eine Erklärung dazu, warum das so ist. Für den seltenen Fall, daß ich sowas brauche, hab ich es immer ohne Tags gemacht (ohne Probleme).

Edit: Die Knopfbeschriftungsalternativen habe ich natürlich als Ressourcestrings einmalig definiert ;)

Sherlock

alzaimar 19. Jun 2008 13:26

Re: Bowling(anfänger)
 
Wenn man im Designer die Beschriftung ändert, z.B. durch Localizer, Gettext o.ä, oder einfach, weil dein Teamkamerad deine Beschriftung blöd findet, funktioniert deine Logik nicht mehr.

Es gilt: Visuelle und Logische Eigenschaften sind strikt zu trennen.

Hier wird dieser Grundsatz verletzt: Eine visuelle Eigenschaft (hier: die Buttonbeschriftung) ist die Grundlage der Entscheidung der auszuführenden Aktion.

Klar funktioniert dein Code. Aber er ist anfällig, sehr sogar.

PS: Dein Edit kommt zu spät, dir ist das also schon selber klar geworden. Dann steh wenigstens dazu :zwinker:

Dessenungeachtet ist es auch so miserabler Programmierstil.

DP-Maintenance 19. Jun 2008 13:34

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Internet / LAN / ASP.NET" nach "Sonstige Fragen zu Delphi" verschoben.
Es handelt sich nicht um ein Internet-/LAN-Problem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr.
Seite 1 von 2  1 2      

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