Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-10-2013
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 15
FideRosado Va por buen camino
ecfisa

pero no me sale no se porke ,,
Responder Con Cita
  #2  
Antiguo 20-10-2013
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 15
FideRosado Va por buen camino
Cita:
Empezado por FideRosado Ver Mensaje
pero no me sale no se porke ,,
trata de hacerlo aver si te sale , con el ejemplo ke me mandastes ..

será que cuando creas los tpanel dentro del scrollbox. el mismo pierde el foco porke lo que este dentro es tpnel..como hacer que el siempre tenga el foco
Responder Con Cita
  #3  
Antiguo 20-10-2013
Avatar de FideRosado
FideRosado FideRosado is offline
Miembro
 
Registrado: jun 2010
Ubicación: Pinar del Rio Cuba
Posts: 146
Poder: 15
FideRosado Va por buen camino
Cita:
Empezado por FideRosado Ver Mensaje
trata de hacerlo aver si te sale , con el ejemplo ke me mandastes ..

será que cuando creas los tpanel dentro del scrollbox. el mismo pierde el foco porke lo que este dentro es tpnel..como hacer que el siempre tenga el foco

creo que seria bueno pensar en capturar el control a travez del parent , es decir si las dependencias estab dentro del llamado scrollbox1 pues a ese hay que mandarle siempre el nuevo valor de scroll box..
Responder Con Cita
  #4  
Antiguo 20-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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
trata de hacerlo aver si te sale , con el ejemplo ke me mandastes ..

será que cuando creas los tpanel dentro del scrollbox. el mismo pierde el foco porke lo que este dentro es tpnel..como hacer que el siempre tenga el foco
Hola.

No funciona por que cae en la misma categoría del segunco caso del mensaje #7 (controles con Align). Basta con que cambies esto en la creación de los paneles para que funcione:
Código Delphi [-]
procedure TForm1.btnCreatePnlClick(Sender: TObject);
begin
  Pnl         := TPanel.Create(nil);
  Pnl.Name    := 'PnlUser' + IntToStr(numberpanel);

  //Pnl.Align   := alTop;  (desactivar esta línea)

  Pnl.Top     := numberpanel * 50; // agregar esta
  ...

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: 15
FideRosado Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

No funciona por que cae en la misma categoría del segunco caso del mensaje #7 (controles con Align). Basta con que cambies esto en la creación de los paneles para que funcione:
Código Delphi [-]procedure TForm1.btnCreatePnlClick(Sender: TObject); begin Pnl := TPanel.Create(nil); Pnl.Name := 'PnlUser' + IntToStr(numberpanel); //Pnl.Align := alTop; (desactivar esta línea) Pnl.Top := numberpanel * 50; // agregar esta ...


Saludos


en todo caso puede darme problemas, recuerda que esa es la forma en la que el panel se acomoda dentro del scroll..y ademas , el scroll recibe los paneles bien . pork no se le puede capturar el scroll que tiene el control scroll box en ese momento y cambiarlo por otro..
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: 36
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
  #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: 15
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, 18 visitas)
Responder Con Cita
  #8  
Antiguo 21-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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
Respuesta



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 05:07:27.


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
Copyright 1996-2007 Club Delphi