Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi procedures zusammenfassen/vereinfachen (Totale Anfängerfrae) (https://www.delphipraxis.net/103181-procedures-zusammenfassen-vereinfachen-totale-anfaengerfrae.html)

Tobicaster 11. Nov 2007 23:52


procedures zusammenfassen/vereinfachen (Totale Anfängerfrae)
 
Hallo!

Ich bin absoluter Neuling in Delphi und hab shcon gleich ne Frage, die mir fast schon peinlich ist^^



Delphi-Quellcode:
procedure TForm1.B0Click(Sender: TObject);
begin
Display.Caption := Display.Caption + (sender as TButton).Caption;
end;

procedure TForm1.B1Click(Sender: TObject);
begin
Display.Caption := Display.Caption + (sender as TButton).Caption;
end;

procedure TForm1.B2Click(Sender: TObject);
begin
Display.Caption := Display.Caption + (sender as TButton).Caption;
end;

procedure TForm1.B3Click(Sender: TObject);
begin
Display.Caption := Display.Caption + (sender as TButton).Caption;
end;

procedure TForm1.B4Click(Sender: TObject);
begin
Display.Caption := Display.Caption + (sender as TButton).Caption;
end;

procedure TForm1.B5Click(Sender: TObject);
begin
Display.Caption := Display.Caption + (sender as TButton).Caption;
end;

procedure TForm1.B6Click(Sender: TObject);
begin
Display.Caption := Display.Caption + (sender as TButton).Caption;
end;

procedure TForm1.B7Click(Sender: TObject);
begin
Display.Caption := Display.Caption + (sender as TButton).Caption;
end;

procedure TForm1.B8Click(Sender: TObject);
begin
Display.Caption := Display.Caption + (sender as TButton).Caption;
end;

procedure TForm1.B9Click(Sender: TObject);
begin
Display.Caption := Display.Caption + (sender as TButton).Caption;
end;
Wie kann ich obiges einfach und unkompliziert zusammenfassen? Danke schonmal!

Dax 11. Nov 2007 23:58

Re: procedures zusammenfassen/vereinfachen
 
Einfach allen Buttons den selben Eventhandler zuweisen.. Das mit dem Sender hast du ja schon richtig, fehlt nur noch der letzte Schritt ;)

Tobicaster 12. Nov 2007 00:16

Re: procedures zusammenfassen/vereinfachen (Totale Anfängerf
 
Ah natürlich! Leuchtet ein :wall: Danke für den Hinweis!

Gibt es auch noch eine Möglichkeit folgendes einfacher auszudrücken:

Delphi-Quellcode:
if op ='+' then
 begin
 Display.Caption := FloatToStr(Eingabe1 + Eingabe2);
 end;

if op ='-' then
 begin
 Display.Caption := FloatToStr(Eingabe1 - Eingabe2);
 end;

if op ='/' then
 begin
 Display.Caption := FloatToStr(Eingabe1 / Eingabe2);
 end;

if op ='*' then
 begin
 Display.Caption := FloatToStr(Eingabe1 * Eingabe2);
 end;
?

Flare 12. Nov 2007 00:20

Re: procedures zusammenfassen/vereinfachen (Totale Anfängerf
 
Hallo Tobicaster,

einfacher geht es nicht, aber kürzer! Schau dir dazu mal case ... of an.


Flare

Tobicaster 12. Nov 2007 00:42

Re: procedures zusammenfassen/vereinfachen (Totale Anfängerf
 
Ah ich hab's!

Delphi-Quellcode:
procedure TForm1.BGleichClick(Sender: TObject);
begin
Eingabe2 := StrToFloat(Display.Caption);

 case op of
  '+': begin
       Display.Caption := FloatToStr(Eingabe1 + Eingabe2);
       end;
  '-': begin
       Display.Caption := FloatToStr(Eingabe1 - Eingabe2);
       end;
  '*': begin
       Display.Caption := FloatToStr(Eingabe1 * Eingabe2);
       end;
  else
   try
   Display.Caption := FloatToStr(Eingabe1 / Eingabe2);
   except
   Display.Caption := 'Geht nicht!';;
   end;

 end;
end;
So scheint's zu funktionieren.

Danke!

Sharky 12. Nov 2007 06:32

Re: procedures zusammenfassen/vereinfachen (Totale Anfängerf
 
Hai Tobicaster,

ersteinmal: "Herzlich Willkommen in der Delphi-PRAXiS".

Bei deinem Code musst Du noch eines beachten. Wenn nach dem ersten durchlauf Display.Caption auf "Geht nicht!" gesetzt wird würdest Du bei einem erneuten klick auf einen der Buttons eine Exception in der Zeile
Code:
Eingabe2 := StrToFloat(Display.Caption);
bekommen.

Popov 12. Nov 2007 07:55

Re: procedures zusammenfassen/vereinfachen (Totale Anfängerf
 
Hallo Tobicaster, deinen Code hätte ich so nicht geschrieben. Der Divisor hat nichts in ELSE zu suchen. Im Endeffekt ändert sich da wohl nichts, da du wohl aufpassen wirst, aber trotzdem. Jedem Operator eine Zuweisung und überhaupt kein ELSE.

Zitat:

Zitat von Tobicaster
Delphi-Quellcode:
 case op of
    '+': ...
    '-': ...
    '*': ...
    '/': ...
  end;

Außerdem, persönlich bin ich kein Freund von try/except Missbrauch bei Programmierung. try/except ist nur für den unvorhersehbaren Fall. Eine Division durch Null sollte man selbst abfangen. Das könnte in etwa so aussehen:

Delphi-Quellcode:
    if Eingabe2 = 0 then
      Display.Caption := 'ERROR (Division durch Null)'
    else
      Display.Caption := FloatToStr(Eingabe1 / Eingabe2);
Warum willst du die Fehlermeldung dem Programm überlassen?

RavenIV 12. Nov 2007 08:16

Re: procedures zusammenfassen/vereinfachen (Totale Anfängerf
 
Zitat:

Zitat von Popov
Delphi-Quellcode:
    if Eingabe2 = 0 then
      Display.Caption := 'ERROR (Division durch Null)'
    else
      Display.Caption := FloatToStr(Eingabe1 / Eingabe2);
Warum willst du die Fehlermeldung dem Programm überlassen?

Also ich persönlich mach das immer anderstrum, den "guten" Fall zuerst und dann den "schlechten" Fall. Das find ich übersichtlicher.

Delphi-Quellcode:
    if Eingabe2 <> 0 then
    begin
      Display.Caption := FloatToStr(Eingabe1 / Eingabe2);
    end
    else
    begin
      Display.Caption := 'ERROR (Division durch Null)';
    end;

Tobicaster 12. Nov 2007 17:06

Re: procedures zusammenfassen/vereinfachen (Totale Anfängerf
 
Ah, wieder was dazu gelernt. Macht natürlich Sinn.
Aber wieso hat der Divisor nichts in ELSE zu suchen bzw. was ist der Grund dafür, dass einige Sachen nicht "missbraucht" werden sollten?

Apollonius 12. Nov 2007 17:09

Re: procedures zusammenfassen/vereinfachen (Totale Anfängerf
 
Die Division sollte in einen eigenen Fall, damit du einen Fehler ausgeben kannst, falls in Op irgendwelcher Quatsch steht. Und Exceptions sollte man nicht verwenden, wenn es auch genauso einfach ohne geht, denn Exception sind ziemlich langsam und tragen viel Overhead mit sich.


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