Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Eigene function erstellen


GiuStyler - Fr 10.10.14 09:56
Titel: Eigene function erstellen
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


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 - 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 ;)


WasWeißDennIch - 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:

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] http://delphibasics.co.uk/Article.asp?Name=Routines [/edit]


GiuStyler - Di 21.10.14 09:03

Danke. Meine function sieht nun so aus und klappt alles.


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;