Beim Editorgadget Zeile und Cursorstellung ermitteln.
Beim Editorgadget Zeile und Cursorstellung ermitteln.
Hallo, guten Tag.
Ich lade mit RS232 Text in einem Editogadget.
Dieser hat Zeilenumbrüche.
Wenn ich jetzt selber Text eingebe, ist der Eingabecursor immer in der Zeile 1.
Den Text den ich in der 1. Zeile eingebe erscheint dann am Ende des geladenen Textes.
Wie kann man die 1.Zeile unsichtbar machen?
danke.
Gruss
Ich lade mit RS232 Text in einem Editogadget.
Dieser hat Zeilenumbrüche.
Wenn ich jetzt selber Text eingebe, ist der Eingabecursor immer in der Zeile 1.
Den Text den ich in der 1. Zeile eingebe erscheint dann am Ende des geladenen Textes.
Wie kann man die 1.Zeile unsichtbar machen?
danke.
Gruss
Re: Beim Editorgadget Zeile und Cursorstellung ermitteln.
Ich verstehe deine Frage nicht genau. Möchtest du die aktuelle Cursorposition ermitteln oder die Cursorposition ans Ende setzen?
Was meinst du mit der ersten Zeile? Kannst du einen Screenshot posten, damit man sehen kann, was du genau meinst?
Was meinst du mit der ersten Zeile? Kannst du einen Screenshot posten, damit man sehen kann, was du genau meinst?
Re: Beim Editorgadget Zeile und Cursorstellung ermitteln.
Hallo, guten Tag.
Wenn ich Text mit RS232 einlese im Editfenster wird der Cursor im Editfenster nicht weiter bewegt wie bei einer manuellen Texteingabe über die Tastatur. Wenn ich jetzt Text eingebe über die Tastatur bleibt der Cursor in der 1. Zeile ganz links stehen dann wird der Text dort geschrieben , wird aber gleichzeitig am Textende vom eingelesenen Text über RS232 drangehängt. Danach wird der Text in der ersten Zeile komplett gelöscht und der Cusror steht wieder links ober und wartet auf die nächste Eingabe über die Tastatur.
Aber zwischendurch wird der neue RS232 richtig am Textende drangehängt.
Ich möchte die Textzeile ermitteln und die Position um meine Tastatureingabe dort hinzulegen.
Danke.
Gruss
Wenn ich Text mit RS232 einlese im Editfenster wird der Cursor im Editfenster nicht weiter bewegt wie bei einer manuellen Texteingabe über die Tastatur. Wenn ich jetzt Text eingebe über die Tastatur bleibt der Cursor in der 1. Zeile ganz links stehen dann wird der Text dort geschrieben , wird aber gleichzeitig am Textende vom eingelesenen Text über RS232 drangehängt. Danach wird der Text in der ersten Zeile komplett gelöscht und der Cusror steht wieder links ober und wartet auf die nächste Eingabe über die Tastatur.
Aber zwischendurch wird der neue RS232 richtig am Textende drangehängt.
Ich möchte die Textzeile ermitteln und die Position um meine Tastatureingabe dort hinzulegen.
Danke.
Gruss
Re: Beim Editorgadget Zeile und Cursorstellung ermitteln.
Du meinst also, es wird ständig neue Texte hinzugefügt und du willst verhindern, dass sich die aktuelle von dir gesetzte Cursorposition aufgrund der Hinzufügung ändert.
Mal angenommen die Cursorposition ist derzeit auf 5 und es wird ein Text hinzugefügt. Aufgrund der Hinzufügung befindet sich dein Cursor aber nun am Ende. Du willst den Cursor wieder dorthin haben, wo er war. Meinst du das?
Mal angenommen die Cursorposition ist derzeit auf 5 und es wird ein Text hinzugefügt. Aufgrund der Hinzufügung befindet sich dein Cursor aber nun am Ende. Du willst den Cursor wieder dorthin haben, wo er war. Meinst du das?
Code: Alles auswählen
EnableExplicit
Define Temp_EGCursorX
Define Temp_EGCursorY
Procedure EditorGadgetCursorX(Gadget.i)
Protected GadgetID.i = GadgetID(Gadget), Range.CHARRANGE
SendMessage_(GadgetID, #EM_EXGETSEL, 0, @Range)
ProcedureReturn (Range\cpMax - (SendMessage_(GadgetID, #EM_LINEINDEX, SendMessage_(GadgetID, #EM_EXLINEFROMCHAR, 0, Range\cpMin), 0)) + 1)
EndProcedure
Procedure EditorGadgetCursorY(Gadget.i)
Protected GadgetID.i = GadgetID(Gadget), Range.CHARRANGE
SendMessage_(GadgetID, #EM_EXGETSEL, 0, @Range)
ProcedureReturn SendMessage_(GadgetID, #EM_EXLINEFROMCHAR, 0, Range\cpMin) + 1
EndProcedure
Procedure EditorGadgetLocate(Gadget,x,y)
Protected CharIdx
Protected LLength
Protected Range.CHARRANGE
CharIdx = SendMessage_(Gadget, #EM_LINEINDEX, y-1, 0)
LLength = SendMessage_(Gadget, #EM_LINELENGTH, CharIdx, 0)
If LLength >= x-1
CharIdx + x-1
EndIf
Range.CHARRANGE
Range\cpMin = CharIdx
Range\cpMax = CharIdx
SendMessage_(Gadget, #EM_EXSETSEL, 0, Range)
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(1, 0, 0, WindowWidth(0), WindowHeight(0), 0)
SetGadgetText(1, "abc def ghi jkl mno pqr stu vwx yz")
AddWindowTimer(0, 123, 1000)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Timer
Select EventTimer()
Case 123
Temp_EGCursorX = EditorGadgetCursorX(1)
Temp_EGCursorY = EditorGadgetCursorY(1)
AddGadgetItem(1, -1, "abc def ghi jkl mno pqr stu vwx yz")
EditorGadgetLocate(GadgetID(1), Temp_EGCursorX, Temp_EGCursorY)
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIfRe: Beim Editorgadget Zeile und Cursorstellung ermitteln.
Jup danke.
Der Cursor bleibt dauernd in der 1. Zeile ganz links.
Er schreibt den Text dort hin den ich über die Tastatur eingebe und der wird dann dahin übertragen wo die letzten
Eingabe von der seriellen Schnittstelle war. Das find ich so komisch. Ich möchte den Cursor dort haben wo der letzte
Buchstabe von der seriellen Schnittstelle ist.
Danke.
Gruss
Der Cursor bleibt dauernd in der 1. Zeile ganz links.
Er schreibt den Text dort hin den ich über die Tastatur eingebe und der wird dann dahin übertragen wo die letzten
Eingabe von der seriellen Schnittstelle war. Das find ich so komisch. Ich möchte den Cursor dort haben wo der letzte
Buchstabe von der seriellen Schnittstelle ist.
Danke.
Gruss
Code: Alles auswählen
Global text_e.s,text_s.s,files.s, files1.s,result.s
Global port.l,s_byte.c,r_byte.c
Declare Datei_senden()
Enumeration
#Window_0
#b_seriell_an
#b_seriell_aus
#b_cls_edit
#b_datei
#b_senden
#str_seriell
#str_datei
#Editor_0
EndEnumeration
InitKeyboard()
OpenWindow(#Window_0, 400, 150, 550,570, "KIM", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
ButtonGadget( #b_seriell_an, 10,10, 80, 25, "Seriell ein")
ButtonGadget(#b_seriell_aus, 10,40, 80, 25, "Seriell aus")
ButtonGadget( #b_datei, 10,70, 80, 25, "Datei laden")
ButtonGadget( #b_senden, 10,100, 80, 25, "Datei senden")
ButtonGadget( #b_cls_edit, 10,170, 80, 25, "Cls Edit")
StringGadget(#str_seriell, 120, 10, 150, 22, "")
StringGadget(#str_datei, 120, 70, 150, 22, "")
EditorGadget(#Editor_0, 120, 170, 400,350,#PB_Editor_WordWrap)
port=-1
Repeat
Event = WaitWindowEvent(2)
ExamineKeyboard()
result=KeyboardInkey()
If result
s_byte=Asc(result)
If s_byte=13
s_vyte=10
EndIf
WriteSerialPortData(port, @s_byte, 1)
EndIf
Select Event
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
If EventGadget = #b_seriell_an
If port=-1
port=OpenSerialPort(#PB_Any, "COM4", 1200, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024,1024)
If port
text_s=""
text_s + "...geöffnet "+Str(port)
SetGadgetText(#str_seriell, text_s)
Else
text_s=""
text_s + "...nichts"
SetGadgetText(#str_seriell, text_s)
port=-1
EndIf
EndIf
EndIf
If EventGadget = #b_seriell_aus
If port > 0
CloseSerialPort(port)
text_s=""
text_s + "...geschlossen"
SetGadgetText(#str_seriell, text_s)
port=-1
EndIf
EndIf
If EventGadget = #b_cls_edit
text_e=""
SetGadgetText(#Editor_0, text_e)
EndIf
If EventGadget = #b_datei
Pattern$ = "Alle Dateien (*.*)|*.*"
Pattern = 0
files = SaveFileRequester("Dateiname zum Speichern eingeben", StandardFile$, Pattern$, Pattern)
If files=""
Goto weiter2
EndIf
files1=GetFilePart(files)
SetGadgetText(#str_datei, files1)
weiter2:
EndIf
If EventGadget = #b_senden
Datei_senden()
EndIf
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
If port > 0
While AvailableSerialPortInput(port)
ReadSerialPortData(port, @r_byte, 1)
text_e + Chr(r_byte)
SetGadgetText(#Editor_0, text_e)
Wend
EndIf
ForEver
Procedure Datei_senden()
If Len(files) < 4
Goto weiter4
EndIf
If ReadFile(0, files)
While Eof(0) = 0
s_byte=ReadByte(0)
WriteSerialPortData(port, @s_byte, 1)
Delay(10)
Wend
CloseFile(0)
EndIf
weiter4:
files1=""
files=""
SetGadgetText(#str_datei,"...")
EndProcedure
- CodeCommander
- Beiträge: 213
- Registriert: 02.03.2014 16:06
Ich kann dein Code zwar weder testen noch verbessern aber von mir nur ein paar Tipps weil ich dein Code Design nicht gut finde...
1. Du benutzt kein EnableExplicit.
2. Du definierst nicht alle Variablen.
3. Du definierst globale Variablen obwol es unnötig ist. Lokale Variablen reichen da aus. Variablen in Prozeduren kannst du auch übergeben.
4. Keine Einheitlichkeit. Mal benutzt du Leerzeichen nach dem Komma, nach dem Gleichzeichen und mal nicht.
5. Benennung deiner Variablen sind auch unterschiedlich. Einheitlichkeit der Groß und Kleinschreibung ist nicht vorhanden. Mal klein und mal groß.
6. Du benutzt Goto und springst quer durch den Code. Wie kannst du da den Überblick behalten?
7. WaitWindowEvent(2) ist auch unnötig. Wie bist du auf die 2 gekommen?
8. Du benutzt ExamineKeyboard() ohne Screen-Window?
9. Deine GUI-Struktur hat auch kein einheitliches System, wenn ich die Größen und Positionen anschaue.
10. Man kann das Fenster vergrößern ohne Gadgetgrößenanpassung?
11. Korrektes Einrücken ist auch nicht vorhanden.
12. Warum ein Dalay beim lesen der Datei? Willst du das lesen absichtlich verlangsamen?
Wie soll hier einer deinen Code testen? Man müsste viel Zeit haben und dein komplettes Programm nachprogrammieren aber wer hat schon die Zeit? Schau mal den Code von rsbasic an. Dieser sollte dir mehr helfen als dein Code uns.
1. Du benutzt kein EnableExplicit.
2. Du definierst nicht alle Variablen.
3. Du definierst globale Variablen obwol es unnötig ist. Lokale Variablen reichen da aus. Variablen in Prozeduren kannst du auch übergeben.
4. Keine Einheitlichkeit. Mal benutzt du Leerzeichen nach dem Komma, nach dem Gleichzeichen und mal nicht.
5. Benennung deiner Variablen sind auch unterschiedlich. Einheitlichkeit der Groß und Kleinschreibung ist nicht vorhanden. Mal klein und mal groß.
6. Du benutzt Goto und springst quer durch den Code. Wie kannst du da den Überblick behalten?
7. WaitWindowEvent(2) ist auch unnötig. Wie bist du auf die 2 gekommen?
8. Du benutzt ExamineKeyboard() ohne Screen-Window?
9. Deine GUI-Struktur hat auch kein einheitliches System, wenn ich die Größen und Positionen anschaue.
10. Man kann das Fenster vergrößern ohne Gadgetgrößenanpassung?
11. Korrektes Einrücken ist auch nicht vorhanden.
12. Warum ein Dalay beim lesen der Datei? Willst du das lesen absichtlich verlangsamen?
Wie soll hier einer deinen Code testen? Man müsste viel Zeit haben und dein komplettes Programm nachprogrammieren aber wer hat schon die Zeit? Schau mal den Code von rsbasic an. Dieser sollte dir mehr helfen als dein Code uns.
Zuletzt geändert von CodeCommander am 18.01.2015 14:22, insgesamt 1-mal geändert.
~ DELETE ~
Re: Beim Editorgadget Zeile und Cursorstellung ermitteln.
Was die Frage nach seiner PB Version aufwirft. Denn das geht seit mindestens 4.x nicht mehr.CodeCommander hat geschrieben:8. Du benutzt ExamineKeyboard() ohne Screen-Window?
Code: Alles auswählen
InitKeyboard()
ExamineKeyboard()[23:07:40] [ERROR] Line: 2
[23:07:40] [ERROR] OpenScreen() Or OpenWindowedScreen() must be called before using any Keyboard commands.
[23:08:08] The Program was killed.
Signatur und so
Re: Beim Editorgadget Zeile und Cursorstellung ermitteln.
EM_SETSEL
Selektiert einen Text von 'Start' bis 'Ende'. Sind beide Werte gleich, wird nur der
Cursor verschoben, ohne Selektion.
Der Wert -1 steht für das Ende, also wird mitder Cursor ganz ans Ende verschoben.
Code: Alles auswählen
SendMessage_(GadgetID(editor),#EM_SETSEL,Start,Ende)Cursor verschoben, ohne Selektion.
Der Wert -1 steht für das Ende, also wird mit
Code: Alles auswählen
SendMessage_(GadgetID(editor),#EM_SETSEL,-1,-1)cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- CodeCommander
- Beiträge: 213
- Registriert: 02.03.2014 16:06
Derren, ich glaube, er hat mal wieder aus Faulheit Teile aus seinem Spaghetti Code copy and pasted und ist der Meinung wir können seinen Code umzaubern und hellsehen.
Im ernst Danilo?
Er kann doch damit eh nichts anfangen sonst hätte er schon längst die Lösung aus rsbasics Code gehabt. Wie ich sehe verwendet er auch #EM_SETSEL.
Glaub mir er wird gleich wieder fragen und Codeteile, mit denen man nichts anfangen kann, hier posten!
Im ernst Danilo?
Glaub mir er wird gleich wieder fragen und Codeteile, mit denen man nichts anfangen kann, hier posten!
Zuletzt geändert von CodeCommander am 18.01.2015 14:22, insgesamt 1-mal geändert.
~ DELETE ~
Re: Beim Editorgadget Zeile und Cursorstellung ermitteln.
Jup, danke.
Jetzt funktioniert es als Listbox.
Ich habe die Version 5.22.
Unten die Abfrage funktioniert klasse.
Gruss
----------------------------
InitKeyboard()
................
................
ExamineKeyboard()
result=KeyboardInkey()
-----------------------------
Jetzt funktioniert es als Listbox.
Ich habe die Version 5.22.
Unten die Abfrage funktioniert klasse.
Gruss
----------------------------
InitKeyboard()
................
................
ExamineKeyboard()
result=KeyboardInkey()
-----------------------------

