Markieren von Text in ComboBoxGadgets

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Markieren von Text in ComboBoxGadgets

Beitrag von Hyper »

Hallo Gefährten,

es gibt ja hier Themen zum Markieren von Text in EditorGadgets. Aber leider funktionieren diese API nicht in ComboBoxGadgets.

Ich möchste aber ein editierbares ComboBoxGadget bauen bei dem ein Default-Text eingetragen und markiert wird. Das kann man dann überschreiben oder so lassen.

Könnt Ihr mir helfen, wie ich den Text markieren kann?
PB 5.72
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Hallo,

du kannst doch einfach mit EventGadget() prüfen ob jemand den Gadget aktiviert hat, und dann löschst du den Inhalt einfach, wenn noch der Standardinhalt drinsteht...

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Ganz einfach:
hier mal ein Beispielcode:

Code: Alles auswählen

  If OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    ComboBoxGadget(0, 10, 10, 250, 100, #PB_ComboBox_Editable)
      AddGadgetItem(0, -1, "Eintrag 1")
      AddGadgetItem(0, -1, "Eintrag 2")
      AddGadgetItem(0, -1, "Eintrag 3")
      SetGadgetState(0, 0)

    hComboEdit.l = ChildWindowFromPoint_(GadgetID(0), 5, 5)
    SendMessage_(hComboEdit, #EM_SETSEL, 6, 1)                   ;Makieren von Position 1 bis 6

    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
v6.00
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Beitrag von Hyper »

Hallo Thomas,

danke, so funktionierts!
Wenn ich das mit den APIs nur mal verstehn würde! Wofür steht z.B. 5,5 in ChildWindowFromPoint_ sind das Konstanten?

Die 6,1 sind Länge und Anfang der Markierung, das ist klar.
PB 5.72
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Hyper hat geschrieben:Hallo Thomas,

danke, so funktionierts!
Wenn ich das mit den APIs nur mal verstehn würde! Wofür steht z.B. 5,5 in ChildWindowFromPoint_ sind das Konstanten?

Die 6,1 sind Länge und Anfang der Markierung, das ist klar.
Ganz ehrlich:
Das versteh ich auch nicht ganz ... ich habs auch mal aus nem anderen Code übernommen :oops:
Hauptsache es funktioniert :mrgreen:
v6.00
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Hyper hat geschrieben:Wofür steht z.B. 5,5 in ChildWindowFromPoint_ sind das Konstanten?
5 ist eine Zahl mit einem ziemlich konstanten Wert. ;-)

Im Ernst: übersetze doch mal ChildWindowFromPoint ins Deutsche und
überlege dann, wo der Punkt (Point) liegen könnte, an dem das Child-Window
ermittelt werden soll...

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Ligatur
Beiträge: 196
Registriert: 09.07.2006 00:41

Beitrag von Ligatur »

Dies hier macht das selbe mit weniger Code:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 270, 140, "ComboBoxGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0)) 
    ComboBoxGadget(0, 10, 10, 250, 100, #PB_ComboBox_Editable) 
      AddGadgetItem(0, -1, "Eintrag 1") 
      AddGadgetItem(0, -1, "Eintrag 2") 
      AddGadgetItem(0, -1, "Eintrag 3") 
      SetGadgetState(0, 0) 

;     hComboEdit.l = ChildWindowFromPoint_(GadgetID(0), 5, 5) 
;     SendMessage_(hComboEdit, #EM_SETSEL, 6, 1)                   ;Makieren von Position 1 bis 6 
    SendMessage_(GadgetID(0), #CB_SETEDITSEL, 0, 6 << 16 + 1)                   ;Makieren von Position 1 bis 6 

    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
  EndIf
Benutzeravatar
Hyper
Beiträge: 194
Registriert: 19.04.2005 19:14

Beitrag von Hyper »

Aha und dabei bedeutet es:

Code: Alles auswählen

    von = 3
    bis = 5
    SendMessage_(GadgetID(0), #CB_SETEDITSEL, 0, bis << 16 + von-1) ;Makieren von Position 'von bis 'bis'
Verstehe zwar die '<<' nicht, aber es funktioniert prima. Danke!
PB 5.72
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Hyper
Steht alles in der Hilfe bei "Variablen, Typen und Operatoren" unten in der Tabelle.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten