Statusbar SystemID

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
computerkranker
Beiträge: 66
Registriert: 12.10.2004 21:21

Statusbar SystemID

Beitrag 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.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

die wird beim anlegen mit #any zurückgeliefert.
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag 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.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Benutzeravatar
computerkranker
Beiträge: 66
Registriert: 12.10.2004 21:21

Statusbar SystemID

Beitrag 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.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

achso... bekommnt man die nicht aber zurückgeliefert, wenn man IsStatusBar(#Statusbar) benutzt?
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag 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
Benutzeravatar
computerkranker
Beiträge: 66
Registriert: 12.10.2004 21:21

ISStatusBar

Beitrag 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 
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag 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
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Ich gehe dann mal davon aus das es funktioniert!? :D
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag 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
Antworten