Zitat von
sakura:
Im Zweifel kann man ja die Klassenfelder innerhalb des Implementation-Teil als Variablen deklarieren
Das ist eigentlich als Work-around gar nicht so übel. Wenn man in der Klasse Felder deklariert, die auf die globalen Variablen zeigen, hat man fast Klassenfelder. Aber nur fast: In der Klassenmethode muss noch direkt auf die globalen Variablen zugegriffen werden:
Delphi-Quellcode:
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
ClassField1: Integer = 0;
ClassField2: Boolean = false;
type
TMyObjectWithClassFields = class(TObject)
private
FMyClassField1: PInteger;
FMyClassField2: ^Boolean;
public
constructor Create;
class procedure IncClassFields;
procedure ShowValues;
end;
var
Form1: TForm1;
myObject: TMyObjectWithClassFields;
implementation
{$R *.DFM}
{ TMyObjectWithClassFields }
constructor TMyObjectWithClassFields.Create;
begin
FMyClassField1 := @ClassField1;
FMyClassField2 := @ClassField2;
end;
class procedure TMyObjectWithClassFields.IncClassFields;
begin
Inc(ClassField1);
ClassField2 := not ClassField2;
end;
procedure TMyObjectWithClassFields.ShowValues;
var
boolString: String;
begin
if FMyClassField2^ then
boolString := 'true'
else
boolString := 'false';
ShowMessage('MyClassField1: ' + InttoStr(FMyClassField1^) + #13#10 +
'MyClassField2: ' + boolString);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
myObject := TMyObjectWithClassFields.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
myObject.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
myObject.IncClassFields;
myObject.ShowValues;
end;
end.