Newsgroup: it.comp.lang.delphi
Titolo: TMemo e BCB o Delphi

Salve,
ho un memo sul quale vengono visualizzate delle stringhe e vorrei che fosse
sempre visibile l'ultima riga immessa. Ho provato con il seguente codice:
  int iMin, iMax;
  GetScrollRange(memLog->Handle, SB_VERT, &iMin, &iMax);
  SetScrollPos(memLog->Handle, SB_VERT, iMax, true);
che mi sposta la scrollbar nella pos inferiore ma non il contenuto del memo;
alla fine ho aggiunto anche:
  memLog->Update();
ma non cambia nulla.
Volevo provare a mandare al memo un messaggio WM_VSCROLL
ma non so cosa passare come parametro hwndScrollBar.
Per favore aiutatemi!
--
e-mail : 
dm...@usa.net
ICQ# 62122231
--
e-mail : 
dm...@usa.net
ICQ# 62122231

"Gianluca_dm":
| Salve,
| ho un memo sul quale vengono visualizzate delle stringhe e vorrei che
fosse
| sempre visibile l'ultima riga immessa. Ho provato con il seguente codice:
con CTRL-END vai alla fine, quindi:
Memo1.SetFocus;
keybd_event(VK_CONTROL,0,0,0);
keybd_event(VK_END,0,0,0);
keybd_event(VK_END,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
ti do questa soluzione,
lo so che non e' il massimo ma ho provato e funziona,
forse qualcuno ti dara' soluzioni migliori...;)
Ciao,
Alan Solo
ps: se scrivi in Delphi nei post e' meglio... ;)


grazie per il sistema, che funziona durante i normali aggiornamenti del
memo. Purtroppo queste istruzioni devono essere eseguite nell'evento
OnCreate oppure OnShow della form che contiene il memo e in questi eveti non
si può eseguire la funzione SetFocus
Ciao

"Gianluca_dm":

prova magari con Perform/SendMessage a mandargli WM_KEYDOWN,
...pero' non sono come mandare una combinazione di tasti...:(
Ciao,
Alan Solo


v. EM_SCROLLCARET: "An application sends an EM_SCROLLCARET message to
scroll the caret into view in an edit control. "
TuoMemo.Perform(EM_SCROLLCARET, 0, 0);
v. anche TMemo.CaretPos.
hth
Paolo Arosio


Grazie,
ho usato il metodo Perform, e funzione durante i normali aggiornamenti del
memo, ma all'interno dell'OnCreate non funziona.
Il mio problema č il seguente:
ho una TStringList in cui sono memorizzate delle frasi che evidenziano degli
eventi registrati durante l'esecuzione del progr, se voglio visualizzare
queste frasi apro una finestra contenete un TMemo. All'evento OnChange della
lista ho associato una funzione che aggiorna il memo e tramite il metodo
Perform visualizza l'ultima riga (che sarebbe l'evento piů recente). Quando
la finestra č stata creata e visualizzata lo scroll automatico funziona
bene, ma all'atto della creazione viene visualizzata sempre la prima riga.
Non riesco a trovare una soluzione.

"Gianluca_dm":
| ho una TStringList in cui sono memorizzate delle frasi che evidenziano
degli
| eventi registrati durante l'esecuzione del progr, se voglio visualizzare
| queste frasi apro una finestra contenete un TMemo. All'evento OnChange
della
| lista ho associato una funzione che aggiorna il memo e tramite il metodo
| Perform visualizza l'ultima riga (che sarebbe l'evento più recente).
Quando
| la finestra è stata creata e visualizzata lo scroll automatico funziona
| bene, ma all'atto della creazione viene visualizzata sempre la prima riga.
| Non riesco a trovare una soluzione.
io invece di scrivere in un TStringList a parte, scriverei
direttamente nel memo...
in questo modo vedrai sempre l'ultima  riga aggiunta
Ciao,
Alan Solo


lo so, ma dato che che l'utente leggerà il log solo in caso di errore avevo
pensato di creare al momento la finestra con il memo, giusto per risparmiare
un pò di risorse (con ~200Mb di ram mi metto a fare il pignolo)
Ciao.

memo, ma all'interno dell'OnCreate non funziona.
Cioe' la tua finestra di log, se non ho capito male, è creata runtime
quando l'utente schiaccia il pulsante 'Fammi vedere il log'. 
se (1) _sa_ dove pescare la StringList che contiene il log non c'e'
problema: lo carica e poi fa il perform;
(2) al memo è assegnato dopo la creazione da parte dal chiamante: metti
il perform nell'OnShow _o_ manda un messaggio custom (Post) e crea il
gestore opportuno nella finestra del memo _o_ metti un timer attivato
dall'OnShow che triggera lo scrollinview.
hth
Paolo Arosio


Ciao,
conosco il sistema del timer, ma cercavo una soluzione più "elegante". Ora
provo con il gestore dei messaggi.
Grazie.