Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zwei Labels nacheinander mit Ziffernbuttons füllen (https://www.delphipraxis.net/203935-zwei-labels-nacheinander-mit-ziffernbuttons-fuellen.html)

cyberaj 8. Apr 2020 12:58

Zwei Labels nacheinander mit Ziffernbuttons füllen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin moin!

Ich steh' auf dem Schlauch, vielleicht hat ja jemand eine spontane Idee!

Ich habe ein Ziffernfeld (Button1-Button9) und zwei Labels (Label1, Label2)
siehe Anhang..

Durch klicken / tippen einer Ziffer soll das erste Label entsprechend die Ziffer zeigen, nach tippen der nächsten Ziffer, das zweite Label.

Nach der zweiten Ziffer soll nix mehr passieren, es gibt allerdings noch einen C-Button, damit kann man die Eingabe wieder löschen und auch zur 1. Ziffer zurück.

Mir fallen zwölf Handwerkermethoden ein, aber keine einzig elegante.
Hat jemand einen einfachen Lösungsansatz für mich??

Danke
AJ

zeras 8. Apr 2020 13:15

AW: Zwei Labels nacheinander mit Ziffernbuttons füllen
 
Alle Buttons bekommen die gleiche Routine zugewiesen. Dann prüfst du die Länge vom Label1 und Label2. Damit solltest du alles haben.

Alallart 8. Apr 2020 13:16

AW: Zwei Labels nacheinander mit Ziffernbuttons füllen
 
Zitat:

Zitat von cyberaj (Beitrag 1461596)
Mir fallen zwölf Handwerkermethoden ein, aber keine einzig elegante.
Hat jemand einen einfachen Lösungsansatz für mich??

Und was spricht gegen eine Handwerkermethode?

Alallart 8. Apr 2020 13:22

AW: Zwei Labels nacheinander mit Ziffernbuttons füllen
 
Delphi-Quellcode:
//SpeedButton0 bis SpeedButton10 greifen auf die gleiche Prozedur zu
procedure TForm1.SpeedButton1Click(Sender: TObject);

  function GetNumber(LabelName: String): String;
  var
    s: String;
  begin
    //Routine geht davon aus, dass alle Buttons die Nummer
    //SpeedButton0 bis SpeedButton10 haben.
    s := LabelName;
    Delete(s, 1, Length('SpeedButton')); //Entfernt Text vor der Zahl
    Result := s;
  end;

begin
  if Label1.Caption = '' then
    Label1.Caption := GetNumber(TSpeedButton(Sender).Name)
  else
    if Label2.Caption = '' then
      Label2.Caption := GetNumber(TSpeedButton(Sender).Name);
end;

procedure TForm1.SpeedButton12Click(Sender: TObject);
begin
  Label1.Caption := '';
  Label2.Caption := '';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SpeedButton12Click(nil);
end;

DieDolly 8. Apr 2020 13:23

AW: Zwei Labels nacheinander mit Ziffernbuttons füllen
 
Zitat:

Dann prüfst du die Länge vom Label1 und Label2. Damit solltest du alles haben.
Oder man zählt die Klicks mit. Aber das könnte alles etwas schwierig werden, wenn man zwei- oder mehrstellige Zahlen eingeben will.

zeras 8. Apr 2020 13:28

AW: Zwei Labels nacheinander mit Ziffernbuttons füllen
 
Zitat:

Zitat von DieDolly (Beitrag 1461603)
Zitat:

Dann prüfst du die Länge vom Label1 und Label2. Damit solltest du alles haben.
Oder man zählt die Klicks mit. Aber das könnte alles etwas schwierig werden, wenn man zwei- oder mehrstellige Zahlen eingeben will.

Er spricht aber von Ziffern. Also kann im Label1 nur eine Ziffer stehen und im Label2 auch nur eine Ziffer.
Ist das vielleicht eine Hausaufgabe in der Corona Zeit, die Online vorm Lehrer kommt?)

haentschman 8. Apr 2020 13:35

AW: Zwei Labels nacheinander mit Ziffernbuttons füllen
 
Moin...:P
Zitat:

die Online vorm Lehrer kommt?
...halte ich für ein Gerücht...Android + FMX. :zwinker:

Wie schon gesagt: Für dich sind Events (ButtonClick) interessant. Im Eventhandler weißt du die Werte den Labels zu...fertsch. :wink:

hoika 8. Apr 2020 13:36

AW: Zwei Labels nacheinander mit Ziffernbuttons füllen
 
Hallo,
GetNumber hätte ich über Nutzung des Properties Tag ersetzt.

Moombas 8. Apr 2020 14:20

AW: Zwei Labels nacheinander mit Ziffernbuttons füllen
 
Bei dem Beispiel von Alallart kannst du, wenn du normale Buttons benutzt auch einfach anstatt
Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);

  function GetNumber(LabelName: String): String;
  var
    s: String;
  begin
    //Routine geht davon aus, dass alle Buttons die Nummer
    //SpeedButton0 bis SpeedButton10 haben.
    s := LabelName;
    Delete(s, 1, Length('SpeedButton')); //Entfernt Text vor der Zahl
    Result := s;
  end;

begin
  if Label1.Caption = '' then
    Label1.Caption := GetNumber(TSpeedButton(Sender).Name)
  else
    if Label2.Caption = '' then
      Label2.Caption := GetNumber(TSpeedButton(Sender).Name);
end;
folgendes nutzen (deine Buttons sind ja entsprechend "konfiguriert"):

Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  if Label1.Caption = '' then
    Label1.Caption := TButton(Sender).Caption
  else
    if Label2.Caption = '' then
      Label2.Caption := TButton(Sender).Caption;
end;

himitsu 8. Apr 2020 14:34

AW: Zwei Labels nacheinander mit Ziffernbuttons füllen
 
@Alallart

Warum in GetNumber die Nummer aus dem Namen extrahieren und nicht die Caption verwenden?
Wobei man hier auch ganz gut .Tag verwenden darf, dann wäre Anzeige und Inhalt getrennt und es gäbe keine Probleme auf den Buttons was Anderes anzuzeigen
und man bräuchte nichtmal eine Funktion, da Tag direkt das Ergebnis liefert.
(z.B. die Ziffern/Zahlen in einer anderen Sprache oder z.B. als Wort "Eins")

Und wer diese Komponenten weiterhin als SpeedButton1 bis sonstwas benannt lässt, der hätte es verdient mit einem rosa Wattebausch gesteinigt zu werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz