Ziel des ganzen ist es einer beliebigen Klasse eine CriticalSection samt Lock/Unlock-Methoden zu spendieren, ohne da jetzt jedes erst von der Klasse ableiten zu müssen und den kompletten Code immer wieder zu schreiben.
Vielleicht kannst du Arme-Leute-RAII mittels Interfaces nutzen. Ich hab z.B. sowas für die temporäre Anzeige von Cursorn:
Delphi-Quellcode:
interface
type
ICursorGuard = interface
end;
function GuardCursor(NewCursor: TCursor = crHourGlass): ICursorGuard;
implementation
type
TCursorGuard = class(TInterfacedObject, ICursorGuard)
private
FOldCursor: TCursor;
public
constructor Create(NewCursor: TCursor);
destructor Destroy; override;
end;
{ TCursorGuard }
constructor TCursorGuard.Create(NewCursor: TCursor);
begin
inherited Create;
FOldCursor := Screen.Cursor;
Screen.Cursor := NewCursor;
end;
destructor TCursorGuard.Destroy;
begin
Screen.Cursor := FOldCursor;
inherited Destroy;
end;
function GuardCursor(NewCursor: TCursor = crHourGlass): ICursorGuard;
begin
Result := TCursorGuard.Create(NewCursor);
end;
Das kannst du dann so aufrufen:
Delphi-Quellcode:
procedure Test;
var
Guard: ICursorGuard;
begin
Guard := GuardCursor;
//Mach was langwieriges
end;
// oder sogar so:
procedure Test;
begin
GuardCursor;
//Mach was langwieriges
end;