Wer hat hier bereits einen Bildschirmschoner programmiert?
Ich zumindest habe Probleme bei der Zuweisung von Preview. Unter Preview verstehe ich die Ausführung des Bildschirmschoners innerhalb des Dialogfensters unter "Eigenschaften von Anzeige"/"Bildschirmschoner". Öffnet man dieses Dialogfenster und geht auf Bildschirmschoner, so startet dieser automatisch den aktuellen Bildschirmschoner mit dem Parameter /P und als zweitem Parameter dem Handle des Prevew-Fensters. Der Programmierer des Bildschimschoners muß sein Programm dann innerhalb des kleinen Fensters als Child Fenster ausführen. Da mein Bildschirmschoner mindestens 400 x 400 Pixel benötigt, kann ich ihn nicht in dem kleinem Fenster ausführen. Deshalb hab ich ein zweites Fenster in dem eine Grafik zeigt was der Bildschirmschoner macht.
Das Problem ist aber, daß das Previewfernster im "Eigenschaften von Anzeige"/"Bildschirmschoner" Dialogfenster schwarz bleibt. Die Frage ist also wo der Fehler liegt. Wenn einer einen Fehler im Programm vermutet, dann hier der Quellcode.
Zuerst die Projektdatei:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| ...
var Param1: String; Param1Chr: Char;
...
begin if ParamCount > 0 then begin Param1 := UpperCase(ParamStr(1)); Param1Chr := #32; if Length(ParamStr(1)) > 1 then Param1Chr := Param1[2];
case Param1Chr of 'P', 'L': begin Application.Initialize; Application.CreateForm(TPreview, Preview); Application.Run; end; ... end. |
Jetzt die Previewunit:
Die einzig wichtige Prozedur hier ist die Create Prozedur. Deshalb hab ich den Rest weggelassen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TPreview.FormCreate(Sender: TObject); var OldStyle: Integer; begin OldStyle := GetWindowLong(Handle, GWL_STYLE); SetWindowLong(Handle, GWL_STYLE, (OldStyle AND NOT WS_POPUP) OR WS_CHILD OR WS_VISIBLE);
if Length(ParamStr(1)) > 1 then if UpperCase(Paramstr(1))[2] = 'P' then Windows.SetParent(Handle, StrToInt(ParamStr(2)));
Top := 0; Left := 0; end; |
//EDIT
Ich hab den Fehler. Es lag nicht am Quellcode, sondern an der Eigenschaft Position des Formulars. Ich hatte dort poScreenCenter eingestellt. Anscheinend klappt mit poScreenCenter nicht, da die mitte des Previewfensers nicht die mitte des Bildschirms ist. Mit poDesigned klappt es dann.