Array
(
)

Barra de rolagem (Simples)

Rcasistemas
|
MVP
    28 dez 2005

Bom dia a todos...
Preciso urgentemente descobrir como faço para rolar a barra de rolagem do TRichEdit, independente da posição cursor, como se estivesse usando o Scroll do mouse....
Será q os amigos poderiam ajudar??

Sou muito grato a todos.
Abraços


Marco Salles
   - 28 dez 2005

#Código

procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(RichEdit1.Handle,WM_VSCROLL,SB_Lineup,0);
end;


#Código
procedure TForm1.Button2Click(Sender: TObject);
begin
SendMessage(RichEdit1.Handle,WM_VSCROLL,SB_LineDown,0);
end;



Rcasistemas
|
MVP
    28 dez 2005

Funcionou kra, se naum for abusar muito poderia dizer a message utilizar para ir para o inicio e para o fim do RichEdit???

Abraços.


Marco Salles
   - 29 dez 2005


Citação:
Funcionou kra, se naum for abusar muito poderia dizer a message utilizar para ir para o inicio e para o fim do RichEdit???


vou dar um exemplo indo para o fim... Se lhe servir posto a outra parte

Voce para executar esse exemplo precisa de :

Procure no seu CD de Delphi , na pasta extras a unit SndKey32.pas.

Inclua essa Unit na Librayr , para que voce consiga acessar algumas funçoes

Feito isso inclua a Unit SndKey32 na uses do Form do seu Projeto

#Código

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,SndKey32,
StdCtrls, ComCtrls;


Finalmente


Citação:
procedure TForm1.Button1Click(Sender: TObject);
var
i,inicio,Fim:integer;
begin
RichEdit1.SetFocus;
SendKeys(pchar(´^{END}´), False);
Fim:=RichEdit1.SelStart;
inicio:=Fim - length(RichEdit1.Lines.Strings[RichEdit1.LINES.COUNT-1]);
for i:=inicio to fim do
SendKeys(pchar(´+{LEFT}´), False);
end;



Nildo
   - 29 dez 2005

Não seria mais facil usar:

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


Marco Salles
   - 29 dez 2005


Citação:
Não seria mais facil usar:

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


Acho que assim nun dá não Teste ai...

O Fato de parecer complicado , ´um pouco culpa minha.. Pelo que foi pedido poderia ter feito simplesmente

:lol: :lol: :lol:
#Código

procedure TForm1.Button1Click(Sender: TObject);
begin
RichEdit1.SetFocus;
SendKeys(pchar(´^{END}´), False);
end;

que teria o efeito de ir para o fim do RichEdit1

Mas quis dar uma imperequetada na perereca 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 , quando o RichEdit1 tem linhas em vazio.. Por isso reescrevi o código e acho que deve resolver

:P :P :P :P
#Código
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(´^{END}´), False);
fim:=length(RichEdit1.Lines.Strings[fim]);
for i:=0 to fim do
SendKeys(pchar(´+{left}´), False);
end;
end;



Nildo
   - 29 dez 2005

Na verdade eu testei antes de colocar a resposta! E retestei e continua funcionando! E quanto a não ter um ItemIndex, tem sim..

RichEdit1.CaretPos.Y

;)


Marco Salles
   - 29 dez 2005


Citação:
Na verdade eu testei antes de colocar a resposta! E retestei e continua funcionando!


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


Citação:
E quanto a não ter um ItemIndex, tem sim..

RichEdit1.CaretPos.Y


mas acho que e somente leitura ...


Nildo
   - 29 dez 2005


Citação:
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


Realmente, somente quando a posição está visivel. Mas funciona (nesse caso)! rsrs


Citação:
mas acho que e somente leitura ...


Sim, mas funciona como um ItemIndex na hora de obter a linha e caracter do cursor do teclado


Marco Salles
   - 29 dez 2005


Citação:
Marco Salles escreveu:
mas acho que e somente leitura
...


Citação:
Sim, mas funciona como um ItemIndex na hora de obter a linha e caracter do cursor do teclado


Se for para ver a Linha ou a coluna do Cursor Poderia tb usar :

#Código

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


Marco Salles
   - 30 dez 2005

volto nesse tópico porque constatei que o ´efeito´ selecionado que tentei dar a ultima linha do RicheetEdit , em determinados textos , principalmente com formataçoes do tipo tabela , o laço for não se comportava da maneira que deveria

Então fiz um novo código sem o laço for , para tentar corrigir estas distorção com esse tipo de formatação

Ficando o codigo assim :

#Código

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(´^{END}´), False);
application.ProcessMessages;
RichEdit1.SelStart:=RichEdit1.SelStart-1;
SendKeys(pchar(´+{Home}´), False);
end;
end;


Quero dizer que para a questão de somente ir para o final do RicheetEdit
bastava

#Código
RichEdit1.SetFocus;
SendKeys(pchar(´^{END}´), False);



a demais codificaçao é uma tentativa por conta e risco de dar um efeito destacado no fim do texto.. Tipo isso:

Imagem antes do Click Do Botao :
[URL=http://imageshack.us][img:a5b0873149]http://img512.imageshack.us/img512/6383/imagemricheet17we.jpg[/img:a5b0873149][/URL]

Imagem apos 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...