Dazappa, it may not be obvious at first, if you've never needed it

Think of singletons before class vars. There was no easy way to do it, other than hardcode a global implementation section variable, like you suggested. Now you can make a rather elegant solution like this:

[pascal]
type
TSingletonClass = class of TSingleton;

TSingleton = class
private
class var fInstance: TSingleton;
public
class function GetInstance: TSingleton;

constructor Create; virtual;
destructor Destroy; override;
end;

TLaks = class(TSingleton)
hat: longint;
end;

class function TSingleton.GetInstance: TSingleton;
begin
if assigned(fInstance) then
result := fInstance
else
result := TSingletonClass(self.ClassType).Create;
end;

constructor TSingleton.Create;
begin
inherited Create;
fInstance := self;
end;

destructor TSingleton.Destroy;
begin
fInstance := nil;
inherited Destroy;
end;

var a,b: TLaks;
begin
a := TLaks(TLaks.GetInstance);
a.hat := 13421;

b := TLaks(TLaks.GetInstance);
writeln(b.hat);

a.free;
readln;
end.
[/pascal]