Seite 2 von 3
Re: ComboBoxGadget()
Verfasst: 23.02.2023 18:07
von ccode_new
Ok!
Passiert dieses Verhalten auch bei einem "normalen" Mauszeiger ohne spezielles Icon? (Standard-Mauszeiger)
Ich glaube Windows 11 hat z.Bsp. bestimmte Probleme (Bugs) bei Verwendung bestimmter Maus-Themen.
Re: ComboBoxGadget()
Verfasst: 23.02.2023 23:29
von marco2007
Ich rate einfach mal.
Es dürfte sowas sein, oder?
Code: Alles auswählen
Procedure AlertThread(Parameter)
Repeat
If IsGadget(0)
AddGadgetItem(0, -1, "Zeile "+Str(Date())) :
Delay(300)
EndIf
ForEver
EndProcedure
If OpenWindow(0, 0, 0, 322, 250, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 8, 8, 306, 133)
ComboBoxGadget(1, 20, 200, 100, 20)
AddGadgetItem(1, -1, "add 1")
AddGadgetItem(1, -1, "add 2")
CreateThread(@AlertThread(), 0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Mit 5.72 bleibt die Maus und ab 5.73 verschwindet sie (bei mir) ...
Re: ComboBoxGadget()
Verfasst: 23.02.2023 23:58
von ccode_new
Hi marco2007,
und jetzt kommt der "Standard-Mauszeiger" ins Spiel!
Code: Alles auswählen
Procedure AlertThread(Parameter)
Repeat
If IsGadget(0)
AddGadgetItem(0, -1, "Zeile "+Str(Date()))
SendMessage_(GadgetID(1), #WM_SETCURSOR, 0, 0)
Delay(300)
EndIf
ForEver
EndProcedure
If OpenWindow(0, 0, 0, 322, 250, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 8, 8, 306, 133)
ComboBoxGadget(1, 20, 200, 100, 20)
AddGadgetItem(1, -1, "add 1")
AddGadgetItem(1, -1, "add 2")
CreateThread(@AlertThread(), 0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Komisch oder?
Re: ComboBoxGadget()
Verfasst: 24.02.2023 00:06
von marco2007
Top, ccode_new!

Re: ComboBoxGadget()
Verfasst: 24.02.2023 00:38
von ccode_new
Danke!
Das Problem liegt auch nicht an der ComboBox, sondern an der Eventabarbeitung (simulative/automatische Texteingabe - Key_Down/UP-Event) des Edit-Controls (EditorGadget).
Das hier geht ja auch:
Code: Alles auswählen
Procedure AlertThread(Parameter)
Repeat
If IsGadget(0)
AddGadgetItem(0, -1, "Zeile "+Str(Date()))
Delay(300)
EndIf
ForEver
EndProcedure
If OpenWindow(0, 0, 0, 322, 250, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(0, 8, 8, 306, 133)
ComboBoxGadget(1, 20, 200, 100, 20)
AddGadgetItem(1, -1, "add 1")
AddGadgetItem(1, -1, "add 2")
CreateThread(@AlertThread(), 0)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: ComboBoxGadget()
Verfasst: 24.02.2023 08:39
von RAaBe
Hallo,
am Mauszeiger liegt es nicht (getestet mit normalem Mauszeiger).
In diesem Abschnitt kommt das 'ADDGADGETITEM' vor:
Code: Alles auswählen
If ConnectionID
SEvent = NetworkClientEvent(ConnectionID)
If SEvent
Select SEvent
Case #PB_NetworkEvent_Data
ReceiveNetworkData(ConnectionID, *puffer, 1)
byte = PeekB(*puffer)
If byte = #CR
If GetGadgetState(#button_ausgabe_autospeichern) = 1 And einlesemodus.b = 1
If autospeichern_komplett = 1
ds.c = ds.c + 1
ds$(ds.c) = FormatDate("%yyyy-%mm-%dd", Date()) + " " + FormatDate("%hh:%ii:%ss", Date()) + " " + text.s
Else
If FindString(text.s, "[!") Or (Right(text.s, 2) <> "|0" And Right(text_alt.s, 3) <> "INF") And (Right(text.s, 3) <> "INF" And Right(text_alt.s, 2) <> "|0") And (Right(text.s, 3) <> "INF" And Right(text_alt.s, 3) <> "INF")
;Debug text.s +" / " +text_alt.s
ds.c = ds.c + 1
ds$(ds.c) = FormatDate("%yyyy-%mm-%dd", Date()) + " " + FormatDate("%hh:%ii:%ss", Date()) + " " + text.s
text_alt.s = text.s
EndIf
EndIf
EndIf
If GetMenuItemState(#MainMenu, #menu_datum) = 1 And GetMenuItemState(#MainMenu, #menu_uhrzeit) = 0
text2.s = FormatDate("%dd.%mm.%yyyy", Date()) + " " + text.s
ElseIf GetMenuItemState(#MainMenu, #menu_datum) = 0 And GetMenuItemState(#MainMenu, #menu_uhrzeit) = 1
text2.s = FormatDate("%hh:%ii:%ss", Date()) + " " + text.s
ElseIf GetMenuItemState(#MainMenu, #menu_datum) = 1 And GetMenuItemState(#MainMenu, #menu_uhrzeit) = 1
text2.s = FormatDate("%dd.%mm.%yyyy", Date()) + " " + FormatDate("%hh:%ii:%ss", Date()) + " " + text.s
Else
text2.s = text.s
EndIf
If Len (text2.s) > 62
AddGadgetItem(#ausgabe, -1, Left(text2.s, 60) + "...")
Else
AddGadgetItem(#ausgabe, -1, text2.s)
EndIf
SendMessage_(GadgetID(#ausgabe), #EM_SCROLL, #SB_LINEDOWN, 0)
progressbar_ausgabe()
If FindString(text.s, "[!")
anzahl_uz = anzahl_uz + CountString(text.s, "[!")
While FindString(text.s, "[!")
anfang_uz = FindString(text.s, "[!")
text_uz$ = Mid(text.s, anfang_uz, 6)
text.s = ReplaceString(text.s, text_uz$, "")
Wend
StatusBarText(0, 1, "UZ: " + Str(anzahl_uz), #PB_StatusBar_Center)
EndIf
If Mid(text.s, 3, 1) = "|" And Mid(text.s, 6, 1) = "|"
id$ = Left(text.s, 2)
id2$ = Mid(text.s, 4, 2)
If id2$ <> "99"
quit = 1
Else
text.s = ""
EndIf
Else
text.s = ""
anzahl_uz + 1
StatusBarText(0, 1, "UZ: " + Str(anzahl_uz), #PB_StatusBar_Center)
EndIf
Else
If einlesemodus.b = 1
If byte <> #LF
If byte = 1
text.s = text.s + "[!SOH]"
ElseIf byte = 4
text.s = text.s + "[!EOT]"
ElseIf byte = 6
text.s = text.s + "[!ACK]"
ElseIf byte = 21
text.s = text.s + "[!NAK]"
ElseIf byte = 24
text.s = text.s + "[!CAN]"
ElseIf byte = 123
text.s = text.s + "[!FWU]"
ElseIf byte >= 32 And byte <= 126
text.s = text.s + Chr(Byte)
Else
text.s = text.s + "[!" + RSet(Str(Byte), 3, "0") + "]"
EndIf
EndIf
ElseIf einlesemodus.b = 4
If byte <> #LF
text.s = text.s + Chr(Byte)
EndIf
EndIf
EndIf
EndSelect
EndIf
EndIf
EndIf
Selbst wenn ich die einzige API-Zeile auskommentiere, ändert sich nichts!
Reinhard
Re: ComboBoxGadget()
Verfasst: 24.02.2023 10:25
von ccode_new
Es wurden anscheinend irgendwelche Dinge in Verbindung mit dem EditorGadget verändert.
In den Change-Auflistungen stehen auch ab Version 5.73 Änderungen im Zusammenhang mit den EditorGadget.
Da waren bestimmt die jetzt ersichtlichen negativen Seiteneffekte nicht bekannt.
Re: ComboBoxGadget()
Verfasst: 24.02.2023 12:59
von HeX0R
Du solltest das COM Handling in einen Thread auslagern!
Da Du immer nur EIN Byte aus der Queue zupfst (wieso machst Du das überhaupt so?), und ausserdem jede Menge neuer Events in dieser Prozedur verursachst, kommt WindowEvent() vermutlich gar nicht mehr schnell genug hinterher, um alle Events abzuarbeiten.
Dann kommt es zum Stau und merkwürdigen Effekten.
Setze doch mal zum Test ein
ans Ende Deines Codeauszugs, und Du wirst sehen, dass der Mauszeiger wieder angezeigt wird (zumindest gehe ich davon aus, ich kenne ja nur einen Bruchteil Deines Codes).
Aber selbst wenn nicht, ein Auslagern in einen Thread hilft garantiert!
Re: ComboBoxGadget()
Verfasst: 24.02.2023 14:25
von RAaBe
Hallo,
das Einfügen von 'While WindowEvent() : Wend' hat leider nicht gebracht.
Das Einlesen von einzelnen Byte's rüht daher, da ich auch das #CR auswerten wollte.
Die Beispiele oben werde ich mal testen...
Reinhard
Re: ComboBoxGadget()
Verfasst: 24.02.2023 18:22
von HeX0R
RAaBe hat geschrieben: 24.02.2023 14:25
Das Einlesen von einzelnen Byte's rüht daher, da ich auch das #CR auswerten wollte.
Ähm... der Zusammenhang erschliesst sich mir jetzt nicht wirklich.
Aber egal, wie gesagt, das ganze COM Zeug bremst das Windowhandling nur aus, ich habe noch nie(!) sowas ohne Threads umgesetzt.
Gleiches gilt für Netzwerkgeschichten.