Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 13-10-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 tiammat.

Hay problemas con los eventos OnMouseWheel del TScrollBox, y lamentablemente el conocido código: (1)
Código Delphi [-]
procedure TForm1.MouseWheel(var Msg: tagMSG; var Handled: Boolean);
var
  i: SmallInt;
begin
  if Msg.message = WM_MOUSEWHEEL then
  begin
    Msg.message := WM_KEYDOWN;
    Msg.lParam := 0;
    i := HiWord(Msg.wParam);
    if i > 0 then
      Msg.wParam := VK_UP
    else
      Msg.wParam := VK_DOWN;
    Handled := false;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage:= MouseWheel;
end;
Que funciona para otros componentes, no lo hace con TScrollBox...

Una solución también conocida es:
Código Delphi [-]
procedure TForm1.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  ScrollBox1.Perform(WM_VSCROLL,0,0);
end;

procedure TForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  ScrollBox1.Perform(WM_VSCROLL,1,0);
end;

Una idea que se me ocurrió para usar el código (1) de forma que contemple a TScrollBox es:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    ScrollBox1: TScrollBox;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
  private
    FControl: TWinControl;
    procedure AppEventsIdle(Sender: TObject; var Done: Boolean);
    procedure MouseWheel(var Msg: tagMSG; var Handled: Boolean);
  public
  end;
....
implementation

procedure TForm1.AppEventsIdle(Sender: TObject; var Done: Boolean);
var
  ctrl : TWinControl;
begin
  ctrl := FindVCLWindow(Mouse.CursorPos);
  if ctrl <> nil then
    FControl:= ctrl;
end;

procedure TForm1.MouseWheel(var Msg: tagMSG; var Handled: Boolean);
var
 i: SmallInt;
begin
  if Msg.message = WM_MOUSEWHEEL then
  begin
    Msg.message := WM_KEYDOWN;
    Msg.lParam := 0;
    i := HiWord(Msg.wParam);
    if GetWindowLong(FControl.Handle, GWL_STYLE) and WS_VSCROLL <> 0 then
    begin
      if FControl is TScrollBox then
      begin
        with TScrollBox(FControl).VertScrollBar do
          if i > 0 then
            Position := Position - Increment
          else
            Position := Position + Increment;
      end
      else
      begin
        if i > 0 then
          Msg.wParam := VK_UP
        else
          Msg.wParam := VK_DOWN;
      end;
    end;
  end;
  Handled := False;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle:= AppEventsIdle;
  Application.OnMessage:= MouseWheel;
end;
...
Aparentemente funciona bién, pero no la he probado lo suficiente como para asegurar que lo hace en todos los casos.

Estoy pensando si no me estoy complicando y exista una solución más sencilla...

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 13-10-2011 a las 02:00:50. Razón: Corregir identación del código
Responder Con Cita
 



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
Moverme arriba y abajo en un ComboBox noob Varios 2 15-10-2008 13:12:23
Problemas al Cachar cuando se presion Shift+Flecha Arriba/Abajo AGAG4 Varios 3 10-08-2006 19:20:10
arriba o abajo del Interface elcigarra Varios 1 18-01-2006 17:27:32
Cursor Arriba/Abajo en un RadioButton gluglu Varios 0 12-11-2005 16:17:41
Como Capturar Las Flechas Arriba/abajo Presionadas MITOPE Varios 3 17-05-2004 20:51:55


La franja horaria es GMT +2. Ahora son las 11:50:57.


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