Das schnüffelt mir eher nach einer statischen Klasse, die sich um solche Dinge kümmert. (Im Grunde eine Art Singleton.) Die verhält sich am Ende ähnlich wie eine globare Variable, ist aber neben
OOP konform auch durch die Notwendigkeit der qualifizierteren Referenzierung sicherer zu verwenden als globale Variablen.
Delphi-Quellcode:
unit uGlobalControlManager;
interface
type
TGlobalControlManager =
class
private
class var FLastActiveControl: TWinControl;
public
class procedure FocusChanged(
var Message: TCMFocusChanged);
class procedure FocusLastActiveControl;
// Und weitere wie in Sir Rufos frmTemplate Klasse
end;
implementation
class procedure TGlobalControlManager.FocusChanged(
var Message: TCMFocusChanged);
begin
// Wie von Sir Rufo in seiner frmTemplate Klasse
end;
...
Und dann das in die Basisklasse von Sir Rufo einfuckeln:
Delphi-Quellcode:
unit RofuForm;
uses
..., uGlobalControlManager;
type
TfrmTemplate =
class(TForm)
private
procedure CMFocusChanged(
var Message: TCMFocusChanged);
message CM_FOCUSCHANGED;
protected
procedure FocusLastControl;
public
end;
implementation
procedure TfrmTemplate.CMFocusChanged(
var Message: TCMFocusChanged);
message CM_FOCUSCHANGED;
begin
TGlobalControlManager.FocusChanged(
Message);
end;
procedure TfrmTemplate.FocusLastControl;
begin
TGlobalControlManager.FocusLastControl;
end;
...
Und auf gleiche Weise ließe sich eine Basisklasse für deine Frames zwischen schieben, die die gleichen Funktionen mit Weiterleitung auf die TGlolbalControlManager-Klasse implementiert, und schon kannst du diese Funktionalität überall nutzen, und es ist völlig egal in welcher Form oder in welchem Frame das zuzletzt fokussierte Control lag.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)