Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Möchte meinen Script verkürzen bzw. function erstellen (https://www.delphipraxis.net/176158-moechte-meinen-script-verkuerzen-bzw-function-erstellen.html)

Homie15 15. Aug 2013 13:16

Möchte meinen Script verkürzen bzw. function erstellen
 
...

DeddyH 15. Aug 2013 14:12

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Zumindest die eigentliche Berechnung könntest Du in Funktionen auslagern und statt der If-Abfragen eine case-Abfrage verwenden.
Delphi-Quellcode:
function Kathete(AndereKathete, Hypotenuse: double): double;
begin
  Result := Sqrt(Sqr(Hypotenuse) - Sqr(AndereKathete));
end;

function Hypotenuse(Ankathete, Gegenkathete: double): double;
begin
  Result := Sqrt(Sqr(Ankathete) + Sqr(Gegenkathete));
end;

...

case Art of
  1: ...
  2: ...
  3: ...
end;

Homie15 15. Aug 2013 18:41

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
schonmal danke, ich hatte iwie mehr daran gedacht die ifkeypressfunktionen in eine zu packen aber kein plan wie..

ringli 15. Aug 2013 18:53

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Du kannst den einzelnen Edit's im Objektinspektor jeweils die gleiche KeyPress-Procedure zuweisen. Damit hättest du nur noch eine KeyPress-Procedure die du ggf. anpasssen musst.

Furtbichler 15. Aug 2013 18:56

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Delphi-Quellcode:
procedure DoKeyPress (aEdit : TEdit; Var aKey : Char);
Begin
  if not (aKey in [#48..#57,#8,#44]) then aKey:=#0;
  if (aKey in[',']) and (aEdit.Text='') then
  begin
     aEdit.Text:= '0,';
     aEdit.Selstart:=Length(aEdit.Text);
  end;
  if (Key in[',']) and (pos(',',aAdit.Text)>0) then
    aKey:=#0;
End;

procedure TSatzdesPytagoras.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  DoKeyPress(Edit1, Key);
end;

procedure TSatzdesPytagoras.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  DoKeyPress(Edit2, Key);
end;

procedure TSatzdesPytagoras.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
  DoKeyPress(Edit3, Key);
end;
Geht aber noch kürzer (Der 'Sender' ist jeweils das TEdit-Control, in dem eine Taste gedrückt wurde).

DeddyH 15. Aug 2013 18:56

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Dann musst Du aber auch den Sender auswerten.

Furtbichler 15. Aug 2013 22:15

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Zitat:

Zitat von DeddyH (Beitrag 1225011)
Dann musst Du aber auch den Sender auswerten.

Ja. Wenn man es noch kürzer macht. Sonst nicht.

Der schöne Günther 15. Aug 2013 22:47

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Ich hätte nie gedacht, dass ich auch einmal mit so etwas langeweile, aber ich glaube, wichtiger als ein paar Buchstaben einzusparen wäre erst einmal
  • den Kram ordentlich zu formatieren
  • grundlegende Sprachkonstrukte zu verstehen
  • Oberflächen-Komponenten richtige Namen zu geben?

    Das Formular "SatzdesPytagoras" (wenn schon, dann "Pythagoras", oder?) kann man ja noch machen, aber wenn man in ein paar Tagen nochmal über den Quelltext schaut hilft einem so etwas wie
    Delphi-Quellcode:
    Edit1
    und
    Delphi-Quellcode:
    Edit2
    sicher nicht weiter.

Was soll ein
Delphi-Quellcode:
if Art=3 then
 c:= Sqrt(Strtofloat(Edit1.text)*Strtofloat(Edit1.text) + Strtofloat(Edit2.text) * Strtofloat(Edit2.text));
  showmessage ('C ist: ' + floattostr(c));
 begin
 
end;
wirklich bewirken? Bei der Einrückung und begin/end-Benutzung weiß ich nicht, ob man wirklich verstanden hat, was man da tut.


Ich bin heute in Spaßbremsen-Stimmung. 8-)

DeddyH 15. Aug 2013 23:12

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Zitat:

Zitat von Furtbichler (Beitrag 1225057)
Zitat:

Zitat von DeddyH (Beitrag 1225011)
Dann musst Du aber auch den Sender auswerten.

Ja. Wenn man es noch kürzer macht. Sonst nicht.

Da haben sich unsere Posts überschnitten, die Antwort galt Deinem Vorredner. Bevor das aber nun in Geschwafel ausartet:
Delphi-Quellcode:
procedure DoOnKeyPress(Sender: TObject; var Key: char);
const
  KEY_BACKSPACE = #8;
var
  TheEdit: TEdit;
begin
  TheEdit := Sender as TEdit;
  case Key of
    '0'..'9', KEY_BACKSPACE:
      Key := #0;
    ',':
      if Pos(',', TheEdit.Text) > 0 then
        Key := #0
      else if TheEdit.Text = '' then
        begin
         TheEdit.Text := '0,';
         TheEdit.Selstart := Length(TheEdit.Text);
        end;
  end;
end;
Das kann man dann allen Edits als OnKeyPress-Handler zuweisen (der Code ist allerdings ungetestet).

Homie15 16. Aug 2013 05:46

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Danke für die nützlichen Antworten :)

Furtbichler 16. Aug 2013 06:48

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Zitat:

Zitat von DeddyH (Beitrag 1225062)
...(der Code ist allerdings ungetestet).

Hättste mal ;-).
Der Code ist leider 'Müll'. Hier sollen einfach nur Ziffern erlaubt sein, bei einem Komma gibt es eine kleine Sonderbehandlung. So geht's.

Delphi-Quellcode:
procedure DoOnKeyPress(Sender: TObject; var Key: char);
const
   BACKSPACE = #8;
var
   TheEdit: TEdit;

begin
   TheEdit := Sender as TEdit;
   If Key = ',' then
     if Pos(',', TheEdit.Text) > 0 then
       Key := #0
     else if TheEdit.Text = '' then begin
       TheEdit.Text := '0,';
       TheEdit.Selstart := Length(TheEdit.Text);
     end
   else if Not (Key in ['0'..'9', BACKSPACE]) then
     Key := #0;
end;

DeddyH 16. Aug 2013 09:01

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Selber Müll, an begin und end gespart, so sind auch Buchstaben zulässig :tongue:
Delphi-Quellcode:
const
   BACKSPACE = #8;
var
   TheEdit: TEdit;
begin
   TheEdit := Sender as TEdit;
   If Key = ',' then
    begin //<-- darf nicht fehlen
     if Pos(',', TheEdit.Text) > 0 then
       Key := #0
     else if TheEdit.Text = '' then begin
       TheEdit.Text := '0,';
       TheEdit.Selstart := Length(TheEdit.Text);
     end
    end //<-- auch nicht
   else if Not (Key in ['0'..'9', BACKSPACE]) then
     Key := #0;

user0815 16. Aug 2013 10:14

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
@DeddyH: gib mal als erstes ein Komma ein.

Warum nicht einfach so:

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  BACKSPACE = #8;
begin
  if not (Key in ['0'..'9', DecimalSeparator, BACKSPACE]) then Key := #0;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  try
    Edit1.Text := FormatFloat('0.00', StrToFloat(Edit1.Text));
  except
    Edit1.Text := FormatFloat('0.00', 0);;
  end;
end;

DeddyH 16. Aug 2013 10:25

AW: Möchte meinen Script verkürzen bzw. function erstellen
 
Wieso sollte ich, ist ja nicht mein Code (obwohl man in dem Fall auch nur den Key entwerten oder das Komma aus der Vorlage entfernen müsste)?


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