Seite 2 von 4

Re: WaitWindowEvent erhält nicht ausgelöste Events

Verfasst: 02.03.2010 13:43
von ts-soft

Code: Alles auswählen

    Case #PB_Event_Gadget
      Select EventWindow
? so auf dem ersten blick würde dort ja die Gadgets selektieren!

Re: WaitWindowEvent erhält nicht ausgelöste Events

Verfasst: 02.03.2010 14:02
von Little John
alDo hat geschrieben:Mein Ziel wäre es nun das kleine Auswahlfenster sticky zu machen und so den Zugriff auf das Grosse zu unterbinden
In Ergänzung zu den Antworten die schon gegeben wurden ist hier ein fertiges Beispiel für ein modales Fenster.

Gruß, Little John

Re: WaitWindowEvent erhält nicht ausgelöste Events

Verfasst: 02.03.2010 14:27
von alDo
@ ts-soft Bringt allerdings genausowenig trotzdem Danke

Übrigens kann einer von euch damit etwas anfangen?
x<
Noch so ein Problemchen in meinem Prog. Dazu noch etwas mehr Info: Ich fülle ein Shared StringArray in einer Prozedur auf. In einer anderen Prozedur gebe ich die Arrays auf StringGadgets aus. Sonst fasse ich die Arrays nicht an. Normalerweise sind in dem Array Strings in folgender Form gespeichert: "0F"|"BA"|"BE"|"08". Also immer zwei Hex-Werte. Wenn ich jetzt auf den Button klicke, der für die Anzeige verantwotlich ist, werden diese auch korrekt angezeigt. Bei erneutem klicken erhalte ich in manchen Stringgadgets dies hier:x<. Ich verlange jetzt von niemandem hier, dass er seine Glaskugel auspackt und eine Lösung parat hat. Kann es sein , dass der String x< auf Probleme mit der Speicherverwaltung hinweist?

@ John danke, aber das mit dem Fenster funktioniert so ganz gut

Re: WaitWindowEvent erhält nicht ausgelöste Events

Verfasst: 02.03.2010 14:37
von ts-soft
Steuerzeichen bis $1F mußte ausfiltern! Sind nicht darstellbar. $8 z.B. ist ein BackSpace.

Re: WaitWindowEvent erhält nicht ausgelöste Events

Verfasst: 02.03.2010 14:45
von alDo
Ich will ja gar keine Steuerzeichen o.ä. ausgeben. Nur Hex-Werte. Obwohl ich das Array nur fülle und ausgebe werden die Werte im Array verändert. Auch wenn ich in dem Main Programm versuche diese auszugeben sind einige Werte schon so merkwürdig. Aber direkt in der Proc in der ich das Array initialisiere ist alles wie gewollt...

Re: WaitWindowEvent erhält nicht ausgelöste Events

Verfasst: 02.03.2010 15:18
von ts-soft
Dann benutze mal den Datentyp .a statt .b
Bytes in PB gehen von -128 - +127

Re: WaitWindowEvent erhält nicht ausgelöste Events

Verfasst: 02.03.2010 15:22
von alDo
Naja die Arrays sind Strings und beim Empfang der Daten über die serielle Schnittstelle arbeite ich schon mit .a :wink:

Re: WaitWindowEvent erhält nicht ausgelöste Events

Verfasst: 02.03.2010 15:37
von ts-soft
Hat es was mit UTF-8 zu tun?

Aber jetzt stochere ich immer tiefer im dunkeln, solange Du keine Taschenlampe
bringst, werde ich Dir nicht weiterhelfen können.

Re: WaitWindowEvent erhält nicht ausgelöste Events

Verfasst: 02.03.2010 19:04
von HeX0R
Da du offensichtlich eh alle möglichen Werte erhältst,
wieso speicherst du das Empfangene nicht gleich in einem MemoryBlock?

Diese Bytes bei der Ausgabe in Hex-Strings umzuändern ist ja dann auch nur ein Klacks
und du schubst nicht soviele Strings hin und her.
alDo hat geschrieben:dass der String x< auf Probleme mit der Speicherverwaltung hinweist?
Das deutet auf Probleme mit deiner Stringverwaltung hin.

Re: WaitWindowEvent erhält nicht ausgelöste Events

Verfasst: 03.03.2010 11:33
von alDo
Was genau meinst du mit MemoryBlock? Habe schon ein Array welches die korrekten Daten enthält. Nur bei der Verwendung dieses Arrays ausserhalb der Initialisierungsprozedur ändern sich einige Werte. Also meinst du ich sollte im Programm erst bei der Ausgabe die Werte in Hex-Strings umwandeln?

@ first Topic
Der Grund dafür dass meine 'Event' Variable den Wert für die Konstante #PB_Event_Gadget enthält ist die Funktion SetGadgetText in meinem Timeout. Wenn ich diese auskommentiere enthält die Variable nur die Null (wenn Maus unbewegt) wie gewöhnlich. Jetzt frage ich mich wo ich diesen Aufruf positionieren soll, da ich ständig das StringGadget aktualisieren muss. Zeitgesteuert, denke ich, ist nachteilhaft, da ich im Millisekunden Bereich arbeite und ich gelesen habe, dass die Timerfunktionen recht ungenau sind. Vielleicht habt ihr ein paar Ideen wie ich es realisieren kann.
Meine aktuelle Eventschleife:

Code: Alles auswählen

createSelectWindow()
StartTime = ElapsedMilliseconds()
Repeat                                                         ; eventloop
  Event = WaitWindowEvent(10)
  EventWindow = EventWindow()
  EventGadget = EventGadget()
  Debug Event
  Select Event
    
    Case #Null                                                 ; timeout
      
      If WindowMain
        Result = AvailableSerialPortInput(SerPort)
        SetGadgetText(#CAN_MESSAGERECBYTESString,Str(Result))  ; number of received bytes
        If Result > 7                                          ; filtering garbage
          receiveCANMessage()
        EndIf
      Else
        For n=2 To 100
          If ReadFile(0,"COM"+Str(n)+":")                ; try to read the comport n
            AddGadgetItem(#COMBO_BOX,-1,"COM"+Str(n))    ; add available COM to combobox
            CloseFile(0)                                 ; close comport
          EndIf
        Next
        SetGadgetState(#COMBO_BOX,0)
      EndIf
      
    Case #PB_Event_Gadget
      Select EventWindow
        
        Case #WINDOW_MAIN
          handleButtons(EventGadget)
        
        Case #WINDOW_SELECT
          If EventGadget = #SELECTButton
            COMPORT$ = GetGadgetText(#COMBO_BOX)
            CloseWindow(#WINDOW_SELECT)
            initCAN(COMPORT$)
            createMainWindow()
            WindowMain   = #True
          EndIf
          
      EndSelect
      
    Case #PB_Event_CloseWindow
      If EventWindow = #WINDOW_MAIN
        closeCAN(SendBuffer())
        CloseSerialPort(SerPort)
      EndIf
      EXIT = 1
      
  EndSelect
  
Until EXIT
DisableExplicit
End