Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Entiendo lo que quieres hacer, pero no comparto el método...

Si el usuario tiene la ventana del TPV por detras y quiere mover una de las ventanas al frente, puede cometer el fallo de activar tal o cual botón del TPV, por ello, no veo una alternativa lo que estas planteando.

Si la ventana TPV no es muy grande, podrías acoplarla a la ventana MDI, o incluso dividir esa ventana de TPV en varios paneles con la funcionalidad Dock, es decir, que el usuario arrastre el panel que quiera y lo adose a los bordes del MDI.

Si no te sirve... pues a cambiar de diseño, nos olvidamos de ventanas MDI y simulamos el IDE de delphi 6/7, donde el menú es una ventana y se pueden abrir otras ventanas por todos los sitios. En este caso, puedes hacer un control al abrir las ventanas de forma que cada una se sitúe donde te apetezca, según el tipo de ventana. Controlando las propiedades "Constraint" de cada ventana podrás conseguir lo que quieres.

Incluso... podrías crear una ventana sin nada dentro y sin bordes, para que simule el fondo de una ventana MDI, usando los mensajes WM_WINDOWSPOSCHANGING de la ventana del menú puedes modificar el tamaño de esta nueva ventana.

A ver si entre todos te podemos dar más ideas, dicen que cuatro ojos ven más que dos

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #2  
Antiguo 10-08-2006
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 23
Enan0 Va por buen camino
Estube jugando con ese codigo y con otros nuevos para descartar alguna propiedad modificada. y si cuando mustro el form con la propiedad PArent:=form1; tengo el mismo resultado qu evos
pero lo que podes hacer es mostrarlo como modal.

es decir

Código Delphi [-]
with tform2.create(self) do
     showmodal;
y sino como dijo lepe TRabajar con Forms MDI
Responder Con Cita
  #3  
Antiguo 10-08-2006
Avatar de Io
[Io] Io is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: San Fernando (Cádiz)
Posts: 259
Poder: 21
Io Va por buen camino
parent

La verdad que se agradece la ayuda que se recibe.

Ante de descartar MDI. he tenido muchos contratiempos. Creo que en la fase en la que me encuentro todavía estoy a tiempo de volver. Os enumero los problemas.
  • Problemas al crear una imagen de fondo en el formulario principal.
  • Si tengo una ventana máximizada, y creo otra que no la está, la primera deja de estar máximizada.
  • Pulsando ctrl+tab, se van activando sucesivamente las entanas creadas. Si hubiera una que no me interesa que se active ¿Cómo lo hago?
En fin he pasado muchas horas intentando solucionar estas pegas, pero me rindo.Tambien debo decir que he empezado ahora a mirar las aplicaciones MDI, y seguramente me faltará :Tablas,conocimientos,tiempo,dinero,etc

Sobre hacer la ventana modal, no creo que sea una solución, pues me obliga a tener que cerrarla para abrir cualquier otra ventana de gestión.

Cita:
Si no te sirve... pues a cambiar de diseño, nos olvidamos de ventanas MDI y simulamos el IDE de delphi 6/7, donde el menú es una ventana y se pueden abrir otras ventanas por todos los sitios. En este caso, puedes hacer un control al abrir las ventanas de forma que cada una se sitúe donde te apetezca, según el tipo de ventana. Controlando las propiedades "Constraint" de cada ventana podrás conseguir lo que quieres.

Incluso... podrías crear una ventana sin nada dentro y sin bordes, para que simule el fondo de una ventana MDI, usando los mensajes WM_WINDOWSPOSCHANGING de la ventana del menú puedes modificar el tamaño de esta nueva ventana.
Puede ser una solución, que empezaré a mirar cuando descanse un poco porque ya la vista no da para más

Gracias Compissss

P.D.
Si me solucionáis las pegas hasta me planteo volver con los MDIs
Responder Con Cita
  #4  
Antiguo 10-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
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 [-]

// codigo original de Form.pas a partir de la linea 4417

        if FormStyle = fsMDIChild then
        begin
          { Fake a size message to get MDI to behave }
          if FWindowState = wsMaximized then
          begin
// quizás eliminando estas 2 lineas consigas lo que quieres, pero a saber
// que otro error pueda dar jejeje
            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 [-]

// código copiado de la unidad Forms.pas a partir de la línea 4317

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
//  cooooompadreeeeeee aqui estaaaaaaaamosssss
            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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 10-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Borland programmer
// quizás eliminando estas 2 lineas consigas lo que quieres, pero a saber
// que otro error pueda dar jejeje
Que comentarios tan curiosos hacen en Borland

pd: En una aplicación mdi, los formularios hijos, o todos están maximizados o ninguno lo está. No lo juro pero creo que éste es el comportamiento "normal" de Windows y va más allá de la VCL.

// Saludos
Responder Con Cita
  #6  
Antiguo 10-08-2006
Avatar de Io
[Io] Io is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: San Fernando (Cádiz)
Posts: 259
Poder: 21
Io Va por buen camino
parent

Definitivamente, para este proyecto dejo el MDI.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
QReport has no parent window david duarte Impresión 1 19-01-2006 15:06:07
TreeView parent Caro OOP 4 09-11-2005 17:37:45
error : has no parent windows jorodgar Varios 5 23-05-2005 21:49:48
TTabSheet - TForm - Parent neon OOP 0 11-01-2005 16:34:03
Opciones de Parent pepelu1975 OOP 7 26-05-2004 18:35:36


La franja horaria es GMT +2. Ahora son las 01:26:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi