Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Quitar Scrollbars de un TControlList (https://www.clubdelphi.com/foros/showthread.php?t=96158)

javiersp 15-03-2023 16:33:17

Quitar Scrollbars de un TControlList
 
Hola,
Estoy usando el nuevo componente TControlList, me muevo por la lista usando gestos y me sobran las barras de desplazamiento, además de que no quedan estéticas en la app. Desde el componente no hay la opción de eliminarlas, he intentado con mensajes de windows pero tampoco desaparece.
A ver si alguien ya lo ha conseguido antes.

Saludos y gracias

Casimiro Notevi 15-03-2023 17:19:55

Con esto, lo que no sé es en qué evento es más conveniente ponerlo:
Código Delphi [-]
  ShowScrollBar( (sender as TControlList).Handle, SB_VERT, false );

Neftali [Germán.Estévez] 15-03-2023 18:03:19

Se me ocurren varias forma de hacerlo o al menos de probar a ver si funciona.

1) La primera es derivar el componente y reescribir alguno de los procedimientos de TCustomControlList, que es de quien deriva TControlList.
Probaría con el método Paint o alguno similar.

Código Delphi [-]
    procedure Paint; override;

También puedes interceptar alguno de los mensajes de pintado, pero creo que es lo mismo y quedará más claro con los procedimientos.

Código Delphi [-]
   ...
    procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
    procedure WMHScroll(var Message: TWMHScroll); message WM_HSCROLL;
    procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL;
   ...

2) La segunda opción es interceptar los métodos del componente, por ejemplo, esta prueba rápida parece que funciona.

Código Delphi [-]
...
type
  TControlList = class(VCL.ControlList.TControlList)
  protected
    procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED;
  end;

...


procedure TControlList.WMWindowPosChanged(var Message: TWMWindowPosChanged);
begin
  ShowScrollBar(Handle, SB_VERT, False);
end;

Con esto he comprobado que el scroll vertical no aparece, aunque tal vez esté interceptando "demasiados" mensajes.

3) Es posible que se pueda hacer capturando mensajes utilizando un componente TApplicationEvents en el formulario. filtrando para que los mensajes sean sólo del control que te interesa y sólo los mensajes que te interesan. Algo así:

Código Delphi [-]
procedure TForm3.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
  if Msg.hwnd <> ControlList1.Handle then   // sólo del ControList
    Exit;
  if (Msg.message = WM_HSCROLL) or (Msg.message = WM_VSCROLL) then   // sólo mensajes de las barras de desplazamiento
  ...

4) Por último, implementando los eventos del control/form, puedes probar directamente a ocultarlas, usando esto:

Código Delphi [-]
    ShowScrollBar(ControlList1.Handle, SB_HORZ, False);
    ShowScrollBar(ControlList1.Handle, SB_VERT, False);


La franja horaria es GMT +2. Ahora son las 22:04:18.

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