Newsgroup: it.comp.lang.delphi
Titolo: Re: Come posizionare il cursore nel richedit?

 testo che mi interessa?
Prendi spunto da qua:
http://snipurl.com/xx6b
Ciao
ACSH
-- 
If you don't think carefully, you might think that programming is
just typing statements in a programming language.
(Ward Cunningham) 

 (Ward Cunningham)
No, nada... non mi e' di aiuto...
Altri suggerimenti?

 
prova a vedere
procedure TForm1.go(x:integer);
var txt : string;
     posi,
     cor,
     c1 : integer;
begin
   txt := RichEdit1.text+' ';
   posi := 0;
   c1 := 0;
   cor := 1;
   if (x>1) then
   begin
     while(cor<x) do
     begin
       inc(posi);
       if (txt[posi]=chr($d)) then inc(cor);
     end;
   end
   else posi := 1;
   while (txt[posi] = chr($a))or (txt[posi] = chr($d)) do inc(posi);
   dec(posi);
   Richedit1.selstart := posi;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  go(6);
  richedit1.setfocus;
end;
ed ora a nanna.
ciao
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
to reply remove "1975nosp"

> No, nada... non mi e' di aiuto...
Semplifico il tutto.
Tu hai bisogno:
/ cit.
ogni volta che compilo un richedit con del
testo automaticamente mi viene mostrata
la fine del richedit, mentre io ho bisogno di mostrare un
determinato punto del richedit, diciamo ad
esempio alla riga 40
/fine cit.
Io ti rispondo:
usa il messaggio EM_LINESCROLL:
The EM_LINESCROLL message scrolls the text in a
multiline edit control.
Ciao
ACSH
-- 
Il più grande sbaglio nel progettare software
a prova di stupido è sottostimare l'enorme
ingegnosità degli stupidi.

 multiline edit control.
Anticipato. Il tutto tradotto significa:
  PostMessage(Richedit1.Handle, EM_LINESCROLL, 0, 
Form1.RichEdit1.Lines.Count);
Fatto.
-- 
- Carlo - 

  PostMessage(...);
Tra le altre cose la documentazione suggerisce SendMessage() ...
-- 
- Carlo - 


Nella discussione che avevo suggerito nella prima risposta c'è tutto
quello di cui ha bisogno, IMO. Ma se dice che non gli serve ...
Bah, vado a nanna. Domani la sveglia suonerà presto.
Ciao
-- 
ACSH
[TurboDelphi]
Chi fa da se', fatica il doppio

ACSH ha scritto:

Il problema e' che nel mio caso sia utilizzando
SendMessage(form22.Richedit1.Handle, EM_LINESCROLL, 0,
 Form22.RichEdit1.Lines.Count);
 che
PostMessage(form22.Richedit1.Handle, EM_LINESCROLL, 0,
 Form22.RichEdit1.Lines.Count);
la barra si ritrova alla fine del richedit e il richedit e'
completamente bianco, cliccando sulla barra di scorrimento il testo
riappare...
non e' esattamente cio' di cui avevo bisogno...
Ho provato la procedura suggerita da "ca75" e devo dire che funziona...
ma purtroppo sposta solo il cursore mentre la barra rimane ferma in
cima al richedit.
A questo punto comincio a pensare che non sia una cosa fattibile...
anche se mi sembra impossibile che con un programma come il Delphi sia
impossibile fare una cosa apparentemente cosi' semplice....
Grazie cmq per l'interessamento e se avete altre idee fatevi pure
avanti...
BB

 impossibile fare una cosa apparentemente cosi' semplice
è che TRichEdit è un wrapper di un controllo "del" Windows
-- 
Mauro Falzari 
 
  La teoria è quando si sa tutto ma non funziona niente. 
  La pratica è quando funziona tutto ma non si sa il perchè. 
  In ogni caso si finisce sempre a coniugare la teoria con la pratica: 
  non funziona niente e non si sa il perchè. 
   (Albert Einstein)

Ho risolto grazie a questo post:
http://groups.google.it/group/borland.public.delphi.winapi/browse_thread/thread/1c941e67130aa77d/a7fa0797dc91ec3d?lnk=st&q=richedit+scrollbar+position&rnum=7#a7fa0797dc91ec3d
poi dice che gli americani...... :)
Grazie a tutti per l'interessamento
a presto
BB

 ha scritto nel messaggio
SendMessage(form22.Richedit1.Handle, EM_LINESCROLL, 0,
 Form22.RichEdit1.Lines.Count);
 che
PostMessage(form22.Richedit1.Handle, EM_LINESCROLL, 0,
 Form22.RichEdit1.Lines.Count);
la barra si ritrova alla fine del richedit e il richedit e'
completamente bianco, cliccando sulla barra di scorrimento il testo
riappare...
--------
Su un po' di fantasia. Se provassi a capire il significato di lparam (ultimo 
parametro) capiresti che basta un - N (dove N è il numero di righe che 
desideri visualizzare) per ottenere il risultato che desideri.
-- 
- Carlo - 


Arrivo un po' in ritardo ma in questo modo non si devono gestire i 
messaggi:
procedure TdlgGoTo.btnOKClick(Sender: TObject);
var LineNum, PosReturn, I, SkipChars : Integer;
begin
  PosReturn := 0;
  LineNum := Trunc(edtGoTo.Value) - 1;
  SkipChars := 0;
  for I := 0 to LineNum - 1 do
    begin
      SkipChars := SkipChars + Length(frmMain.memEditor.Lines[I]);
      PosReturn := Pos(frmMain.memEditor.Lines.Strings[0], 
frmMain.memEditor.Lines[I]);
    end;
    Close;
    frmMain.memEditor.SetFocus;
    SkipChars := SkipChars + PosReturn;
    frmMain.memEditor.SelStart := SkipChars + LineNum;
    frmMain.memEditor.SelLength := 0;
end;
E' una metodo che ho trovato su intenet, anche se ora non trovo il link, 
comunque puoi provare anche questa.
Ciao.
---
Ryo GQI 

 poi dice che gli americani...... :)
Che è poi quello che ti era già stato suggerito ...
/ cit.
Otherwise try sending EM_SCROLL or EM_LINESCROLL messages 
to the control (see Win32.HLP).   
/ fine cit.
Poi uno dice degli italiani ...
Ciao
ACSH
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 --
Si... peccato che mi riferissi al codice prima:
With richedit1 Do Begin
    currentline := Perform( EM_LINEFROMCHAR, selstart, 0 );
    Selstart    := Perform( EM_LINEINDEX, currentline+100, 0 );
    Perform( EM_SCROLLCARET, 0, 0 );
  End; 
Ciao
BB

 Si... peccato che mi riferissi al codice prima:
Depongo le armi e mi arrendo.
Alla prima occasione fumeremo il calume' della
pace assieme.
Ciao e buona notte.
ACSH