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

Code: Alles auswählen

While WindowEvent() : Wend
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.