Barra de rolagem sicronizado em dois memos

Delphi

15/06/2006

Tenho dois memos e preciso fazer um rotina onde quando rolar a barra do primeiro memo role a do segundo memo tambem, de preferencia que não apareça a barra no segundo memo. Se alguem souber de um componente tipo spliter para ser usado agradeceria.
Muito Obrigado a Todos
Claudio D´Pinho


Dpinho

Dpinho

Curtidas 0

Respostas

Micheus

Micheus

15/06/2006

E se vc transferir os eventos relevantes da barra de scroll do Memo1 para o Memo2. Interceptando as mensagem (eventos) enviadas para o procedimento de janela do Memo1 e transferindo-os ao Memo2.
Veja se com esse fragmento vc tem um ponto de partida para chegar até o que vc quer:
...
  Form1 = class(TForm)
    ...
  private
    SavedScrollProc :TWndMethod;
    procedure ScrollWndProc(var Message: TMessage);
    ...
  end;
...
procedure TForm1.ScrollWndProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_HSCROLL,  // ver help API - Scroll Bar Reference
    WM_VSCROLL,
    SBM_SETRANGE,
    SBM_SETRANGEREDRAW,
    SBM_SETPOS :
      Memo2.Dispatch(Message);  // transfere mensagens para memo2
  end;
  SavedScrollProc(Message);  // chama o WindowProc padrão do memo1
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if not Assigned(SavedScrollProc) then
  begin
    SavedScrollProc := Memo1.WindowProc;  // salva WindowProc do memo1
    Memo1.WindowProc := ScrollWndProc;  // atribui novo procedimento
   // para que o scroll horizontal se reflita no segundo memo
    ShowScrollBar(Memo2.handle, SB_HORZ, False);
  end;
end;
...

O curioso é que com a propriedade [i:c3896d1de3]Memo2.ScrollBars=ssNone[/i:c3896d1de3] o scroll ocorre normalmente na vertical. Entretanto, na horizontal, se a linha for mais extensa que a largura do memo2 haverá quebra do texto (independente da propriedade WantReturns), então para que isso não ocorra, [i:c3896d1de3]Memo2.ScrollBars[/i:c3896d1de3] deve ser setado para [i:c3896d1de3]ssHorizontal [/i:c3896d1de3]e na execução do programa a chamada a [i:c3896d1de3]ShowScrollBar[/i:c3896d1de3] esconde a barra horizontal sem que ocorra o problema citado.
Só não está sendo tratado o evento WheelMouse (form que contém o memo) - apesar de o memo1 rolar, seus eventos de scroll não ocorrem (???). Usando SetScrollPos (API) ou ScrollBy (método) sobre o memo2 não surte efeito. :cry:


GOSTEI 0
Dpinho

Dpinho

15/06/2006

Muito Obrigado pela ajuda, foi otimo... utilizei o codigo e resolvir um grupo de Tres memos, mas meu form tem 12 memos sendo que tenho que sicronizar de três em Três, se alguem puder me ajudar de um forma que não precise repetir o codigo seria bom.
Agradeço
Claudio D´Pinho


GOSTEI 0
POSTAR