Hola yevabas.
No puedo reproducir tu ejemplo por no utilizar muchos de los componentes que figuran en tu código y realmente cuando leí tu mensaje, se me presentaron muchos de los interrogantes que te planteó
nlsgarcia en el mensaje anterior.
Pero, a grandes rasgos creo haber entendido que deseas ejecutar el form TClock en el nuevo escritorio y el problema consiste en que luego no podes cerrar el form (Form1) que llamó a TClock.
Si es así, creo que podrías hacer:
Código Delphi
[-]
...
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure Validar;
private
FODesk, FNDesk, FOThrd : HDESK;
public
end;
...
implementation
uses Unit2;
procedure TForm1.FormCreate(Sender: TObject);
begin
FODesk := OpenInputDesktop(0,
FALSE,
DESKTOP_SWITCHDESKTOP);
FOThrd := GetThreadDesktop(GetCurrentThreadId());
FNDesk := CreateDesktop('NewDesktop',
nil,
nil,
0,
DESKTOP_CREATEWINDOW,
nil);
if FNDesk = 0 then raise Exception.Create('Error creando nuevo escritorio');
SwitchDesktop(FNDesk);
Validar;
CloseDesktop(FNDesk);
SwitchDesktop(FODesk);
SetThreadDesktop(FOThrd);
...
end;
procedure TForm1.Validar;
begin
...
with TClock.Create(Self) do
try
...
ShowModal
finally
Free;
end;
...
end;
...
Saludos.
