Thema: Delphi Klassen Methoden

Einzelnen Beitrag anzeigen

Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Klassen Methoden

  Alt 6. Feb 2004, 16:48
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat