Frage zu ListVewGadget

Anfängerfragen zum Programmieren mit PureBasic.
Jürgen
Beiträge: 26
Registriert: 27.04.2005 18:04

Frage zu ListVewGadget

Beitrag von Jürgen »

Hallo,

ich suche für folgendes Problem eine Lösung:

Ich habe ein ListViewGadget Fenster erzeugt. Darin möchte ich Daten, welche ich von der rs232 Schnittstelle empfange, anzeigen. Die Daten von der rs232 kommen sporadisch und auch die Anzahl der Bytes ist verschieden. Also, ich teste ob Daten da sind, wenn ja, lese ich sie in einen String und zeige sie per SetGadgetItemText an.
Mein Ziel ist es, die jeweiligen Daten, so wie sie ankommen, anzeigen und wenn es über 16 Bytes sind, wird die Zeile abgeschlossen und eine neue begonnen.
Ich versuche schon einige Zeit auf die Lösung zu kommen mittels SetGadgetItemText, GetGadgetItemText und AddGadgetItem
aber bislang ohne Erfolg. Vielleicht hat einer von Euch die zündente Idee....

Wie verhält es sich eigentlich mit der Position in AddGadGet ? Der Wert -1 setzt den Eintrag an das Ende der List, aber welche Position muß ich eingeben um diesen Eintrag mit GetGadgetItemText auszulesen bzw. mit zu Editieren ?

Für jegliche Infos und Hilfen bedanke ich mich schon mal recht herzlich im voraus...

Alles Gute von Jürgen....
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Wenn ich dich richtig verstanden habe, willst du Text schreiben, dann einen Zeilenumbruch machen und wieder Text schreiben, ne?

Der Zeilenumbruch besteht aus zwei Zeichen: Chr(13) + Chr(10)
Die packst du einfach in deine Textvariable und der Computer bricht automatisch deinen Text an diesen zwei Zeichen um.

Code: Alles auswählen

Text.s = "123" + Chr(13) + Chr(10) + "456"
Die Ausgabe sieht dann so aus:

123
456

Um alle 16 Zeichen so einen Zeilenumbruch einzufügen, kannst du diesen Code nehmen:

Code: Alles auswählen

Quelltext.s ' <- hier deinen Text rein
Zieltext.s ' <- hier ist der umgewandelte Text

If Len(Ausgangstext) > 16
  For i = 16 To Len(Ausgangstext) Step 16
    Zieltext + Mid(Ausgangstext, i - 16, 16) + Chr(13) + Chr(10)
  Next i
EndIf
Das müsste funktionieren, aber ich kann den Code z. Zt. nicht testen.

Greetz Laurin
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Jürgen
Beiträge: 26
Registriert: 27.04.2005 18:04

Beitrag von Jürgen »

Hallo Laurin,

vielen Dank für Deine Bemühungen. Mein eigentliches Problem ist folgendes:

Wenn z.B. den Text "0815" bekommen habe, dann schreibe ich ihn mit AddGadGetItem(#fenster,-1,Text) immer an das Ende einer Liste in das Ausgabefenster.
Es treffen dann irgendwann weitere Daten ein, z.B. "0F0A11",
jetzt muß ich den Text, welchen ich gerade erst in die Liste eingetragen habe ("0815") auslesen, den Text "0F0A11" anhängen, auf 16 Zeichen testen und wieder genau an diese Stelle schreiben wo ich ihn anfangs mit AddGadGetItem (#fenster,-1,text) geschrieben habe.
Um diesen Auslese- und Wiedereinlesevorgang geht es mir. Irgendwann
ist dann der Text > 16 Zeichen, dann sollen die ersten 16 Zeichen abgeschnittenn werden und in die angefangene Zeile eingeschrieben werden der Rest geht dann in eine neue Zeile, solange, bis diese auch die 16 Zeichen erreicht hat usw.

es soll dann ein Fenster entstehen, gefüllt mit HEX Werten welches so ausieht:

1234567890ABCDEF
234567890ABCDEF1
34567890ABCDEF12
4567890ABCDEF123

usw.
ist natürlich nur Beispieltext...

Einen schönen Tag an alle und danke fürs lesen bzw. helfen

Jürgen...
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Achso, quasi wie eine Laufleiste. Da kann ich jetzt leider nicht helfen. Das geht nur von zuhause aus. Dort kann ich etwas experimentieren. :wink:
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Jürgen
Beiträge: 26
Registriert: 27.04.2005 18:04

Beitrag von Jürgen »

ja, genau

wie eine 16 Zeichen breite Laufleiste die man bei Bedarf auch wieder zurück scrollen kann. Na vielleicht meldet sich noch jemand der helfen kann...
Vielen Dank trotzdem und einen schönen sonnigen Tag noch....

mfg Jürgen
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Jürgen hat geschrieben:wie eine 16 Zeichen breite Laufleiste die man bei Bedarf auch wieder zurück scrollen kann.
Dann mach halt einen Puffer-String. Wenn neue Daten kommen
wandelst Du sie in einen String um (Hex-String, 16 Zeichen lang)
und übergibst den String einer Funktion.

Diese Funktion prüft die Länge des neuen Strings und hängt es
komplett oder teilweise an den Buffer an.

Beispiel:

Code: Alles auswählen

Procedure AddToBuffer(Daten$)
  Static Buffer$

  bufferlaenge = len(Buffer$)
  datenlaenge = len(Daten$)

  Wenn (bufferlaenge + datenlaenge) = 16
    Buffer$ = ""
    AddToListView( Buffer$ + Daten$ )
  Andernfalls Wenn ( bufferlaenge + datenlaenge) < 16
    Buffer$ + Daten$
  Andernfalls
    x = 16-bufferlaenge
    AddToListView( Buffer$ + Left(Daten$,x) )
    Buffer$ = ""
    AddToBuffer( Right(Daten$,datenlaenge-x) )
  EndeWenn
EndProcedure
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Jürgen
Beiträge: 26
Registriert: 27.04.2005 18:04

Beitrag von Jürgen »

Hallo,

vielen Dank Danilo, werde ich mal testen....

Alles Gute nochmals und Danke für Eure Hilfe.....

Jürgen
Antworten