Barra de rolagem (Simples)
28/12/2005
0
Preciso urgentemente descobrir como faço para rolar a barra de rolagem do TRichEdit, independente da posição cursor, como se estivesse usando o [b:4995ed8496]Scroll[/b:4995ed8496] do mouse....
Será q os amigos poderiam ajudar??
Sou muito grato a todos.
Abraços
Aloizio Castro
Posts
28/12/2005
Marco Salles
procedure TForm1.Button1Click(Sender: TObject); begin SendMessage(RichEdit1.Handle,WM_VSCROLL,SB_Lineup,0); end;
procedure TForm1.Button2Click(Sender: TObject); begin SendMessage(RichEdit1.Handle,WM_VSCROLL,SB_LineDown,0); end;
28/12/2005
Aloizio Castro
Abraços.
29/12/2005
Marco Salles
vou dar um exemplo indo para o fim... Se lhe servir posto a outra parte
Voce para executar esse exemplo precisa de :
[b:649229190e]Procure no seu CD de Delphi , na pasta extras a unit SndKey32.pas.[/b:649229190e]
[b:649229190e]Inclua essa Unit na Librayr , para que voce consiga acessar algumas funçoes[/b:649229190e]
[b:649229190e]Feito isso inclua a Unit SndKey32 na uses do Form do seu Projeto[/b:649229190e]
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,SndKey32, StdCtrls, ComCtrls;
Finalmente
29/12/2005
Nildo
RichEdit1.SelStart := 0;
para ir para o inicio, e
RichEdit1.SelStart := length( RichEdit1.Text );
para ir até o fim.
Depois você da um
RichEdit1.SetFocus;
para setar o focus no controle
29/12/2005
Marco Salles
Acho que assim nun dá não :cry: :cry: Teste ai...
[b:2ad1667134]O Fato de parecer complicado [/b:2ad1667134], ´um pouco culpa minha.. Pelo que foi pedido poderia ter feito simplesmente
:lol: :lol: :lol:
procedure TForm1.Button1Click(Sender: TObject); begin RichEdit1.SetFocus; SendKeys(pchar(´^´), False); end;
que teria o efeito de ir para o fim do RichEdit1
[b:2ad1667134]Mas quis dar uma imperequetada na perereca [/b:2ad1667134]e alem de ir para o Fim do RichEdit1 ,também selecionar a ultima linha
.. Uma especie de item Intex que aparetemente não tem no RichEdit1
Pois bem o ultimo post que coloquei , tem um comportamento duvidos , :cry: :cry: :cry: quando o RichEdit1 tem [b:2ad1667134]linhas em vazio[/b:2ad1667134].. Por isso reescrevi o código e acho que deve resolver
:P :P :P :P
procedure TForm1.Button1Click(Sender: TObject); var i,Fim:integer; begin Fim:=RichEdit1.Lines.Count; while (RichEdit1.Lines.Strings[fim] = ´´) DO begin RichEdit1.Lines.Delete(fim); Fim:=Fim-1; if RichEdit1.Lines.Count = 0 then break; end; if RichEdit1.Lines.Count > 0 Then begin RichEdit1.SetFocus; SendKeys(pchar(´^´), False); fim:=length(RichEdit1.Lines.Strings[fim]); for i:=0 to fim do SendKeys(pchar(´+´), False); end; end;
29/12/2005
Nildo
RichEdit1.CaretPos.Y
;)
29/12/2005
Marco Salles
por gentileza , coloque o código completo , porque aqui eu não consegui.. Da certo somente nos casos em que o Numero de linhas do Richeet esta toda dentro da area visivel da mesma .. Mas quando tem linhas ocultas , não consiguir
mas acho que e somente leitura ...
29/12/2005
Nildo
Realmente, somente quando a posição está visivel. Mas funciona (nesse caso)! rsrs
[quote:72a5cc92e3=´Marco Salles´]mas acho que e somente leitura ...[/quote:72a5cc92e3]
Sim, mas funciona como um ItemIndex na hora de obter a linha e caracter do cursor do teclado
29/12/2005
Marco Salles
[b:6215f4b77f]Se for para ver a Linha ou a coluna do Cursor Poderia tb usar :[/b:6215f4b77f]
var linha,coluna:Integer; with RichEdit1 do begin Linha:=Perform(EM_LINEFROMCHAR,SelStart, 0); Coluna := SelStart - Perform(EM_LINEINDEX, Linha, 0); end;
So que mas não vejo aplicação direta , dessas intruçoes que pudesse facilitar a imperequetada que eu dei na perereca
30/12/2005
Marco Salles
Então fiz um [b:a5b0873149]novo[/b:a5b0873149] código sem o laço for , para [b:a5b0873149]tentar[/b:a5b0873149] corrigir estas [b:a5b0873149]distorção[/b:a5b0873149] com esse tipo de formatação
Ficando o codigo assim :
procedure TForm1.Button1Click(Sender: TObject); var fim:integer; begin Fim:=RichEdit1.Lines.Count; while (RichEdit1.Lines.Strings[fim] = ´´) DO begin RichEdit1.Lines.Delete(fim); fim:=fim-1; if RichEdit1.Lines.Count = 0 then break; end; if RichEdit1.Lines.Count > 0 Then begin RichEdit1.SetFocus; SendKeys(pchar(´^´), False); application.ProcessMessages; RichEdit1.SelStart:=RichEdit1.SelStart-1; SendKeys(pchar(´+´), False); end; end;
Quero dizer que para a questão de somente ir para o final do RicheetEdit
bastava
RichEdit1.SetFocus; SendKeys(pchar(´^´), False);
a demais codificaçao é uma tentativa por conta e risco de dar um efeito destacado no fim do texto.. Tipo isso:
Imagem [b:a5b0873149]antes[/b:a5b0873149] do Click Do Botao :
[URL=http://imageshack.us][img:a5b0873149]http://img512.imageshack.us/img512/6383/imagemricheet17we.jpg[/img:a5b0873149][/URL]
Imagem [b:a5b0873149]apos[/b:a5b0873149] o Click Do Botao
[URL=http://imageshack.us][img:a5b0873149]http://img512.imageshack.us/img512/6666/imagemricheet25mf.jpg[/img:a5b0873149][/URL]
E so isso que estou tentando...
Clique aqui para fazer login e interagir na Comunidade :)