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
Cita:
Empezado por FideRosado Ver Mensaje
...
pork no se le puede capturar el scroll que tiene el control scroll box en ese momento...
Hola.

Sencillamente por que el área cliente del TScrollBox se encuentra solapado por los paneles que la ocupan. Es por esa razón que la función FindVCLWindow devuelve un TPanel (aquél sobre el que se halla el cursor).

Sin embargo, si creas mas paneles de los que pueda mostrar el ScrollBox y posicionas el cursor del mouse sobre el ScrollBar vertical (del ScrollBox), verás que la rueda funciona correctamente tal como en este demo que te adjunto.

Saludos
Archivos Adjuntos
Tipo de Archivo: zip FideRosado2.zip (4,1 KB, 21 visitas)
__________________
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
aca esta la solucion, hacer scroll, teniendo lo que sea encima o dentro del scrollbox

aca les dejo el ejemplo de la aplicacion..se que no esta terminada como tiene que ser , pero es un avance en este tema..
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    btnCreatePnl: TButton;
    btnDelPnl: TButton;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    ScrollBox1: TScrollBox;
    procedure btnCreatePnlClick(Sender: TObject);
    procedure btnDelPnlClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    procedure MouseWheel(var Msg: tagMSG; var Handled: Boolean);
    procedure CheckBoxClick(Sender: TObject);
  public

  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

var
  Pnl : TPanel;
  numberpanel: Integer = 1;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage:= MouseWheel;
end;

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
  try
    if (FControl.Parent is TScrollBox) then begin
      if i > 0 then begin
        with TScrollingWinControl(ScrollBox1).VertScrollBar do begin
          if ScrollBox1.VertScrollBar.Range > 0 then begin
            Position:= Position - Increment ;
            Edit1.Text:=IntToStr(Position);
          end;
        end;
      end else begin
        with TScrollingWinControl(ScrollBox1).VertScrollBar do begin
          if ScrollBox1.VertScrollBar.Range > 0 then begin
            Position:= Position + Increment;
            Edit1.Text:=IntToStr(Position);
          end;
        end;
      end;
    end;
  except
      next;
  end;
  end;
end;

procedure TForm1.CheckBoxClick(Sender: TObject);
begin
  if TCheckBox(Sender).Checked then
    TPanel(TCheckBox(Sender).Parent).Color := clRed
  else
    TPanel(TCheckBox(Sender).Parent).Color := clBtnFace
end;



procedure TForm1.btnCreatePnlClick(Sender: TObject);

begin
  Pnl         := TPanel.Create(nil);
  Pnl.Name    := 'PnlUser' + IntToStr(numberpanel);
  Pnl.Caption := '';
  Pnl.Align   := alTop;
  Pnl.Height  := 60;
  Pnl.Parent  := ScrollBox1;
  Pnl.ParentBackground := False;
  
  with TCheckBox.Create(nil) do
  begin
    OnClick := CheckBoxClick;
    Name    := 'CheckMail'+ IntToStr(numberpanel);
    Caption := '';
    left    := 16;
    top     := 21;
    Width   := 17;
    Parent  := Pnl;
  end;
end;

procedure TForm1.btnDelPnlClick(Sender: TObject);
var
  i,j: Integer;
begin
  for i:= ScrollBox1.ControlCount - 1 downto 0 do
    if ScrollBox1.Controls[i] is TPanel then
      for j:= 0 to TPanel(ScrollBox1.Controls[i]).ControlCount-1 do
        if (TPanel(ScrollBox1.Controls[i]).Controls[j] is TCheckBox) and
           (TCheckBox(TPanel(ScrollBox1.Controls[i]).Controls[j]).Checked) then
          ScrollBox1.Controls[i].Free;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin

     with TScrollingWinControl(ScrollBox1).VertScrollBar do begin
          if ScrollBox1.VertScrollBar.Range > 0 then begin
            Position:= Position - Increment ;
            Edit1.Text:=IntToStr(Position);
          end;
     end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    with TScrollingWinControl(ScrollBox1).VertScrollBar do begin
          if ScrollBox1.VertScrollBar.Range > 0 then begin
            Position:= Position + Increment ;
            Edit1.Text:=IntToStr(Position);
          end;
     end;
end;

end.

aca les dejo la url del ejemplo en delphi
Archivos Adjuntos
Tipo de Archivo: rar scroll en scrollbox-FideRosado.rar (173,4 KB, 20 visitas)
Responder Con Cita
  #3  
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
  #4  
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
  #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
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
  #6  
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
  #7  
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
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 23:15:48.


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