Scrollende Textfelder
Moderator: Moderatoren
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Scrollende Textfelder
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
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
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
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
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
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.
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
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
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
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Rudolf,
ich selber nutze kein eXpress++.
Im Prinzip müßte eigentlich folgendes funktionieren:
Viele Grüße,
Martin
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
Martin
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.
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
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
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
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Rudolf,
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
also bei mir klappt das so! Allerdings nicht nur mit chr(13) sondern mit chr(13)+chr(10) - sorryRudolf hat geschrieben:Du eine Ahnung wie der Zeilenumbruch im MLE aussieht ? das CRLF nimmt es nicht, es müsste irgend eine andere Kombination sein.
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
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.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
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
Tom
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Hallo Tom,
danke, funktioniert ! Aber was ist definitiv falsch an meinem Code ?
Grüsse
Rudolf
danke, funktioniert ! Aber was ist definitiv falsch an meinem Code ?
Grüsse
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Hallo, Rudolf.
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.Aber was ist definitiv falsch an meinem Code ?
Herzlich,
Tom
Tom
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Hallo Tom,
das mit dem CRLF hatte ich schon, aber anscheined ist es das SetFirstChar(). Jedefalls vielen Dank, läuft jetzt super
lg
Rudolf
das mit dem CRLF hatte ich schon, aber anscheined ist es das SetFirstChar(). Jedefalls vielen Dank, läuft jetzt super
lg
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 115 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Prima - dann werde ich das jetzt mal schliessen, wenn soweit alles geklärt ist.
Viele Grüße,
Martin
Viele Grüße,
Martin
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.