Hallo und gesundes neues jahr alle miteinander
Da ich mit meiner Erkklärkunst auch dieses Jahr noch auf Kriegsfuß stehe hole ich mal etwas weiter aus, also bitte nicht gleich abschrecken lassen.
Ich habe so ne Art Observerklasse, in der vom Benutzer formulare erzeugt werden:
Delphi-Quellcode:
function TFormManager.RegisterNew(AForm: TFormClass; AOwner: TComponent;
ANewAppHandle: HWND): TForm;
begin
if Application.Handle <> ANewAppHandle
then
Application.Handle := ANewAppHandle;
try
result := AForm.Create(AOwner);
except
on E:
Exception do
begin
MessageDlg(E.
Message, mtError, [mbOK], 0);
result :=
nil;
end;
end;
if Assigned(result)
then
begin
result.FreeNotification(self);
FShowOnInit.Add(result);
end
else
Notification(
nil, opRemove);
end;
Wenn jetzt der Benutzer ein neues Form erzeugen möchte, ruft er diese Methode des FormManagers auf und bekommt das Formular zurückgeliefert. In den meisten Fällen wird der Benutzer jetzt noch nen Form.Show aufrufen um das Ding auch gleich anzuzeigen. Das möchte ich aber gern verhindern, wenn bsw. die Anwendung noch in der Initialisierung steckt, bzw die Anwendung weiß, dass dort noch einiges zu tun ist, bevor das Form sinnvoll angezeigt werden kann.
Jetzt hab ich mir ne Weile den Kopf zermartert, aber ich bin mir nicht ganz sicher wie ich das Anzeigen des Formulars verhindern soll.
Meine erste Idee wäre die MessageProc des Forms umbiegen und im Falle von CM_VISIBLE einfach nichts tun, allerdings erscheint mir das recht unsauber. Zweite Idee wäre über einen Hook WM_SHOWWINDOW abfangen, schauen ob der Empfänger im Formmanager registriert ist und ggf nichts tun. habt ihr noch andere Vorschläge?
viele grüße