Barra de Rolagem (ScrollBars)

07/01/2006

0

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

Renatacoimbra

Responder

Posts

09/01/2006

Renatacoimbra

Ajuda aí gente !

...


Responder

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

09/01/2006

Renatacoimbra

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

...


Responder

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

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

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

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar