ComboBox-Gadget und #CBN_SELCHANGE

Anfängerfragen zum Programmieren mit PureBasic.
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von ThoPie »

Hallo,
ich habe zwei kombinierte ComboBoxen (Postleitzahl und Ort). Die Änderung der ComboBox Postleitzahl werte ich mit #CBN_SELCHANGE aus und möchte dazu den passenden Ort aus einer Datenbank anzeigen. Mein Problem ist nun, dass bei der Auswertung mit GetGadgetText() immer die Postleitzahl vor der Auswahl ausgelesen wird.
Also ist "11111" in der ComboBox - Benutzer wählt "22222" aus - ich werte über #CBN_SELCHANGE und GetGadgetText() aus und erhalte "11111", ich möchte aber "22222" haben.
Was mache ich da falsch?
Vielen Dank.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von Kaeru Gaman »

MSDN hat geschrieben:When a combo box receives a CBN_SELCHANGE notification message, GetDlgItemText() will give the text of the previous selection and not the text of the new selection. To get the text ...
http://support.microsoft.com/kb/66365
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von Kiffi »

Code: Alles auswählen

#Window=0
#Combobox=0

If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 270, 140, "ComboBoxGadget")
  
  ComboBoxGadget(#Combobox, 10, 10, 250, #PB_Any)

  AddGadgetItem(#Combobox, -1, "11111")
  AddGadgetItem(#Combobox, -1, "22222")
  AddGadgetItem(#Combobox, -1, "33333")
  
  SetGadgetState(#Combobox, 0)
  
  Repeat 
    
    WWE=WaitWindowEvent()
    
    Select WWE
        
      Case #PB_Event_Gadget
        
        Select EventGadget()
            
          Case #Combobox
            
            Select EventType()
                
              Case #CBN_SELCHANGE
                
                Debug GetGadgetItemText(#Combobox, GetGadgetState(#Combobox))
                
            EndSelect
            
        EndSelect
        
        
    EndSelect
    
  Until WWE = #PB_Event_CloseWindow
  
EndIf
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von ts-soft »

Ich komme auch mit GetGadgetText() zum richtigen Ergebnis. (PB4.41)
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von ThoPie »

Vielen Dank.
Ich habe die Lösung von Kiffi eingebaut.
Möglicherweise funktioniert GetGadgetText() nicht weil meine ComboBox "Editable" ist und ich noch extra über ein Callback eine Autovervollständigung eingebaut habe.
Nochmal Danke.
:allright:
Bild
SaschaDE
Beiträge: 6
Registriert: 01.12.2010 11:16

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von SaschaDE »

Hallo,

ich bin neu hier und gerade dabei zu prüfen, ob sich Purebasic gut für die Anwendungen in unserer Firma eignet ... immer noch mit der Demo-Version (werde es aber bestellen wenn die Tests gut laufen, bis jetzt bin ich sehr begeistert).

Zum Test erstelle ich ein RS232 Programm, das mit einem Mikrocontroller in unserer Hardware kommunizieren soll.

Zur Auswahl des Ports nutze ich eine ComboBox. Im Moment bin ich hier:

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #String_0
  #Combo_0
EndEnumeration

Global device.s     : device.s = ""
Global portNumber.b = 0

If OpenWindow(#Window_0, 216, 0, 266, 144, "HPC643 RS232",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  StringGadget(#String_0, 10, 40, 100, 20, "")
  ComboBoxGadget(#Combo_0, 10, 10, 100, 20)

  For I = 0 To 16
    device = "COM" + Str(I)
    If OpenSerialPort(I, device, 57600, #PB_SerialPort_EvenParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
      AddGadgetItem(#Combo_0, -1,device)
      CloseSerialPort(I)
      portNumber = I
    EndIf
  Next

       
  Repeat
    Event = WaitWindowEvent()

    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
    
    
  Until Quit = 1
EndIf
Nachdem die Combobox mit den vorhandenen Ports gefüllt ist (hoffe mal das man das so machen kann) ... möchte ich nun mit #CBN_SELCHANGE wie im Beispiel hier im Thread feststellen, dass sich der Zustand der ComboBox verändert hat.

Leider erscheint beim Compilieren die Fehlermeldung, dass es #CBN_SELCHANGE nicht kennt. Ist das eine Funktion die ich nur mit der Kaufversion nutzen kann ?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von Kiffi »

Welche Demo-Version hast Du denn? Aktuell ist die 4.51

#CBN_SELCHANGE sollte als solches auch in der Demo-Version
vorhanden sein. Ansonsten einfach die Konstante selber belegen.

Code: Alles auswählen

#CBN_SELCHANGE = 1
Grüße ... Kiffi
a²+b²=mc²
SaschaDE
Beiträge: 6
Registriert: 01.12.2010 11:16

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von SaschaDE »

Hallo,

Ich habe PureBasic 4.50 (Windows - x86).

Wenn ich #CBN_SELCHANGE selbst mit 1 belege geht es schon besser, vielen Dank für den Tip. Es springt dann in den Case, wenn ich auf die ComboBox klicke. Ich suche eigentlich aber ein Event das erst dann ausgelöst wird, wenn der nutzer ein Element der ComboBox ausgewählt hat.

Ist aber alles nicht weiter schlimm ... ich habe jetzt einen Butten neben der ComboBox den der Nutzer klicken muss nachdem er mit der ComboBox den Port geählt hat.

Vielen Dank nochmal für die schnelle Hilfe, eine gute Community ist sehr wichtig für die Kaufentscheidung.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von Kiffi »

SaschaDE hat geschrieben:ich habe jetzt einen Butten neben der ComboBox den der Nutzer klicken muss nachdem er mit der ComboBox den Port geählt hat.
das ist aber nicht so schön für den Anwender.

Code: Alles auswählen

; PureBasic Visual Designer v3.95 build 1485 (PB4Code)

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #String_0
  #Combo_0
EndEnumeration

Global device.s     : device.s = ""
Global portNumber.b = 0

If OpenWindow(#Window_0, 216, 0, 266, 144, "HPC643 RS232",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  StringGadget(#String_0, 10, 40, 100, 20, "")
  ComboBoxGadget(#Combo_0, 10, 10, 100, 20)
  
  For I = 0 To 16
    device = "COM" + Str(I)
    If OpenSerialPort(I, device, 57600, #PB_SerialPort_EvenParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
      AddGadgetItem(#Combo_0, -1,device)
      CloseSerialPort(I)
      portNumber = I
    EndIf
  Next
  
  
  Repeat
    Event = WaitWindowEvent()
    
    If Event = #PB_Event_Gadget
      If EventGadget() = #Combo_0
        If EventType() = #CBN_SELCHANGE
          Debug "Juhu!"
        EndIf
      EndIf
    EndIf
    
    
    If Event = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
    
  Until Quit = 1
EndIf
Grüße ... Kiffi
a²+b²=mc²
SaschaDE
Beiträge: 6
Registriert: 01.12.2010 11:16

Re: ComboBox-Gadget und #CBN_SELCHANGE

Beitrag von SaschaDE »

Ahhh ... das geht jetzt super ! Vielen Dank !! :allright:
Antworten