Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   TMemo in Android "hängt' (https://www.delphipraxis.net/211938-tmemo-android-haengt.html)

skoschke 24. Nov 2022 10:20

TMemo in Android "hängt'
 
Hallo,

in einer App zur Stromzählerauslesung verwende ich ein TMemo zur Kommunikationsanzeige...

Die vom Zähler empfangenen Zeilen packe ich so in etwa ins Memo:

Delphi-Quellcode:
 
  //inbuffer sind die am COMPort angekommenen Zeichen
  p := pos(cr + lf, inbuffer);
  while p <> 0 do
  begin
    zl := copy(inbuffer, 1, p - 1);
    Memo.lines.Add(zl);
    inbuffer := copy(inbuffer, p + 2, inbuffer.Length - p - 1);
    p := pos(cr + lf, inbuffer);
  end;
  Memo.GoToTextEnd;
  Memo.GoToLineBegin;
Die beiden letzten Zeilen sollen dafür sorgen, dass immer das Ende der Daten sichtbar ist.

Bei den geschätzt ersten 4000 Zeilen geht das auch recht flüssig, danach wird es immer zäher ind das Memo aktualisiert sich nur noch etwa alle 30, zum Ende hin alle 50 Zeilen (man sieht große Sprünge)

Insgesamt sind ca. 6000 Zeilen zu bearbeiten!

Hat jemand eine Idee, wie man das flüssiger hinbekommen kann?

Ciao
Stefan

Klaus01 24. Nov 2022 10:29

AW: TMemo in Android "hängt'
 
beginUpdate - endUpate vielleicht.

skoschke 24. Nov 2022 11:00

AW: TMemo in Android "hängt'
 
wann soll das verwendet werden?
Vor Beginn und am Ende der Kommunikation?
Ich brauche die Anzeige der einlaufenden Zeilen!
Das wird so leider nichts...

Ciao
Stefan

Klaus01 24. Nov 2022 11:10

AW: TMemo in Android "hängt'
 
.. ich hatte es so gemeint.
Delphi-Quellcode:
  memo.lines.beginUpdate;
  while p <> 0 do
  begin
    zl := copy(inbuffer, 1, p - 1);
    Memo.lines.Add(zl);
    inbuffer := copy(inbuffer, p + 2, inbuffer.Length - p - 1);
    p := pos(cr + lf, inbuffer);
  end;
  memo.lines.endUpdate;
Ob es Sinn macht, hängt auch davon ab, wieviele Zeilen addiert werden.

Grüße
Klaus

skoschke 24. Nov 2022 11:17

AW: TMemo in Android "hängt'
 
Ach so :-)

Nein, in der Routine kommen teilweise nur halbe Zeilen an, erst wenn eine komplett ist, wird diese ausgegeben...

Ich suche schon nach einer anderen Komponente, aber so richtig finde ich nichts :-(

Ciao
Stefan

Der schöne Günther 24. Nov 2022 13:08

AW: TMemo in Android "hängt'
 
Ich glaube nicht dass dein Kommunikationslog zu jeder Zeit sechstausend Zeilen lang sein muss.

Jeder wird damit klar kommen, im laufenden Betrieb die letzten 100-200 "Zeilen" zu sehen und sich danach evtl. durch einen großen Brocken zu wühlen.

PS: Ich habe so etwas (unter VCL) normalerweise auch immer mit zwei simplen Memos gemacht, aber ein TWebBrowser ist auch gar nicht so abwegig, je nach Protokoll kann man da auch toll Dinge zeigen wie in einem klassischen "Chat", Fragesteller rechts, Antwort links.

skoschke 24. Nov 2022 13:52

AW: TMemo in Android "hängt'
 
Ja, so habe ich es jetzt auch umgeändert:

Ich sammle die Zeilen in einer TStringList (Protokoll), ein Label zeigt die zuletzt eingetragene Zeile an.
Damit hat man zumindest die Rückmeldung, dass sich da was "bewegt".

Am Ende der Kommunikation wird Memo.Text := Ptotokoll.Text übergeben, zum Anschauen...

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz