Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#13

AW: Variablenname mehrere Typen

  Alt 8. Jun 2015, 09:23
Das mit dem Overload probiere ich gleich mal aus, klingt interessant.
Was findest du an overload unelegant? Mit der Direktive overload ist es möglich, zwei oder mehr Varianten einer Methode oder einer Routine zu schreiben:
Das setzt voraus, dass ich weiß was Overload ist. Ich bin Amateur, also entspannt euch
Ich Probier die Overload Direktive mal aus (nachdem ich herausfinde, wie sie funktioniert), vielleicht ist sie nützlich.
Overload ist der Fachausdrück für Überladen. Du kannst eine Routine oder eine Methode (also eine Procedure oder eine Function) überladen. Das bedeutet, daß Delphi je nach Zusammensetzung der Parameter die jeweils richtige Routine auswählt. In obigem Beispiel wird einmal ein Integer übergeben und ein Integer im Result zurück erwartet. Rufst du also die Funtion mit Integer-Variablen auf, wählt Delphi die Integer-Variante. Analog verhält sich das mit der Real-Variante. Probier's doch einfach mal aus – dein PC wird davon schon nicht kaputtgehen, vertrau mir

Wenn es sich dagegen darum handelt, aus einer Basis-Klasse weitere spezialisierte Klassen abzuleiten (was ich angesichts deines Outings als Amateur eher nicht annehme), muß man das anders lösen, wie oben bereits von anderen Usern aufgezeigt.

Nachtrag:

Wenn du deine Methoden im Interface-Teil deklarierst, genügt es, dort die Direktive overload anzugeben. In diesem Falle kannst du sie im Implementation-Abschnitt weglassen:
Delphi-Quellcode:
Interface
...
  Procedure SetMargin(Const RE: TjvDBRichEdit; Const L,R,T,B : Integer); overload;
  Procedure SetMargin(Const RE: TjvRichEdit; Const L,R,T,B : Integer); overload;
...

Implementation

// ----- Ränder bei DB-RichEdits setzen (DBRichEdit)--------
Procedure SetMargin(Const RE: TjvDBRichEdit; Const L,R,T,B : Integer);
Var
  Rect : TRect;
begin
  Rect := RE.ClientRect;
  Rect.Left := Rect.Left + L;
  Rect.Right := Rect.Right - R;
  Rect.Top := Rect.Top + T;
  Rect.Bottom := Rect.Bottom - B;
  SendMessage(RE.Handle,EM_SETRECT,0,LongInt(@Rect));
end;

// ----- Ränder bei RichEdits setzen (RichEdit)-------------
Procedure SetMargin(Const RE: TjvRichEdit; const L, R, T, B: Integer);
Var
  Rect : TRect;
begin
  Rect := RE.ClientRect;
  Rect.Left := Rect.Left + L;
  Rect.Right := Rect.Right - R;
  Rect.Top := Rect.Top + T;
  Rect.Bottom := Rect.Bottom - B;
  SendMessage(RE.Handle,EM_SETRECT,0,LongInt(@Rect));
end;
Mit diesen beiden Proceduren kann ich entweder ein TjvRichEdit oder ein TjvDBRichEdit als Parameter angeben. Delphi wählt anhand der übereinstimmenden Parameter die richtige Procedure aus. Stimmen die übergebenen Parameter mit keiner der Overload-Versionen überein, gibt's eine Fehlermeldung beim Compilieren.

Geändert von Perlsau ( 8. Jun 2015 um 09:39 Uhr) Grund: Nachtrag
  Mit Zitat antworten Zitat