AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TSpeedButton Sender Übergabe Problem

Ein Thema von jdiephaus · begonnen am 20. Apr 2017 · letzter Beitrag vom 23. Apr 2017
 
nahpets
(Gast)

n/a Beiträge
 
#2

AW: TSpeedButton Sender Übergabe Problem

  Alt 20. Apr 2017, 14:49
Mal ein bisserl rumgewuselt und ungetestet:
Delphi-Quellcode:
unit Unit1;
{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls, Buttons;

type

  { TForm1 }

  TForm1 = class(TForm)
    Label1: TLabel;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Tsb0: TSpeedButton;
    Tsb01: TSpeedButton;
    Tsb02: TSpeedButton;
    Tsb03: TSpeedButton;
    Tsb04: TSpeedButton;
    Tsb05: TSpeedButton;
    Tsb06: TSpeedButton;
    Tsb07: TSpeedButton;
    Tsb08: TSpeedButton;
    Tsb09: TSpeedButton;
    TsbClear: TSpeedButton;
    TsbDivision: TSpeedButton;
    TsbMultiplication: TSpeedButton;
    TsbSubtraction: TSpeedButton;
    TsbAddition: TSpeedButton;
    TsbEqual: TSpeedButton;

    procedure TsbClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure TsbOpClick(Sender: TObject);

  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  // Result ist eigentlich "reserviert" als Rückgabewert von Funktionen,
  // das kann ggfls. zu Verwirrung führen.
  // Result lieber in Ergebnis umbenennen.
  number,result: real;
  math_op : boolean;
  zeichen, op, current_op : char;
  zeichenkette : ansistring;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.TsbClick(Sender: TObject);
begin
  if Sender is TSpeedButton then begin
    // Wir nutzen für die Ziffer das Tag-Attribut der Buttons.
    // Button für die 1 erhält Tag := 1;
    // ...
    // Button für die 9 erhält Tag := 9;
    // Button für die 0 erhält Tag := 0;
    // Tag kann man im Objektinspektor entsprechend zuweisen.
    zeichen := Chr(TSpeedButton(Sender).Tag);
  end;
  if math_op then begin
    math_op:= false;
    zeichenkette := zeichen;
  end
  else zeichenkette := zeichenkette + zeichen;
  label1.Caption := zeichenkette;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 math_op := true;
 current_op := '0';
end;

procedure TForm1.TsbOpClick(Sender: TObject);
begin
  if Sender is TSpeedButton then begin
    // Auch hier könnte man mit Tag arbeiten:
    case TSpeedButton(Sender).Tag of
      1 : op := '1'; // if Sender = TsbAddition then op := '1';
      2 : op := '2'; // if Sender = TsbSubtraction then op := '2';
      3 : op := '3'; // if Sender = TsbMultiplication then op := '3';
      4 : op := '4'; // if Sender = TsbDivision then op := '4';
      5 : op := 'c'; // if Sender = TsbClear then op := 'c';
      6 : op := '='; // if Sender = TsbEqual then op := '=';
    end;
  end;

  math_op := true;
  number := strtofloat(label1.Caption);

  case current_op of
    '0' : result := number;
    '1' : result := result+number;
    '2' : result := result-number;
    '3' : result := result*number;
    '4' : result := result/number;
    'c' : result := 0;
    '=' : result := result;
  end;

  current_op := op;
  label1.Caption := floattostr(result);
end;

end.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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