Newsgroup: it.comp.lang.delphi
Titolo: Memo e aggiunta singolo carattere

Devo monitorare delle stringhe che mi arrvano da un plc via seriale.
Per fare ciò uso un Tmemo per la visualizzazione a video ed un file di log
per l'immagazzinamento dei dati su disco.
Il componente AsyncPro della exTP mi restituisce un carattere per volta che
riceve dalla seriale, io vorrei aggiungere il singolo carattere alla linea
del tmemo, ma se faccio memo1.lines.add(s); mi aggiunge una riga intera.
Non c'è un modo per aggiungere un singolo carattere alla fine della riga
Grazie
-- 
Fabrizio Mancini - <f[.]mancini[@]tin[.]it> 12/12/2003 9.24.45
Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)

 carattere alla fine della riga Grazie
Se ho capito bene,
    memo1.lines.text := memo1.lines.text + s;
--
Jax
====
La superbia è il cavallo dei ricchi; per la povera gente è fin troppo
onore quando va a piedi. (Emilio de Marchi)

On Fri, 12 Dec 2003 09:51:32 +0100, Fabrizio Mancini wrote:
come aggiungere un singolo carattere ad un memo senza andare a capo su una
nuova linea.
c: Char;
s: String;
memo1.text:=memo1.text+c;
memo1.text:=memo1.text+s;
oppure
i_Line: Integer;
s: String;
//recupero il numero di riga corrente del Tmemo
i_Line:=Memo1.Perform(em_LineFromChar, $FFFF, 0);
Memo1.Lines[i_Line]:=Memo1.Lines[i_Line]+s;
Ciao
-- 
Fabrizio Mancini - <f[.]mancini[@]tin[.]it> 12/12/2003 10.03.12


Non c'č un modo per aggiungere un singolo carattere alla fine della riga
Forse dovrebbe trattarsi del componente TApdComPort,e il carattere che viene
letto lo prelevi mediante l'evento OnTriggerAvail, giusto ?
In questo caso con il GetChar prelevi il byte, ma se lo vuoi aggiungere al
memo tramite la proprieta' lines, trattandosi di tstrings non credo che tu
possa farlo senza privarti del ritorno a capo. A meno che non riprendi sempre
la stessa linea, gli aggiungi in coda il byte, e la rimetti al suo posto.
Fornisci piu' specifiche per trovare un'alternativa: il log a video e'
necessario ? Puoi gestirlo separatamente? 
Ciao
-- 
Morde. 
(
mo...@despammed.com
)

 necessario ? Puoi gestirlo separatamente? 
I pc monitorizzano due plc con delle schede prodotte da noi. unica cosa che
mi da fastidio sono i caratteri null che il memo non comprende quindi con
l'evento OnTriggerAvail filtro tali caratteri e li sostituisco con una
stringa vuota che anche il memo capisce
Poi stessa cosa la butto su un file di testo che ogni 24h viene chiuso.
Il progetto però lo lascio aperto ad ulteriori features che ancora non ci
hanno richiesto ma che sicuramente ci chiederanno, cioè le stampe filtrate
per eventi (allarmi, ack, reset, ecc.) quindi pensavo di fare log anche su
db per poi fare delle query con i filtri per le stampe.
Il log a video serve perchè ci saranno anche degli operatori che leggeranno
gli eventi, e prenderanno di conseguenza le debite azioni. Siccome la nostra
scheda dopo la stampa dell'evento manda un cr+lf allora pensavo di
aggiungere anche questo a video, tanto il memo lo interpreta correttamente.
Tu come hai implementato il log? unico file? a noi serve che i log siano
disponibili per almeno 10, su supporti ridondati, cosi come sono le cpu
delle nostre schede. Devono avere un fault tolerance molto elevato, ti
immagini se partono le turbine della centrale idroelettrica?? chi glielo
dice che il software che ho fatto non ha scritto il log perchè il mio
software non capisce il null char? ;-))
ciao 
-- 
Fabrizio Mancini - <f[.]mancini[@]tin[.]it> 12/12/2003 11.13.02


ciao 
Ciao Fabrizio, sempre a disposizione.
A questo punot, Buon log. ;)
-- 
Morde. 
(
mo...@despammed.com
)

 HEheheh.... loggatore folle, logga, logga!!!!
loggo pure il messaggio che ti credi??? ;-))
ciao
-- 
Fabrizio Mancini - <f[.]mancini[@]tin[.]it> 12/12/2003 12.49.57


 carattere alla fine della riga Grazie
Hai gia' fatto prove di carico? Oltre un certo limite il TMemo comincia
a mangiare memoria in modo non lineare.
Ho usato abbastanza estesamente i componenti base APRO sino alla 3.05.
Prevedi un flag o un parametro negli ini che ti avvii il log interno
(quello di dettaglio) del componente.
Quanto ai null nella stringa potresti aggiungerli come "[nul]" o
semplici spazi. Come mai se le stringhe plc hanno un terminatore non usi
il DataAvail o i DataPacket?
Saluti
Paolo Arosio
--
"La dimostrazione dell'esistenza di specie intelligenti nell'universo e'
che non ci vengono a trovare"

On Sat, 13 Dec 2003 15:49:27 +0100, Paolo Arosio wrote:
i nostri plc sono un po particolari, perchè fanno supervisione dei sensori,
allarmi, rivelatori ecc.. vengono sviluppati da noi. Quindi siamo noi col
nostro software a programmare le stringhe di uscita (a parte i terminatori
ecc..). Per le stringhe di uscita uso il OnTriggerAvail per la
visuallizzazione del memo, OnTriggerData (con la stringa #13#10) per la
memorizzazione su file. Per il memo ho risolto cosi (onde evitare di fargli
mangiare memoria, ho impostato un valore i_MaxMemoLines, sull'evento
onchange del memo controllo se il nr delle righe è superiore a
i_MaxMemoLines, se si cancello la linea 0 del memo. tanto non hanno bisogno
di tenersi tutti i log a video.
Ho invece un altro problema.
Per il logging, visto che non mi va bene quello del Async, mi sono
implementato il sistema tramite degli stream. Quando ho un po di tempo mi
personalizzo quello il log dell'async in quanto non mi va bene come mi fa il
log.
ciao
-- 
Fabrizio Mancini - <f[.]mancini[@]tin[.]it> 15/12/2003 11.39.01


 bene come mi fa il log.
Ti consigliavo di implementare un metodo che consenta di attivare il log
interno (quello dettagliato) per eventuali scopi di debug, non per
l'applicazione in se'. Puo' essere *molto* utile se non tutto funziona
come atteso.


 interno (quello dettagliato) per eventuali scopi di debug, non per
allora lo farò sicuramente. intanto consegno l'app con quello che deve fare,
poi visto che servirà anche per usi interni, la miglioro
grazie
-- 
Fabrizio Mancini - <f[.]mancini[@]tin[.]it> 15/12/2003 16.01.55
