Scrollende Textfelder

Moderator: Moderatoren

Gesperrt
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Scrollende Textfelder

Beitrag von Rudolf »

Hallo Leute,
da Roger momentan im Stress ist, wende ich mich an Euch. Ich suche eine Lösung mit der man zur Fortschrittsanzeige in einem Feld scrollenden Text darstellen kann. Es müsste mit einem Multiline funktionieren, aber ich kann in eXPress++ nicht die Eigenschaften des xbpml objectes manipulieren. Es kann natürlich auch eine Lösung ohne eXPress++ sein.
Hier mein Beispielcode:

function test()
******************************************************************
local cText := "Test ",oDlg,x,oMessage

@ 1,1 DCMULTILINE cText COLOR GRA_CLR_GREEN,GRA_CLR_BLACK FONT "9.Arial Italic" OBJECT oMessage SIZE 50,10

DCREAD GUI TITLE "Test" EXIT SAVE PARENT @oDlg //EVAL {||MLConfigure(oMessage)}

for x := 1 to 20
sleep(100)
oMessage:insert(1,"Line " + var2char(x))
oMessage:configure()
dcqdebug "Line " + var2char(x)
dc_getrefresh(getlist,oMessage)
next x
return .t.

function MLConfiguer(oML)
******************************************************************
oML:border := .f.
oML:editable:=.f.
oML:horizscroll:=.f.
oML:vertscroll:=.f.
oML:configure()
return .t.


Grüsse
Rudolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rudolf,
verstehe ich das richtig? Du möchtest in einem MLE immer mal wieder am Anfang eine Zeile Text hinzufügen?
Bei meinem Server mache ich im Prinzip genau das (nur am Ende des Textes). Ich schreibe sämtliche Aktionen in diverse Logfiles. Die Logfiles werden mir in diversen MLEs angezeigt. Wann immer ich ein Logfile ändere, lese ich es erneut in das MLE und gehe auf das letzte Element -> es sieht so aus, als würde es scrollen (die Laufleisten habe ich nicht angezeigt, man kann aber durch klicken und gedrückt-halten der linken Maustaste im Text trotzdem scrollen).
Wenn Du sowas möchtest, dann sollte das auch ohne Textdatei funktionieren. Ich vermute mal, Du müsstest "nur" den gesamten Text, der in Deinem MLE erscheinen soll, in einer Variablen vorhalten und immer nur diese Variable inhaltlich ändern. Wann immer sie sich ändert, den kompletten Inhalt wieder in das MLE packen und auf das letzte Element hüpfen. Aber in Deinem Fall willst Du ja "falschrum" scrollen, oder? Dann erübrigt sich das Hüpfen natürlich.
Aber eigentlich sollte auch das Schreiben in das MLE funktionieren...

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Martin,
ging ja schnell ! Es wäre mir egal ob der Text unten oder oben dazukommt, es müsste nur nach jeder neuen Meldung upgedatet werden. Leider schaffe ich es nicht in meinem Beispiel den Inhalt des MLE zu verändern bzw. die Scollbalken zu entfernen. Das ist eigentlich mein grösstes Problem. Irgendwie verweigert das MLE Objet das eXpress++ erstellt. Die Variablen sind vorhanden, sonst würde die Funktion crashen. Aber ich sehe keinen Effekt bei Änderungen.
Grüsse
Rudolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rudolf,
ich selber nutze kein eXpress++.
Im Prinzip müßte eigentlich folgendes funktionieren:

Code: Alles auswählen

for x := 1 to 20 
  sleep(100)
  oMessage:SetData( "Line " + var2char(x) + chr( 13 ) + oMessage:GetData() )
next
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Martin,
danke für den Tip, funktioniert aber nur wenn ich die Textvariable ändere, mit setdate() geht es nicht :

@ 1,1 DCMULTILINE cText COLOR GRA_CLR_GREEN,GRA_CLR_BLACK FONT "9.Arial Italic" OBJECT oMessage SIZE 50,10
oMessage:horizscroll:=.f.
oMessage:vertscroll:=.f.
oMessage:configure()
for x := 1 to 20
sleep(100)
cText := "Line " + var2char(x) + chr( 13 ) + cText
dc_getrefresh(getlist,oMessage)
next x

Die Scrollbars habe ich auch wegbekommen, sieht schon besser aus. Hast Du eine Ahnung wie der Zeilenumbruch im MLE aussieht ? das CRLF nimmt es nicht, es müsste irgend eine andere Kombination sein.
Grüsse
Rudolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Rudolf,
Rudolf hat geschrieben:Du eine Ahnung wie der Zeilenumbruch im MLE aussieht ? das CRLF nimmt es nicht, es müsste irgend eine andere Kombination sein.
also bei mir klappt das so! Allerdings nicht nur mit chr(13) sondern mit chr(13)+chr(10) - sorry :!:
Außerdem habe ich bei mir noch das :wordwrap-Attribut auf false gesetzt - sollte in Deinem Fall aber eigentlich egal sein.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Scrollende Textfelder basierend auf einem DCMULTILINE (XbpMLE):

Code: Alles auswählen

@ 1,1   DCMULTILINE cProtocol OBJECT oProtocol NOVERTSCROLL NOHORIZSCROLL DATALINK {||DC_GetRefresh(GetList)}

....


FUNCTION AddInfo(cProtocol,oProtocol,cInfoText)
cProtocol := cProtocol + cInfoText + Chr(13) + Chr(10)
oProtocol:SetData()
oProtocol:SetFirstChar(Len(cProtocol)-50) // gehe zum Ende
RETURN NIL
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Tom,
danke, funktioniert ! Aber was ist definitiv falsch an meinem Code ?
Grüsse
Rudolf
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Rudolf.
Aber was ist definitiv falsch an meinem Code ?
CRLF sind zwei Zeichen (Carriage Return + Line Feed, Chr(13) und Chr(10)). Für die Aktualisierung des MLE muß der Inhalt der Variablen geändert und danach mit SetData() in das Objekt gesetzt werden. SetFirstChar() bewegt das MLE überhaupt erst. Und der DATALINK-Codeblock aktualisiert (nur) zusätzlich die gesamte GetList bei jeder Änderung des MLE, so daß abhängig davon noch andere Elemente gesetzt werden könnten; das also kannst Du weglassen.
Herzlich,
Tom
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Beitrag von Rudolf »

Hallo Tom,
das mit dem CRLF hatte ich schon, aber anscheined ist es das SetFirstChar(). Jedefalls vielen Dank, läuft jetzt super
lg
Rudolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Prima - dann werde ich das jetzt mal schliessen, wenn soweit alles geklärt ist.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Gesperrt