Barra de Rolagem (ScrollBars)

07/01/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

Respostas

09/01/2006

Renatacoimbra

Ajuda aí gente !

...


Responder Citar

09/01/2006

Ipc$

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.


Responder Citar

09/01/2006

Renatacoimbra

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

...


Responder Citar

09/01/2006

Renatacoimbra

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


Responder Citar

09/01/2006

Ipc$

Posso ajudar em definir a WindowProc:
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.


Responder Citar

09/01/2006

Renatacoimbra

Obrigada IPC$

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

[]´s


Responder Citar

09/01/2006

Marco Salles

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


[b:bc5f7a022d]tente isso :[/b:bc5f7a022d]

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


implementation {$R *.DFM} { TForm1 } var descer:Boolean;


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


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;


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;



Responder Citar