Also an dieser Stelle kann ich doch spontan weiterhelfen, bin nämlich gerade an derselben Stelle, bzw. ein Schritt weiter, weil ich zwar das Preview angezeigt, aber nicht wieder automatisch WEG bekomme...
Hier erst mal, wie ich im
DPR auf die Parameter reagiere (Nix wildes soweit):
Delphi-Quellcode:
begin
if ParamCount > 0 then begin
showmessage(paramstr(1));
if (ParamStr(1) = '/s') or (ParamStr(1) = '/S') then begin
Application.Initialize;
Application.Title := 'Spectrum Clock';
Application.CreateForm(Tfrm_ScrSave, frm_ScrSave);
Application.Run;
end else if (copy(ParamStr(1),1,2) = '/c') or (copy(ParamStr(1),1,2) = '/C') then begin
Application.Initialize;
Application.Title := 'Spectrum Clock';
Application.CreateForm(Tfrm_Config, frm_Config);
Application.Run;
end else if (copy(ParamStr(1),1,2) = '/p') or (copy(ParamStr(1),1,2) = '/P') then begin
Application.Initialize;
Application.Title := 'Spectrum Clock';
Application.CreateForm(Tfrm_preview, frm_preview);
Application.Run;
end;
end;
end.
Wie gesagt, alles recht einfach! Im OnCreate-Ereignis vom Preview-Fenster kommt nun folgendes:
Delphi-Quellcode:
procedure Tfrm_preview.FormCreate(Sender: TObject);
var dispHWND: HWND;
lngStyle: LongInt;
DispRec: TRECT;
begin
dispHWND := strtoint(paramstr(2));
windows.GetClientRect(dispHWND, DispRec);
lngStyle := GetWindowLong(frm_Preview.handle, GWL_STYLE);
lngStyle := lngStyle or WS_CHILD;
SetWindowLong(frm_Preview.handle, GWL_STYLE, lngStyle);
windows.SetParent(frm_Preview.handle, dispHWND);
SetWindowLong(frm_Preview.handle, GWL_HWNDPARENT, dispHWND);
windows.SetWindowPos(frm_Preview.handle, HWND_TOP, 0, 0, DispRec.Right, DispRec.Bottom,
SWP_NOZORDER Or SWP_NOACTIVATE Or SWP_SHOWWINDOW);
end;
Der Rest bleibt dir und deinem Bildschirmschoner überlassen. Wenn mir jetzt jemand im Gegenzug helfen könnte, wie man automatisch das Fenster wieder schliessen kann, wenn der Nutzer zum Bleistift, einen anderen Schoner auswählt, wäre ich auch um ein Vielfaches glücklicher!