Ah, WindowClass.Style ist das was du setzt. Ich hatte schon Style und ExStyle ausprobiert und gesehen, dass das die falschen Adressen waren. Ich hatte dann aber keine Lust nachzuschauen was an der Adresse steht.
Mit deinem Quelltext konnte ich das Problem eben reproduzieren. Dein Programm funktioniert nicht, auch nicht unter Vista, was daran liegt, dass du die geerbte Version auch nur noch unter XP aufrufst. Das muss aber immer passieren. Richtig sieht es dann so aus, das geht unter 95, 98 und 2000 wie auch unter Vista und der Effekt unter XP ist da (unter 95 liegt das vermutlich aber an was anderem, dass dein Programm nicht ging):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.CreateParams(var Params: TCreateParams);
function IsXP: Boolean; var OS: TOSVERSIONINFO; begin OS.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFO); Result := GetVersionEx(OS) and (OS.dwPlatformId = VER_PLATFORM_WIN32_NT) and (OS.dwMajorVersion = 5) and (OS.dwMinorVersion = 1); end;
const CS_DROPSHADOW = $00020000; begin inherited CreateParams(Params); if IsXP then Params.WindowClass.Style := Params.WindowClass.Style or CS_DROPSHADOW; end; |
Vielleicht sollte ich an der Stelle einmal erklären was da eigentlich passiert, denn das scheint dir (deinem Quelltext nach zu urteilen) nicht klar zu sein.
Deine Formularklasse wird von TForm abgeleitet. Dort (bzw. genauer in TCustomForm) ist CreateParams bereits definiert. Du überschreibst jetzt diese Methode mit override. Das Resultat ist, dass statt der Original-CrateParams-Methode deine aufgerufen wird. Wenn du jetzt aber nicht auch das Original mittels inherited aufrufst, dann wird der entsprechende Code nie ausgeführt. Der ist aber notwendig.
