ComboBox-Gadget und #CBN_SELCHANGE

Anfängerfragen zum Programmieren mit PureBasic.
SaschaDE
Beiträge: 6
Registriert: 01.12.2010 11:16

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von SaschaDE »

Noch ne dummer Frage :freak: :

Ich suche nun eine Möglichkeit, dass wenn in dem StringGadget etwas eingegeben wurde (in diesem Fall ein 4-Zeichen-Befehl an den Mikrocontroller) und der Nutzer Return drückt, dies als Event gemeldet wird. Im Gadget.pb Beispiel wird dazu "#PB_EventType_ReturnKey" benutzt ... scheinbar gibt es das nicht mehr in den neuen Versionen ... was wäre eine Alternative ?

Gibt es irgendwo eine Übersicht der möglichen EventType die es für ein Gadget gibt ? Dann könnte ich selber probieren und muss nicht so viel fragen.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von Kiffi »

Du erstellst einen Shortcut. Dieser löst ein Menu-Event
aus. Darauf reagierst Du dann:

Code: Alles auswählen

Enumeration ; Windows
  #myWindow
EndEnumeration
Enumeration ; Gadgets
  #myStringGadget_MitReturn
  #myStringGadget_OhneReturn
EndEnumeration
Enumeration ; Menu-/Toolbaritems
  #myWindowShortcutReturn
EndEnumeration

OpenWindow(#myWindow, #PB_Ignore, #PB_Ignore, 320, 100, "")

StringGadget(#myStringGadget_MitReturn,  10, 10, 300, 20, "Return funktioniert nur, wenn hier der Focus liegt")
StringGadget(#myStringGadget_OhneReturn, 10, 50, 300, 20, "Hier wird Return ignoriert (wg. GetActiveGadget)")

AddKeyboardShortcut(#myWindow, #PB_Shortcut_Return, #myWindowShortcutReturn)

Repeat
  
  Select WaitWindowEvent()
      
    Case #PB_Event_Menu
      Select EventMenu()
        Case #myWindowShortcutReturn
          If GetActiveGadget()=#myStringGadget_MitReturn
            MessageRequester("", GetGadgetText(#myStringGadget_MitReturn))
          EndIf
      EndSelect
      
    Case #PB_Event_CloseWindow
      Quit=#True
      
  EndSelect
  
Until Quit = #True
SaschaDE hat geschrieben:Gibt es irgendwo eine Übersicht der möglichen EventType die es für ein Gadget gibt ? Dann könnte ich selber probieren und muss nicht so viel fragen.
ja, steht alles in der PB-Hilfe drin. ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von HeX0R »

SaschaDE hat geschrieben: Nachdem die Combobox mit den vorhandenen Ports gefüllt ist (hoffe mal das man das so machen kann) ...
Klar kann man das so machen, sollte man aber nicht
(Du bekommst nicht die vorhandenen Ports, sondern die momentan nicht belegten).

Ausserdem werden bei USB/Seriell-Adaptern auch gerne mal COM-Ports jenseits der 20 benutzt.

Falls du dann mal irgendwann eine Kaufversion von PB hast,
kannst du es hiermit probieren.
SaschaDE
Beiträge: 6
Registriert: 01.12.2010 11:16

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von SaschaDE »

Vielen Dank Kiffi und Hex0R für die Hilfe ... ich hoffe ich werde die Kaufversion möglichst bald bekommen. Muss den Chef noch ein wenig weichklopfen :praise: .

Bis dahin habe ich folgendes Problem:

Ich kann nun über das StringGadget wie von Kiffi beschrieben bei Returndruck ein Event bekommen und dann den Inhalt aus dem StringGadget in einem String haben. Den muss ich nun weiter verarbeiten und über RS232 senden.

Das Format der Befehle ist immer Befehl+Leerzeichen+Zahl. Der Befehl kann aus Buchstaben und Zahlen bestehen (z.B. SY, S1, DK usw.). Die Zahl ist immer dezimal und maximal 16 Bit ... der Nutzer würde also zum Beispiel "SY 2010" eingeben, was in dem Fall das Jahr der Herstellung wäre. Über RS 232 soll dann gesendet werden:

SY 2010 ->
0x53 (ASCII für S)
0x59 (ASCII für Y)
0x07 (Highbyte vom dez. 2010)
0xDA (Lowbyte von dez. 2010)

Ich brauche nun also eine Möglichkeit, aus dem String "SY 2010" eine Möglichkeit, die ASCIIs einzeln zu bekommen, dann das Leerzeichen wegmachen, dann aus der ASCII-Zahl eine echte Zahl machen. Erster Schritt wäre , einen Zugang auf einzelne Zeichen im String zu haben.

Bitte nicht falsch verstehen, ich suche keine fertige Lösung (ich wills ja lernen), sondern eher einen Tip wo in der Hilfe ich entsprechende Hinweise finde. Die Dokumentation zu Purebasic scheint mir recht mager, aber wahrscheinlich hab ich noch nicht alles gefunden was es an Dokumentation gibt.

Edit:
Ahhh ... hier hab ich was gefunden:
http://www.purebasic.com/german/documentation/string/

Damit komm ich bestimmt schon ein Stück weiter.
andi256
Beiträge: 100
Registriert: 06.11.2004 11:23
Computerausstattung: PB 5.30 (x64) Win7
Wohnort: Österreich

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von andi256 »

Code: Alles auswählen

string$ = "SY 2010"

Debug  string$
string$ = RemoveString(string$," ")  ; Leerzeichen wegmachen

Debug  string$

For i = 1 To Len(String$)
  zeichen$ = Mid(string$,i,1)
  Debug "--------"
  Debug "Einzelzeichen       : " + zeichen$
  Debug "Einzelzeichen in acs: " + Str(Asc(zeichen$))
  Debug "Einzelzeichen in hex: " + Hex(Asc(zeichen$))
  Debug "--------"
Next i

jahr$ = (Mid(string$,3,4))

Debug "Jahr:"        + jahr$
jahrhex$ = Hex(Val(jahr$))
Debug "Jahr in hex: "+ jahrhex$

If Len(jahrhex$) % 2 = 1       ;auf gerade Stellen mit 0 füllen
  jahrhex$ = "0" + jahrhex$
EndIf
Debug  jahrhex$
For i = 1  To Len(jahrhex$) Step 2
  Debug Mid(jahrhex$,i,2)
Next i 
SaschaDE
Beiträge: 6
Registriert: 01.12.2010 11:16

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von SaschaDE »

Vielen, vielen Dank Andi256 ... das geh ich jetzt mal durch bis ich alles verstehe.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von HeX0R »

In deinem Fall kannst du nicht mit Strings arbeiten, weil bei dir auch 0-Bytes vorkommen können (die in PB das Ende des Strings markieren).

Du musst also mit Memorypuffern arbeiten und dann "hineinpoken".
Siehe hierzu PokeS, PokeB, PokeW...
Antworten