Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-04-2014
Bluefox Bluefox is offline
Miembro
 
Registrado: feb 2007
Posts: 27
Poder: 0
Bluefox Va por buen camino
ScrollBar en MDI

Buenas.
Me toco una aplicacion MDI con distintos "escritorios".
La forma de cambiar de escritorio es una pestaña, que muestra las ventanas del escritorio nuevo y oculta las del escritorio anterior.
El problemas es que el formulario principal, es mdi y si hay scrool, necesito guardar las posiciones del scroll, para que cuando se cambie de escritorio, forzar la posicion del scroll al antiguo.
teneis alguna idea??
Gracias.
Responder Con Cita
  #2  
Antiguo 28-04-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Bluefox.

Disculpame pero sinceramente no alcanzo a visualizar la situación, ¿ Podrías explicar el caso con mas detalle ?


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 29-04-2014
Bluefox Bluefox is offline
Miembro
 
Registrado: feb 2007
Posts: 27
Poder: 0
Bluefox Va por buen camino
Gracias por responder.
Imagina, un formulario MDI en el que hay 2 ventanas.
Una la tengo arriba del todo y la otra abajo. Si muevo las ventanas me sale el scroll del MDI. hasta aqui todo ok?
Pues imaginate, que pulso 1 boton y se me oculta 1 de ellas... y vuelvo a pulsarlo y se me muestra la oculta y oculta la visible..
Vale.
Las ventanas estan en la posicion x (la de arriba) e Y (la de abajo) con respecto al TOP.
Al ocultar la de arriba y la de abajo moverla hacia abajo, me sale el scroll (ya que la ventana sale del MDI). Bien, si hago Scroll, se me quitan las barras y vuelvo a ver la ventana. Al pulsar el boton de nuevo y mostrar la ventana de arriba, me sale cortada y con scroll.
Lo que me gustaria es que cada vez que pulse el boton, guardar el posicionamiento del scroll para poder moverlo y no desplazar la ventanas.


No se si me explique bien es un poco lioso y un comportamiento raro el que tiene.
Responder Con Cita
  #4  
Antiguo 30-04-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Bluefox Ver Mensaje
...
No se si me explique bien es un poco lioso y un comportamiento raro el que tiene.
Hola Bluefox.

Te has explicado claramente. En lo particular prefiero que no se muestren ScrollBars en el MDIForm, esto lo logras del siguiente modo:
Código Delphi [-]
...
implementation

function ClientWndProc(wnd: HWND; Msg: Cardinal; wParam, lParam: Integer): Integer; stdcall;
begin
  if Msg = WM_NCCALCSIZE then
    if (GetWindowLong(wnd, GWL_STYLE)and(WS_HSCROLL or WS_VSCROLL)) <> 0 then
      SetWindowLong(wnd, GWL_STYLE,
      GetWindowLong(wnd, GWL_STYLE) and not (WS_HSCROLL or WS_VSCROLL));
  Result:= CallWindowProc(Pointer(GetWindowLong(wnd, GWL_USERDATA)), wnd, Msg, wParam, lParam);
end;

procedure TMDIForm.FormCreate(Sender: TObject);
begin
  if (ClientHandle <> 0)and(GetWindowLong(ClientHandle, GWL_USERDATA) = 0) then
    SetWindowLong(ClientHandle, GWL_USERDATA,
      SetWindowLong(ClientHandle, GWL_WNDPROC, Integer(@ClientWndProc)));
end;
...
Obviamente, de este modo no se provoca el efecto que mencionas y siempre dispones de los métodos Cascade y Tile para organizar los MDIChilds:
Código Delphi [-]
procedure TMDIForm.Cascade1Click(Sender: TObject);
begin
  Cascade;
end;

procedure TMDIForm.TileHor1Click(Sender: TObject);
begin
  TileMode:= tbHorizontal;
  Tile;
end;

procedure TMDIForm.TileVer1Click(Sender: TObject);
begin
  TileMode:= tbVertical;
  Tile;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 30-04-2014 a las 07:50:53. Razón: tabulación
Responder Con Cita
  #5  
Antiguo 30-04-2014
Bluefox Bluefox is offline
Miembro
 
Registrado: feb 2007
Posts: 27
Poder: 0
Bluefox Va por buen camino
Gracias por los comentarios. El scroll se necesita, no se puede quitar .
Lo de cascade y tile tambien esta implementado.
El problema es si el usuario mueve las ventanas, tienen que aparecerle donde las deja :/
Bueno no te preocupes, voy a buscar otra solucion, usar un contenedor o algo similar.
gracias
Responder Con Cita
  #6  
Antiguo 01-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Bluefox.

En el caso de MDI en el MDIForm se crea un área cliente donde son gestionados los MDIChilds y es a este a quíen son enviados los mensajes de las barras de desplazamiento.

Lamentablemente los diseñadores de Delphi 7 (que es la versión con la que trabajo) no declararon el método ClientWndProc como virtual, pero aparentemente con versiones posteriores es posible sobreescribirlo: ClientWndProc (Delphi).

De modo que si posees una versión posterior, creo que podrías capturar el mensaje WM_VSCROLL dentro del método, recorrer los MDIChilds comprobando si estan minimizados y de ser así, reposicionarlos.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
ScrollBar En Formulario mellomda Varios 6 13-12-2011 11:21:30
Nuevo ScrollBar Deiv Gráficos 1 21-07-2005 18:19:47
Scrollbar de un stringgrid Albano OOP 4 09-04-2005 22:41:32
Scrollbar jrgarlok C++ Builder 1 15-03-2005 16:36:11
ScrollBar Mario1980 Varios 1 19-12-2004 23:00:03


La franja horaria es GMT +2. Ahora son las 11:35:10.


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