Seite 1 von 2

Statusbar SystemID

Verfasst: 16.01.2005 23:22
von computerkranker
Kann mir jemand helfen und sagen wie ich die SystemID einer Statusbar bekommen kann wenn ich sie mit #PB_ANY angelegt habe?
ISStatusBar() geht ja anscheinend nicht.

Verfasst: 16.01.2005 23:34
von Zaphod
die wird beim anlegen mit #any zurückgeliefert.

Verfasst: 16.01.2005 23:49
von Lars
Zaphod hat geschrieben:die wird beim anlegen mit #any zurückgeliefert.
Eben nicht beim Anlegen mit [c]#PB_Any[/c], sondern, wenn man eine
feste Konstante angibt.

Statusbar SystemID

Verfasst: 17.01.2005 01:27
von computerkranker
StatusBarID(#Statusbar) wäre da sicher ganz nützlich...Ich brauche die SystemID der Statusbar um einige Gadget's auf die Statusbar zubekommen.
Bei MDI's wird es sonst umständlich.

Verfasst: 17.01.2005 11:18
von Zaphod
achso... bekommnt man die nicht aber zurückgeliefert, wenn man IsStatusBar(#Statusbar) benutzt?

Verfasst: 17.01.2005 11:58
von Sven
Ich suche sowas auch für die ToolBar, also ein Äquivalent zu WindowID() und GadgetID(). Zur Zeit übergebe ich den Handle per Shared zwischen den Proceduren, siehe Beispiel. Aber eine Struktur SetToolbarButtonState(#toolbar, #tbbutton, state) wäre schon besser:

Code: Alles auswählen

Procedure SetToolbarButtonState(tbbID.l, tbbstate.l)
  Shared htool.l  ;Toolbar-Handle zugänglich machen 
  SendMessage_(htool, #TB_CHECKBUTTON, tbbID, tbbstate)  ;TBB State setzen
EndProcedure
  
Procedure.l GetToolbarButtonState(tbbID.l)
  Shared htool.l  ;Toolbar-Handle zugänglich machen 
  tbbstate.l = SendMessage_(htool, #TB_ISBUTTONCHECKED, tbbID, 0)  ;TBB State abfragen
  ProcedureReturn tbbstate
EndProcedure

Procedure MakeToolBar()
  Shared htool.l  ;Toolbar-Handle zugänglich machen 
  htool = CreateToolBar(#toolbar, WindowID())
  ...
EndProcedure

SetToolbarButtonState(#tbbutton, 0)  ;TBB unchecked
Etwas Brauchbares in den API habe ich nicht gefunden, was aber nichts heissen muss. :D

Sven

ISStatusBar

Verfasst: 17.01.2005 12:26
von computerkranker
achso... bekommnt man die nicht aber zurückgeliefert, wenn man IsStatusBar(#Statusbar) benutzt?
leider nicht.
ISStatusBar genau wie ISGadget liefern einen Wert zurück der (zumindest für mich nicht erkennbar) nichts mit dem Handle zu tun hat.

Beispiel:

Code: Alles auswählen

If OpenWindow(0,0,0,400,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget,"Test") 
  If CreateGadgetList(WindowID(0))
    ButtonGadget(0,10,10,100,24,"Test")
  EndIf 
  StatusBar=CreateStatusBar(0,WindowID())
  Debug "GadgetID: "+Str(GadgetID(0))
  Debug "IsGadget: "+Str(IsGadget(0))
  Debug "Statusbar-Handle     : "+Str(StatusBar)
  Debug "Statusbar-ISStatusbar: "+Str(IsStatusBar(0))
  Repeat : 
  Until WaitWindowEvent() =#PB_Event_CloseWindow 
EndIf 

Verfasst: 17.01.2005 13:10
von freedimension
Hab mal in das SDK geschaut und das hier ist dabei rum gekommen. Bei mir gibt es zumindest ohne #PB_Any denselben Handle zurück wie StatusBarGadget selber.

Code: Alles auswählen

Procedure StatusBarID()
  !EXTRN _PB_StatusBar_CurrentObject
  sbptr.l = 0
  !MOV EAX, dword [_PB_StatusBar_CurrentObject]
  MOV sbptr, EAX
  *sb.LONG = sbptr
  ProcedureReturn *sb\l
EndProcedure
Das ganze funktioniert nur wenn die Statusbar die aktuell ausgewählte ist, keine Ahnung wie man das noch nach dem Erstellen mehrerer StatusBars beeinflussen kann, also am Besten immer direkt nach dem Erstellen in einem Array oder einer LL ablegen.


Edit: ASM-Unterstützung muss an sein

Verfasst: 18.01.2005 20:34
von freedimension
Ich gehe dann mal davon aus das es funktioniert!? :D

Verfasst: 18.01.2005 21:02
von nicolaus
also wenn du das wie im nachstehenden code machst bekommst du das handle (die ID) der statusbar. Mit genau diesem rückgabewert kannst du ja auch meine lieb CN_Tools (zu finden bei PureArea.net und heute um eine funktion reicher) benutzen und da brauche ich ja auch das handle (die ID) der statusbar denn die lib benuzt keine PB funktionen sondern API.

Code: Alles auswählen

hstb = CreateStatusBar(0,WindowID())
MfG Nico