Gadget Typ abfragen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Gadget Typ abfragen

Beitrag von FGK »

Hallo,

hab mir ne Proc gebastelt mit der man den Typ einer übergeben
GadgetID ermitteln kann. Ist nützlich wenn man in ner Routine
unterschiedlich auf Gadgets reagiern will oder überprüfen muß
ob ein geeignetes Gadget übergeben wurde.

Code: Alles auswählen


Procedure.s GetGadgetType(Gadget.l)
  Buffer.s = Space(256):len=255
  GetClassName_(GadgetID(Gadget),@Buffer,@len)
  Debug Buffer
  ProcedureReturn Buffer
EndProcedure
  
Procedure LimitGadgetText(Gadget.l,MaxLen.l)
  Select GetGadgetType(Gadget)
    Case "Edit"  
      SendMessage_(GadgetID(Gadget),#EM_LIMITTEXT,MaxLen,0)
    Case "ComboBox"
      SendMessage_(GadgetID(Gadget),#CB_LIMITTEXT,MaxLen,0)
  EndSelect
EndProcedure

In diesem Beispiel kann man der Proc "LimitGadgetText"
wahlweise ein StringGadgetID oder CombogadgetID übergeben,
dessen Eingabelänge dann begrenzt wird. Kann für viele Aufgaben
nützlich sein zu wissen um welche Gadgetart es sich handelt.

Gruß

FGK
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

wunderbar, genau das was ich gesucht habe.

ich habe mal ein fenster gebastelt, das zu jedem gadget den typ als tooltip anzeigt:

Code: Alles auswählen

Procedure$ GetGadgetType(Gadget.l) 
  Buffer$ = Space($FF)
  GetClassName_(GadgetID(Gadget), @Buffer$, $FF)  
  ProcedureReturn Buffer$
EndProcedure 


id = OpenWindow(-1, 0, 0, 675, 605, #PB_Window_SystemMenu, "")
If id
  SetWindowTitle(id, GetGadgetType(id))
  If CreateGadgetList(WindowID(id))
    id = ButtonGadget(-1, 0, 0, 70, 20, "Button")
    GadgetToolTip(id, GetGadgetType(id))
    
    CreateImage(0, 70, 20)
    StartDrawing(ImageOutput())
    Locate(2,2)
    DrawText("ImgButton")
    StopDrawing()
    id = ButtonImageGadget(-1, 0, 20, 70, 20, UseImage(0))
    GadgetToolTip(id, GetGadgetType(id))
    
    id = CalendarGadget(-1, 70, 0, 200, 170)
    GadgetToolTip(id, GetGadgetType(id))
    
    id = CheckBoxGadget(-1, 30, 50, 10, 10, "CheckBox")
    GadgetToolTip(id, GetGadgetType(id))
    
    id = ComboBoxGadget(-1, 0, 70, 70, 20)
    AddGadgetItem(id, -1, "ComboBox")
    GadgetToolTip(id, GetGadgetType(id))
    
    id = ContainerGadget(-1, 270, 0, 100, 170, #PB_Container_Flat)
    TextGadget(-1, 10, 75, 80, 20, "ContainerGadget")
    CloseGadgetList()
    GadgetToolTip(id, GetGadgetType(id))
    
    id = DateGadget(-1, 370, 0, 100, 170)
    GadgetToolTip(id, GetGadgetType(id))
    
    id = ExplorerListGadget(-1, 470, 0, 100, 170, "")
    GadgetToolTip(id, GetGadgetType(id))
    
    id = ExplorerTreeGadget(-1, 570, 0, 100, 170, "")
    GadgetToolTip(id, GetGadgetType(id))
    
    id = HyperLinkGadget(-1, 0, 100, 70, 20, "  LinkGadget", $0000FF)
    GadgetToolTip(id, GetGadgetType(id))
    
    id = ImageGadget(-1, 390, 300, 80, 300, 0, #PB_Image_Border)
    TextGadget(-1, 400, 430, 65, 20, "ImageGadget")
    GadgetToolTip(id, GetGadgetType(id))
    
    id = IPAddressGadget(-1, 0, 120, 70, 20)
    GadgetToolTip(id, GetGadgetType(id)) 
    
    id = ListIconGadget(-1, 0, 170, 185, 100, "ListIconGadget", 180)
    GadgetToolTip(id, GetGadgetType(id))
    
    id = ListViewGadget(-1, 185, 170, 185, 100)
    AddGadgetItem(id, -1, "ListViewGadget")
    GadgetToolTip(id, GetGadgetType(id)) 
    
    id = MDIGadget(-1, 0, 270, 370, 200, 0, 0)
    GadgetToolTip(id, GetGadgetType(id)) 
    
    id = OptionGadget(-1, 0, 145, 70, 20, "Option")
    GadgetToolTip(id, GetGadgetType(id)) 
    
    id = PanelGadget(-1, 0, 470, 370, 110)
    AddGadgetItem(id, -1, "PanelGadget")
    CloseGadgetList()
    GadgetToolTip(id, GetGadgetType(id))
    
    id = ProgressBarGadget(-1, 0, 580, 370, 20, 0, 100)
    SetGadgetState(id, 77)
    GadgetToolTip(id, GetGadgetType(id))
    
    id = ScrollBarGadget(-1, 370, 170, 20, 430, 0, 100, 10, #PB_ScrollBar_Vertical)
    GadgetToolTip(id, GetGadgetType(id)) 
    
    id = SpinGadget(-1, 390, 170, 80, 20, 0, 0)
    SetGadgetText(id, "SpinGadget")
    GadgetToolTip(id, GetGadgetType(id)) 
    
    id = SplitterGadget(-1, 390, 200, 80, 50, TextGadget(-1, 390, 170, 80, 20, "      Splitter"), TextGadget(-1, 390, 200, 80, 20, "      Gadget"), #PB_Splitter_Separator)
    GadgetToolTip(id, GetGadgetType(id)) 
    
    id = StringGadget(-1, 390, 260, 80, 40, "StringGadget")
    GadgetToolTip(id, GetGadgetType(id)) 
    
    id = TrackBarGadget(-1, 480, 170, 20, 430, 0, 100, #PB_TrackBar_Vertical)
    SetGadgetState(id, 77)
    GadgetToolTip(id, GetGadgetType(id)) 
    
    id = TreeGadget(-1, 510, 170, 160, 430)
    AddGadgetItem(id, -1, "TreeGadget")
    GadgetToolTip(id, GetGadgetType(id)) 
    
    While WaitWindowEvent() <> #PB_Event_CloseWindow 
    Wend
  EndIf 
EndIf
ich wünsche mir eine aufnahme von GetGadgetType() in PB. rückgabewert sollte z.b. #PB_GadgetType_ContainerGadget sein. wenn es noch möglich wäre zwischen verschiedenen gadgets wie z.b. ButtonGadget()/ButtonImageGadget()/CheckBoxGadget(), zu unterscheiden (sie sind alle vom typ "button") dann wäre es perfekt. Manche GadgetTypenNamen sind von PB festgelegt worden (zb PureContainer). vielleicht wäre hierrüber möglich dies zu realisieren.
tranquil
Beiträge: 117
Registriert: 22.09.2004 22:07
Kontaktdaten:

Beitrag von tranquil »

Diese Funktion benötigte ich auch mega dringend. Habe Fred drauf angesprochen und er fand es eine tolle Idee. Das ist allerdings schonwieder Monate her.

Daraufhin habe ich die SCLGadgets-Lib geschrieben (findet ihr auch hier im Forum verlinkt). Da gibt es eine Funktion die heißt SCLGetGadgetType(GadgetID) und die gibt dann den Typ des Objekts zurück. Beispielsweise PB_Gadget_Button.

Mit solch einer Funktion kann man schön "CommonCallbacks" Programmieren die immer auf eine bestimmte Art von Gadget angewandt werden.


Zusätzlich gibt es noch die Möglichkeit Gadgets in Gruppen zu fassen.
Find ich persönlich auch SEHR praktisch da es immer total aufwendig ist alle Gadgets in einem Fenster oder eine Gruppe zurück zu setzen etc. etc.

Gruß

Mike
Antworten