Bueno, si es requisito imprescindible que la ventana del TPV se quede por detrás de las demás ventanas,
no recomendaría trabajar con MDI.
Los problemas que te has encontrado son inherentes a los MDI, para solucionarlos hay que zambullirse en la VCL, derivar de TCustomForm haciendo tu propio MDI y modificando el comportamiento.
Para la
imagen de fondo hay por ahí un código, pero la verdad, despues de usarlo y ver lo incomodo que era activar la imagen de fondo y desactivarla, dejé de usarla.
Para lo de
maximizar.... bastante curioso, de hecho mirad el comentario que los hombres de borland añadieron al respecto:
(consideresé que Borland no añade casi comentarios a los fuentes, si en este caso lo hacen... por algo será
)
Código Delphi
[-]
if FormStyle = fsMDIChild then
begin
if FWindowState = wsMaximized then
begin
SendMessage(Application.MainForm.ClientHandle, WM_MDIRESTORE, Handle, 0);
ShowWindow(Handle, SW_SHOWMAXIMIZED);
end
else
begin
ShowWindow(Handle, ShowCommands[FWindowState]);
CallWindowProc(@DefMDIChildProc, Handle, WM_SIZE, SIZE_RESTORED,
Width or (Height shl 16));
BringToFront;
end;
SendMessage(Application.MainForm.ClientHandle,
WM_MDIREFRESHMENU, 0, 0);
end
else
ShowWindow(Handle, ShowCommands[FWindowState]);
Para
CTRL + TAB (me picó la curiosidad
):
Código Delphi
[-]
procedure TCustomForm.CMDialogKey(var Message: TCMDialogKey);
begin
if GetKeyState(VK_MENU) >= 0 then
with Message do
case CharCode of
VK_TAB:
if GetKeyState(VK_CONTROL) >= 0 then
begin
SelectNext(FActiveControl, GetKeyState(VK_SHIFT) >= 0, True);
Result := 1;
Exit;
end;
VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN:
begin
if FActiveControl <> nil then
begin
TForm(FActiveControl.Parent).SelectNext(FActiveControl,
(CharCode = VK_RIGHT) or (CharCode = VK_DOWN), False);
Result := 1;
end;
Exit;
end;
end;
inherited;
end;
Puesto que tendríamos que sobreescribir (override) este método, lo más oportuno me parece crear una lista de Objetos con varias propiedades, de tal forma que el usuario de la forma MDI añade en esa lista las ventanas que no se desea el foco. Justo en el código de color rojo, tendríamos que comparar si la forma hija es una de las que hay en la "lista negra" y si está, pasar a otra ventana hija.
Por supuesto el derivar de esta clase y modificar su comportamiento, puede traer efectos colaterales no deseados, y solo haciendo el cambio podrás averiguar si tienes esos efectos o no.
Saludos