Ver Mensaje Individual
  #3  
Antiguo 15-03-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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);
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita