Ok, ich hab das Problem gefunden. Wie ich schon oben geschrieben habe liegt mein letzter Bildschirmschoner schon über ein halbes Jahr her, oder länger. Deshalb hab ich die eine oder andere Sache schon mal vergessen, und kein Bildschirmschoner ist gleich wie die anderen. Manchmal muß man nur etwas über das Problem quatschen um selbst auf die Lösung zu kommen, denn dabei denkt man oft an Sachen die man vorher nicht beachtet hat.
Der schuldige Part ist der hier:
Delphi-Quellcode:
OldStyle := GetWindowLong(
Handle, GWL_STYLE);
SetWindowLong(
Handle, GWL_STYLE, (OldStyle
and not WS_POPUP)
or WS_CHILD
or WS_VISIBLE);
Ich hab die zwei Zeilen nicht vergessen, aber ihre Bedeutung nicht mehr im Kopf gehabt. Außerdem habe ich die Reihenfolge falsch gesetzt, so daß die oberen Zeilen nicht funktionierten. Und deshalb hab ich sie irgendwann entfernt.
Das hier funktioniert NICHT:
Delphi-Quellcode:
procedure TPreview.FormCreate(Sender: TObject);
var
OldStyle: Integer;
hWnd: THandle;
Rec: TRect;
begin
hWnd := StrToIntDef(ParamStr(2), 0);
GetWindowRect(hWnd, Rec);
SetBounds(0, 0, Rec.Right - Rec.Left, Rec.Bottom - Rec.Top);
OldStyle := GetWindowLong(
Handle, GWL_STYLE);
SetWindowLong(
Handle, GWL_STYLE, (OldStyle
and not WS_POPUP)
or WS_CHILD
or WS_VISIBLE);
BorderStyle := bsNone;
// <<<<<<<<<< NACH
Windows.SetParent(Self.Handle, hWnd);
end;
Das hier funktioniert korrekt:
Delphi-Quellcode:
procedure TPreview.FormCreate(Sender: TObject);
var
OldStyle: Integer;
hWnd: THandle;
Rec: TRect;
begin
hWnd := StrToIntDef(ParamStr(2), 0);
GetWindowRect(hWnd, Rec);
SetBounds(0, 0, Rec.Right - Rec.Left, Rec.Bottom - Rec.Top);
BorderStyle := bsNone;
// <<<<<<<<<< VOR
OldStyle := GetWindowLong(
Handle, GWL_STYLE);
SetWindowLong(
Handle, GWL_STYLE, (OldStyle
and not WS_POPUP)
or WS_CHILD
or WS_VISIBLE);
Windows.SetParent(Self.Handle, hWnd);
end;
Da mein letzter Bildschirmschoner schon länger her ist und ich das Preview Fenster jedes mal neu schreibe und dieses mal BorderStyle hinter SetWindowLong gesetzt habe und deshalb SetWindowLong keine Wirkung hatte und ich auf der Suche nach dem Fehler nach und nach alles entfernte und ganz einfach vergessen habe, daß beim Style einige Flags gesetzt werden müssen, habe ich letztendlich auch SetWindowLong entfernt.
Ich könnte mich jetzt versuchen rauszureden, ich hab es einfach vergessen. Vielleicht sollte ich mir mal ein Tutorial schrieben. Ich hatte mich mal wirklich ausführlich damit beschäftigt und jetzt passiert mir sowas. Man vergisst genauso schnell wie man es lernt.