Autor Beitrag
GiuStyler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 65
Erhaltene Danke: 1

Win 8.1
Delphi XE6
BeitragVerfasst: Fr 10.10.14 09:56 
Hallo. Habe mal wieder ein problem. Ich soll aus dieser procedure eine function erstellen, damit man den Code-Abschnitt beliebig in anderne Programmen einbauen kann auch wenn die Bezeichnung der Felder anders ist. Kann mir da jemand einen Tipp geben wie es gehen soll?

Kurz zu dem Mini-Programm. Es besteht aus 4 Feldern.

1. Stellenangabe (Man gibt die Anzahl an Stellen die man haben will (z. B. 7)
2. Anfangswert (Man gibt eine Zahl an (z. B. 20)
3. Steigung (Man gibt hier eine Zahl um die der Anfangswert gesteigert wird (z. B. 300)
4. Neuer Wert (Hier werden 2 & 3 zusammengezählt und ausgewertet)

Alle nicht benutzen Stellen bekommen automatisch eine führende "0" in diesem Beispiel wäre es dann 0000320

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TFormWertsteigern.BitBtnOKClick(Sender: TObject);
var
  l_ZahlEingabe, l_ZahlSteigern, l_ZahlNeuerWert, l_ZahlErgebnis, l_i_max, l_s_erg : Integer; // Variabeln gesetzt
begin
  l_ZahlEingabe := StrToInt(EditZahlEingabe.Text);
  l_ZahlSteigern := StrToInt(EditZahlSteigern.Text);
  l_i_max := StrToInt(EditStellen.Text);

  l_ZahlNeuerWert := l_ZahlEingabe + l_ZahlSteigern; // Ergebnis der zwei Eingaben

  EditZahlNeuerWert.Text := IntToStr(l_ZahlNeuerWert); // Umwandlung des Ergebnisses in einem string

    while Length(EditZahlNeuerWert.Text) < l_i_max do
      begin
        EditZahlNeuerWert.Text := '0' + EditZahlNeuerWert.Text;
      end;

  if (Length(EditZahlNeuerWert.Text) < l_i_max) then
    begin
      EditZahlNeuerWert.Text := '0'+ EditZahlNeuerWert.Text;
    end;
end;


daraus soll ich nun eine function machen die überall einsetzbar ist.

PS: Danke für die Hilfen und Tipps

MfG
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Fr 10.10.14 11:07 
Als erstes: Niemals ständig mit denProperties von visuellen Controls arbeiten (z.B. EditZahlNeuerWert.Text). Das ist schneckenlahm. Solche Dinge werden in einer lokalen Variable abgewickelt und dann am Ende einmal ins Control geschrieben.

Und wenns ne function sein soll... Ich denke, ich habe genug gesagt ;)

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Fr 10.10.14 11:27 
Eine Funktion ist eine Routine, die etwas zurückgibt, im Gegensatz zu einer Prozedur. Man kann ihr Parameter übergeben, die sie dann zur Verarbeitung heranzieht. Damit sie autark arbeiten kann, darf sie keine globalen Dinge verwenden, sondern nur die angesprochenen Parameter. Kleines Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function MyConcat(s1, s2: string): string;
begin
  Result := s1 + s2;
end;

Diese Funktion übernimmt 2 Strings, klebt sie aneinander und gibt diesen zusammengefügten String als Ergebnis (engl.: Result) zurück. Wenn ich das richtig überblickt habe, müsste Deine Funktion dann 3 Parameter aufweisen.

[edit] delphibasics.co.uk/A...le.asp?Name=Routines [/edit]
GiuStyler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 65
Erhaltene Danke: 1

Win 8.1
Delphi XE6
BeitragVerfasst: Di 21.10.14 09:03 
Danke. Meine function sieht nun so aus und klappt alles.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
function WertSteigern(pi_Anfangswert,pi_Steigerung, pi_Stellen : Integer) : string;
var
  li_ZahlNeuerWert :  Integer;
begin
  li_ZahlNeuerWert := pi_Anfangswert + pi_Steigerung; // Ergebnis der zwei Eingaben

  Result := IntToStr(li_ZahlNeuerWert); // Umwandlung des Ergebnisses in einem string

  // Check, ob Bereichsüberschreitung
  if (Length(Result) <= pi_Stellen) then
  begin
     while Length(Result) < pi_Stellen do
     begin
       Result := '0' + Result;
     end;
  end
  else
     Result := 'ERROR';
end;