Array
(
)

Barra de Rolagem (ScrollBars)

Renatacoimbra
   - 07 jan 2006

Olá pessoal !

Alguém pode me dar uma ajudinha ?

Tenho um Form com um RichEdit, nesse RichEdit eu tenho uma barra de rolagem vertical, eu gostaria de quando clicar na barra de Rolagem ela rolasse bem suave sem dar aqueles saltos.

Igual tem naquelas telinhas de Sobre de alguns sistemas, o texto vai descendo ou subindo bem suave.

Dessa forma fica melhor para lê.


Obrigada.

[]´s


Renatacoimbra
   - 09 jan 2006

Ajuda aí gente !

...


Ipc$
   - 09 jan 2006

Uma forma de fazer isto seria vc sobrescrever a WindowProc do RichEdit e nela, quando a msg for WM_VScroll, vc desliza o texto via código.
Quando a msg não for WM_VScroll, vc executa a WindowProc original; para isto vc tem que salvar a WindowProc antes de colocar a sua.


Renatacoimbra
   - 09 jan 2006

Alguém sabe pelo menos de algum componente q faz isso?

...


Renatacoimbra
   - 09 jan 2006


Citação:

Uma forma de fazer isto seria vc sobrescrever a WindowProc do RichEdit e nela, quando a msg for WM_VScroll, vc desliza o texto via código.
Quando a msg não for WM_VScroll, vc executa a WindowProc original; para isto vc tem que salvar a WindowProc antes de colocar a sua.


IPC$, obrigada pela resposta, mais não sei como fazer isso, se não for pedir muito vc poderia me ajudar nessa implementação?

[]´s


Ipc$
   - 09 jan 2006

Posso ajudar em definir a WindowProc:#Código

var WP_Sv :TWndMethod; // para salvar
procedure Scrool_Navega(var Msg:TMessage); // pega o evento
procedure TForm1.Scrool_Navega(var Msg:TMessage);
begin
if MSg.Msg = WM_VScroll then
begin
Case Msg.WParam of
SB_LINEDOWN : ; // clicou no botão descida
SB_LINEUP : ; // clicou no botão subida
SB_PAGEDOWN : ; // clicou na barra descendo
SB_PAGEUP : ; // clicou na barra subindo
end;
end
else
WP_Sv(Msg); // executa a original
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
WP_Sv := RichEdit1.WindowProc; // salva
RichEdit1.WindowProc := Scrool_Navega; // atribui a nova
end;


Com isto o click na barra de rolagem vertical fica sem ação; aí vc tem que colocar o deslize de texto via código.


Renatacoimbra
   - 09 jan 2006

Obrigada IPC$

Se alguém tem alguma idéia de como deslizar o texto via código me ajuda aí por favor..

[]´s


Marco Salles
   - 09 jan 2006


Citação:
Se alguém tem alguma idéia de como deslizar o texto via código me ajuda aí por favor..


tente isso :


Citação:
private
WP_Sv :TWndMethod; // para salvar
procedure Scrool_Navega(var Msg:TMessage); // pega o evento
procedure WmUser (var Msg :Tmessage);message wm_user;



Citação:
implementation

{$R *.DFM}

{ TForm1 }

var
descer:Boolean;



Citação:
procedure TForm1.FormCreate(Sender: TObject);
begin
WP_Sv:= RichEdit1.WindowProc; // salva
RichEdit1.WindowProc := Scrool_Navega; // atribui a nova
end;



Citação:
procedure TForm1.Scrool_Navega(var Msg: TMessage);
var
sender:TObject;
begin
if MSg.Msg = WM_VScroll then
begin
Case Msg.WParam of
SB_LINEDOWN :descer:=True;
SB_LINEUP:descer:=false;
SB_PAGEDOWN :descer:=True;
SB_PAGEUP:descer:=false;
end;
postmessage(handle,wm_user,0,0) ;
end
else
begin
WP_Sv(Msg); // executa a original
end;
end;



Citação:
procedure TForm1.WmUser(var Msg: Tmessage);
begin
if descer then
keybd_event(VK_DOWN,0,0,0)
else
keybd_event(VK_up,0,0,0);
end;