Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-07-2006
Avatar de Io
[Io] Io is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: San Fernando (Cádiz)
Posts: 259
Poder: 19
Io Va por buen camino
Scroll Bars

Saludos a todos los amigos del foro.

Mi problema es el siguiente:

Con D6 en una aplicación MDI, ¿Cómo puedo evitar que salgan los scrollbars en el mdiForm, cuando alguna de las mdiChilds sale fuera de los límites del mdiForm?.

En el evento OnCreate de la mdiForm tengo preseteadas las siguientes propiedades:

VertScrollBar.visible:=False;
HorzScrollBar.visible:=False;
AutoScroll:=False;

Saludos desde Cádiz
Responder Con Cita
  #2  
Antiguo 16-07-2006
Avatar de Io
[Io] Io is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: San Fernando (Cádiz)
Posts: 259
Poder: 19
Io Va por buen camino
Talking

Navegando por la red he encontrado la solución.
La he probado y funciona. Aquí os dejo la solución por si a alguien le interesa.
Sobre la siguiente explicación hay un detalle en el que no la he seguido al pie
de la letra, en la parte donde se debia de poner en el evento OnCreate, yo
lo he puesto en el OnActivate (ClientHandle en Oncreate no se inicializa)


***************************************************


> Is there a way to turn off the scrollbars in an MDIForm?.



Yes, but you should not use it. But if you are determined: here is an
older post on the subject.


> How can I hide scrollbars on a MDI Form ?
> I tried to set the properties AutoScroll, HorzScrollBar.Visible,
> VertScrollBar.visible to false but it had no effect.


this has no effect since the scrollbars do not belong to the MDI frame
window itself, they belong to the client window, which is not a Delphi
form. Which means one has to attack the problem on the API level.
Since this question has come up so frequently in recent days i have
modified a sample based on the stock MDI project to include this
feature. The salient parts are quoted below.

Open the main forms unit in the IDE.
If you don't have a handler for the OnCreate event, add one. In the
handler you do this:


If ClientHandle <> 0 Then Begin
If GetWindowLong( ClientHandle, GWL_USERDATA ) <> 0 Then
Exit; // cannot subclass client window, userdata already in use
SetWindowLong( ClientHandle, GWL_USERDATA,
SetWindowLong( ClientHandle, GWL_WNDPROC,
integer( @ClientWindowProc)));
End;


Add a new standalone function to the unit, it has to go above the
FormCreate method since it is referenced in the statement above.


Function ClientWindowProc( wnd: HWND; msg: Cardinal; wparam,
lparam: Integer ): Integer; stdcall;
Var
f: Pointer;
Begin
f:= Pointer( GetWindowLong( wnd, GWL_USERDATA ));
Case msg of
WM_NCCALCSIZE: Begin
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));
End;
End;
Result := CallWindowProc( f, wnd, msg, wparam, lparam );
End;


I clipped this code from a larger project, so lets hope i did not
create errors in the process. What this code does is to subclass the
client window the API way. It stores the old window function into the
GWL_USERDATA field of the window structure since it is needed in the
replacement window function, all messages need to be passed on to the
old window function. There is only one message of interest in this case
(the use of a Case results from the larger project, which handles more
than this message): WM_NCCALCSIZE. The window gets this message when
Windows tries to hide or show the scrollbars, among other cases. And it
arrives *before* there is any painting of the scrollbar. So we can
check if the window is going to sprout scrollbars and simply remove the
scrollbar styles again.


For the purists: there is no need to undo the subclassing before the
form is destroyed since the client window is destroyed before the form
object.

**************************************************


Saludos desde cai
Responder Con Cita
Respuesta



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
Las horrorosas scroll bars elcigarra OOP 5 16-08-2005 20:42:05
ListBox - Scroll Kreyser Varios 2 08-06-2005 13:27:24
Scroll en un listbox kakesoft OOP 0 06-04-2005 02:40:25
Scroll en un reporte buitrago_listas Impresión 0 19-01-2005 15:39:24
DBGRID y SCROLL vtdeleon OOP 2 22-12-2004 14:34:59


La franja horaria es GMT +2. Ahora son las 00:49:59.


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