[ lord Vader @ 29.10.2005. 16:00 ] @
Pravim nešto nalik Hiper Terminalu. Za prikaz primljenih podataka preko serijskog porta, koristim Memo kontrolu. Postavio sam samo Vertikalni scroll bar. Problem je u tome što kada se kontrola napuni i uključi scroll bar, novi podaci se ne vide jer nikako ne mogu da namestim auto scroll. Ručno skrolovanje nema smisla u ovakvoj aplikaciji.
Pitanje je da li može, i kako da se aktivira autoskrolovanje za Memo kontrolu. Ako ovo nije moguće dobrodošli su i predlozi za bilo kakvu alternativnu kontrolu ili savet.

Hvala svima.
[ marcha @ 29.10.2005. 19:45 ] @
Kojom metodom punis Memo?
Kako si opisao cini mi se da koristis : Memo1.Lines.Text:=PortText;
Probaj sa Memo1.Lines.Add(PortText) i bice sve ok.
Ako hoces da ti novi segment texta bude uvek na vrhu kontrole onda probaj sa Memo1.Lines.Insert(0,PortText);
[ Nemanja Avramović @ 29.10.2005. 21:01 ] @
mislim da ni Add ne radi autoscroll (tj. kad napuni vise od visine memo-a tako da se pojavi scrollbar, pa ti onda odvuces scroll na kraj, onda nastavlja sam da scrolluje), a i mene zanima autoscroll......
[ marcha @ 30.10.2005. 09:21 ] @
Probaj pa ces videti :)
Radi...
[ lord Vader @ 30.10.2005. 12:51 ] @
Ne može Add zato što se odnosi na linije, a meni treba da dodajem karakter po karakter, kao što to radi pravi hiper terminal. Inače stvrarno radi autoskroll, ali kažem meni je sekorisan koristim Memo.text := Memo.text + Rx_Karakter;
Sinoć sam par sati isprobavao i ništa nije davalo rezultate. Kada bi mogao nekako da dobijem handle na skrol pa preko njega da ga skrolujem svaki put, ima li neka kontrola koja ima autoskrol? Probao sam i RichEdit i nema ni ona
[ Srki_82 @ 30.10.2005. 13:49 ] @
Kad pokrenes program uradis prvo jedan Add('') tako da imas jednu praznu liniju. Kad god ti se pojavi nov karakter, a da nije ASCII kod za novi red, dodas ga ovako
Code:
Memo1.Lines[Memo1.Lines.Count - 1] := Memo1.Lines[Memo1.Lines.Count - 1] + Karakter;
, a ako si primio ASCII kod za novi red uradis ponovo Add('');

Provereno je i radi 100%
[ lord Vader @ 31.10.2005. 11:18 ] @
Srki brate, šta da ti kažem, hvala. Ovo stvarno radi i to odlično. Još nisam implementirao to za CR ali razmišljam da ga stavim kao opciju jer moj HT planiram za rad sa mikrokontrolerima tj samo za te stvari tako da ima komunikaciju samo sa COM porta.

Hvala vam svima ljudi.
Ako vam treba ovakav terminal, javite pa da ga negde zakačim.
Glavna fora je što istovremeno prikazujer podatke u Hex, ASCII i Dec kodovima, u tri različite kontrole.

Ako ima zainteresovanih možemo da napravimo Open Source HT tako da zajedno napravimo HT sa mnogo dobrih funkcija.
[ lord Vader @ 31.10.2005. 11:28 ] @
Zaboravih. Kako da u Delphi-ju napravim novi thread i u njega stavim kod koji čita podatke iz prijemnog buffer-a i puni Memo kontolu?
Znači otprilike ovako
Code:

ThreadProc
var
i: Char;
begin
i:=Char(ReadPort);
Memo1.Lines[Memo1.Lines.Count - 1] := Memo1.Lines[Memo1.Lines.Count - 1] + i;
end;

Sad je fazon što ova funkcija mora da se okida pomoću nekog tajmera ali mora biti u drugoj niti jer trenutno nije i zaglavljuje mi upravljanje programom.
Znači treba da napravim nit koja poziva funkciju na svakih, recimo, 100ms.

Ko zna nek priča!