Difference between revisions of "Type Helper/de"
From Lazarus wiki
Jump to navigationJump to search(One intermediate revision by the same user not shown) | |||
Line 5: | Line 5: | ||
=Type Helper= | =Type Helper= | ||
Mit dieser Funktion kann man Bezeichner um Funktionen erweitern.<br> | Mit dieser Funktion kann man Bezeichner um Funktionen erweitern.<br> | ||
− | Die Funktion '''Type Helper''' wird zum Teil auch bei Standard-Typen von FPC verwendet. ZB. <code>'''String. | + | Die Funktion '''Type Helper''' wird zum Teil auch bei Standard-Typen von FPC verwendet. ZB. <code>'''String.Split'''</code> <br> |
'''Type Helper''' steht erst ab FPC 3.0 zu Verfügung. | '''Type Helper''' steht erst ab FPC 3.0 zu Verfügung. | ||
==Beispiel== | ==Beispiel== | ||
− | + | Der Vektor wird um folgende Funktionen erweitert | |
+ | * Vektor skalieren. | ||
+ | * Über '''.x''' auf den Ersten Wert des Vektors zugreifen. | ||
+ | Man sieht, ein '''Type-Helper''' ist eine sehr mächtige Funktion. Dieses Beispiel hier ist für OpenGL eine grosse Hilfe. | ||
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
program Project1; | program Project1; | ||
− | {$modeswitch typehelpers} | + | {$modeswitch typehelpers} // "Type Helper" aktivieren. |
type | type | ||
− | TVector2f = array[0..1] of Single; | + | TVector2f = array[0..1] of Single; // Ein einfacher Vektor. |
− | TVector2fHelper = Type Helper for TVector2f | + | // Type-Helper für TVector2f. |
− | procedure Scale(x, y: Single); | + | TVector2fHelper = Type Helper for TVector2f // Schlüssel "Type Helper" verwenden. |
+ | private | ||
+ | function GetX: Single; // Getter für Y | ||
+ | procedure SetX(AValue: Single); // Setter für X | ||
+ | public | ||
+ | property x: Single read GetX write SetX; // Property für X | ||
+ | procedure Scale(x, y: Single); // Die Erweiterungs-Funktion. | ||
end; | end; | ||
− | procedure TVector2fHelper.Scale(x, y: Single); | + | function TVector2fHelper.GetX: Single; inline; |
+ | begin | ||
+ | Result := Self[0]; | ||
+ | end; | ||
+ | |||
+ | procedure TVector2fHelper.SetX(AValue: Single); inline; | ||
+ | begin | ||
+ | Self[0] := AValue; | ||
+ | end; | ||
+ | |||
+ | procedure TVector2fHelper.Scale(x, y: Single); inline; | ||
begin | begin | ||
Self[0] *= x; | Self[0] *= x; | ||
Line 28: | Line 47: | ||
end; | end; | ||
+ | // Hauptprogramm | ||
var | var | ||
− | vec: TVector2f; | + | vec: TVector2f; // Variable normal definieren. |
begin | begin | ||
− | vec[0]:= 1.5; | + | vec[0] := 1.5; |
− | vec[1]:= 2.5; | + | vec[1] := 2.5; |
vec.Scale(2.0, 3.0); // Erweiterte Funktion aufrufen. | vec.Scale(2.0, 3.0); // Erweiterte Funktion aufrufen. | ||
− | WriteLn(vec[0]:10:5); | + | WriteLn('X: ', vec[0]:10:5); |
− | WriteLn(vec[1]:10:5); | + | WriteLn('Y: ', vec[1]:10:5); |
− | end. | + | WriteLn; |
− | </syntaxhighlight> | + | vec.x := vec.x + 1.0; |
+ | WriteLn('X: ', vec[0]:10:5); | ||
+ | end.</syntaxhighlight> | ||
Ausgabe: | Ausgabe: | ||
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
− | + | X: 3.00000 | |
− | + | Y: 7.50000 | |
+ | |||
+ | X: 4.00000 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 22:38, 23 January 2018
Zurück zu den reservierten Wörtern.
Type Helper
Mit dieser Funktion kann man Bezeichner um Funktionen erweitern.
Die Funktion Type Helper wird zum Teil auch bei Standard-Typen von FPC verwendet. ZB. String.Split
Type Helper steht erst ab FPC 3.0 zu Verfügung.
Beispiel
Der Vektor wird um folgende Funktionen erweitert
- Vektor skalieren.
- Über .x auf den Ersten Wert des Vektors zugreifen.
Man sieht, ein Type-Helper ist eine sehr mächtige Funktion. Dieses Beispiel hier ist für OpenGL eine grosse Hilfe.
program Project1;
{$modeswitch typehelpers} // "Type Helper" aktivieren.
type
TVector2f = array[0..1] of Single; // Ein einfacher Vektor.
// Type-Helper für TVector2f.
TVector2fHelper = Type Helper for TVector2f // Schlüssel "Type Helper" verwenden.
private
function GetX: Single; // Getter für Y
procedure SetX(AValue: Single); // Setter für X
public
property x: Single read GetX write SetX; // Property für X
procedure Scale(x, y: Single); // Die Erweiterungs-Funktion.
end;
function TVector2fHelper.GetX: Single; inline;
begin
Result := Self[0];
end;
procedure TVector2fHelper.SetX(AValue: Single); inline;
begin
Self[0] := AValue;
end;
procedure TVector2fHelper.Scale(x, y: Single); inline;
begin
Self[0] *= x;
Self[1] *= y;
end;
// Hauptprogramm
var
vec: TVector2f; // Variable normal definieren.
begin
vec[0] := 1.5;
vec[1] := 2.5;
vec.Scale(2.0, 3.0); // Erweiterte Funktion aufrufen.
WriteLn('X: ', vec[0]:10:5);
WriteLn('Y: ', vec[1]:10:5);
WriteLn;
vec.x := vec.x + 1.0;
WriteLn('X: ', vec[0]:10:5);
end.
Ausgabe:
X: 3.00000
Y: 7.50000
X: 4.00000
Siehe auch
- Übersichtseite Type
Autor: Mathias