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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-10-2013
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.

A, pero eso es distinto a lo que había entendido que solicitabas en el título del mensaje (#4) "sobre el scroll con la rueda del raton"... De ese modo no funciona sobre el scrollbar.

De todos modos la modificación que hiciste se puede optimizar bastante:
Código Delphi [-]
procedure TForm1.MouseWheel(var Msg: tagMSG; var Handled: Boolean);
var
  FControl: TWinControl;
  i       : SmallInt;
begin
  FControl := FindVCLWindow(Mouse.CursorPos);
  i := HiWord(Msg.wParam);
  if Assigned(FControl) and (Msg.message = WM_MOUSEWHEEL) then
  begin
    if (FControl.Parent is TScrollBox) then
    begin
      with TScrollingWinControl(ScrollBox1).VertScrollBar do
      begin
        if i > 0 then
          Position:= Position - Increment
        else
          Position:= Position + Increment;
      end;
    end;
    Next;
  end;
end;

Pero es bueno aclarar que tanto el código del mensaje (#14) como este, debido al uso del procedimiento Next pueden presentar un comportamiento poco deseable.

Por ejemplo, si en un mismo form conviven un TListBox y el TScrollBox del que hemos venido hablando pude apreciar dos de ellos:
  1. Si y se focaliza el ListBox y luego se realiza MouseWheel, la acción desencadena el scroll en ambos controles.
  2. Si el ScrollBox no tiene paneles, el scroll se realizará sobre el ListBox, aún estando situados sobre el ScrollBox.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #2  
Antiguo 21-10-2013
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 17
FideRosado Va por buen camino
actualizacion del contenido scrollbox

tienes razon .. en eso me di cuenta ,, aca les pongo un a actualizacion del codigo, diciendole a los componentes que si el padre es scrollbox lo haga .. aun se puede mejorar , ve probandolo aver si llegas a mejorarlo..
pero bueno a mi me funcioina perfectamente..

Código Delphi [-]
procedure TForm1.MouseWheel(var Msg: tagMSG; var Handled: Boolean);
var
  FControl: TWinControl;
   i: SmallInt;
   o: integer;
   Scom: TComponent;
begin
    FControl:= FindVCLWindow(Mouse.CursorPos);
    i:= HiWord(Msg.wParam);
    if Assigned(FControl) and (Msg.message = WM_MOUSEWHEEL) then begin
  try

        if ( FControl.Parent is TScrollBox) then begin
            if i > 0 then begin
                with TScrollingWinControl(FControl.Parent).VertScrollBar do begin
                    if TScrollBox(FControl.Parent).VertScrollBar.Range > 0 then begin
                        Position:= Position - Increment;
                    end;
                end;
            end else begin
                with TScrollingWinControl(FControl.Parent).VertScrollBar do begin
                if TScrollBox(FControl.Parent).VertScrollBar.Range > 0 then begin
                        Position:= Position + Increment;
                    end;
                end;
            end;
    end else begin
      if ( FControl.Parent.Parent is TScrollBox) then begin
            if i > 0 then begin
                with TScrollingWinControl(FControl.Parent.Parent).VertScrollBar do begin
                    if TScrollBox(FControl.Parent.Parent).VertScrollBar.Range > 0 then begin
                        Position:= Position - Increment;
                    end;
                end;
            end else begin
                with TScrollingWinControl(FControl.Parent.Parent).VertScrollBar do begin
                if TScrollBox(FControl.Parent.Parent).VertScrollBar.Range > 0 then begin
                        Position:= Position + Increment;
                    end;
                end;
            end;

    end;
     ///////////////
    end;

  except
      next;
  end;
    end;
   Handled := False;
end;

Última edición por FideRosado fecha: 21-10-2013 a las 19:05:43. Razón: actualizar
Responder Con Cita
  #3  
Antiguo 21-10-2013
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 17
FideRosado Va por buen camino
analiar el contenido. buscando un scrollbox

unke pienso que necesita un codigo que busque si el componente o control tiene un parent scrollbox,,

es decir , va leyendo marcha atras para saber si hay un scroll box ...
y hacer el procedimiento..
yo solo utilice el

parent.parent

porque tengo un maximo de 2 niveles.. pero eso se puede mejorar verdad..
Responder Con Cita
  #4  
Antiguo 21-10-2013
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.

Con el código del mensaje #16, note que:
  1. Estando los paneles creados, si el ListBox tiene un ítem seleccionado, haciendo mouse whell cuando el cursor del mouse está sobre el ScrollBox se provoca el scroll en ambos controles.
  2. Si ningún item del ListBox ha sido seleccionado, nunca efectua el scroll mediante mouse whell, aún estando el cursor del mouse sobre él.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 21-10-2013
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 17
FideRosado Va por buen camino
respuesta

que estas hablando me parece que en el ejemplo no se usan listbox solo scrollbox,, me vas a confundir ...
Responder Con Cita
  #6  
Antiguo 22-10-2013
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 FideRosado.

Cita:
Empezado por FideRosado Ver Mensaje
que estas hablando me parece que en el ejemplo no se usan listbox solo scrollbox,, me vas a confundir ...
Si recordas, este código parte de:
Cita:
Empezado por ecfisa Ver Mensaje
Hola FideRosado.

Revisa este enlace: Ratón arriba, ratón abajo, ratón arriba...
...
Que trata una rutina para el manejo de la rueda del mouse lo suficientemente amplia para ser aplicada a distintos controles. Lo que implica detectar previamente el control donde se halla posicionado el mouse.


Si hubieras especificado que se aplicaría solamente a un ScrollBox de un form, te hubiera dado una respuesta mucho mas simple:
Código Delphi [-]
procedure TForm1.MouseWheel(var Msg: tagMSG; var Handled: Boolean);
var
  i: ShortInt;
begin
  if PtInRect(BoundsRect, Mouse.CursorPos) then
  begin
    i := HiWord(Msg.wParam);
    if Msg.message = WM_MOUSEWHEEL then
      with ScrollBox1.VertScrollBar do
        if i > 0 then
          Position:= Position - Increment
        else
          Position:= Position + Increment;
  end;
  Handled := False;
end;
Ya que en este caso no interesa en que parte del form se encuentre el cursor del mouse, el ScrollBox es el único que debe realizar la acción.

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 22-10-2013 a las 00:47:41. Razón: ortografía
Responder Con Cita
  #7  
Antiguo 22-10-2013
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 17
FideRosado Va por buen camino
respuesta

por eso puse el codigo que de formal tal que estando sobre cualkier scrollbox, trabaje el onmousewell, y si no lo esta no hace nada, hay que especificar que solo puede cer en ese componente pero tabmien sobre cualkier cosa ,, lo que hay es que agregarcelos..
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
Scroll automático en TScrollBox. Lord Delfos Varios 0 28-10-2008 18:08:38
Problema con TScrollBox madmai Varios 2 10-10-2005 22:21:13
Componente Toolbar con scroll apicito OOP 1 25-09-2004 03:08:23
Crear un Componente TScrollbox con botones dentro CORBATIN OOP 15 06-05-2004 22:48:37
componente con scroll automatico Masu Varios 1 28-12-2003 20:30:15


La franja horaria es GMT +2. Ahora son las 15:52:27.


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