Ticker Window machen

Anfängerfragen zum Programmieren mit PureBasic.
rudolfo
Beiträge: 19
Registriert: 19.10.2008 14:52

Ticker Window machen

Beitrag von rudolfo »

Ich möchte text in einem ticker window durchlaufen lassen. Bei den existierenden tickern wird der desktop gestaucht und in dem frei gewordenen platz oben ein fenster eingeblendet mit dem ticker text.

Nach einigem Suchen hab ich trotzdem noch keinen Plan, wie ich das desktop stauche und dann ein fenster plaziere. In den API gibt es nur eine funktion GetDesktopWindow, wenn ich aber versuche mit dem handle was anzufangen passiert nix.

Kann man das machen? Wenn ja - wie?
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Ticker Window machen

Beitrag von Kiffi »

rudolfo hat geschrieben:Wenn ja - wie?
folgendes Beispiel mal eben an PB4.2 angepasst:

Code: Alles auswählen

; Original von Stefan
; http://www.purebasic-lounge.com/viewtopic.php?t=2268

Procedure CreateAPPBar(Edge,Size); unterstützt #ABE_LEFT,#ABE_RIGHT,#ABE_TOP,#ABE_BOTTOM für Edge
  *APPBD.APPBARDATA=AllocateMemory(SizeOf(APPBARDATA))
  TBD.APPBARDATA
  SHAppBarMessage_(#ABM_GETTASKBARPOS,TBD)
  
  TBEdge=TBD\uEdge
  
  SHAppBarMessage_(#ABM_NEW,*APPBD)
  
  *APPBD\uEdge=Edge
  
  Select Edge
    Case #ABE_LEFT
      
      If TBEdge=Edge
        *APPBD\rc\left=TBD\rc\right
        *APPBD\rc\right=TBD\rc\right+Size
        *APPBD\rc\top=0
        *APPBD\rc\bottom=GetSystemMetrics_(#SM_CYSCREEN)
      Else
        *APPBD\rc\left=0
        *APPBD\rc\right=Size
        *APPBD\rc\top=0
        *APPBD\rc\bottom=GetSystemMetrics_(#SM_CYSCREEN)
      EndIf
      
    Case #ABE_RIGHT
      
      If TBEdge=Edge
        *APPBD\rc\left=TBD\rc\left-Size
        *APPBD\rc\right=TBD\rc\left
        *APPBD\rc\top=0
        *APPBD\rc\bottom=GetSystemMetrics_(#SM_CYSCREEN)
      Else
        *APPBD\rc\left=GetSystemMetrics_(#SM_CXSCREEN)-Size
        *APPBD\rc\right=GetSystemMetrics_(#SM_CXSCREEN)
        *APPBD\rc\top=0
        *APPBD\rc\bottom=GetSystemMetrics_(#SM_CYSCREEN)
      EndIf
      
      
    Case #ABE_TOP
      
      If TBEdge=Edge
        *APPBD\rc\left=0
        *APPBD\rc\right=GetSystemMetrics_(#SM_CXSCREEN)
        *APPBD\rc\top=TBD\rc\bottom
        *APPBD\rc\bottom=TBD\rc\bottom+Size
      Else
        *APPBD\rc\left=0
        *APPBD\rc\right=GetSystemMetrics_(#SM_CXSCREEN)
        *APPBD\rc\top=0
        *APPBD\rc\bottom=Size
      EndIf
      
    Case #ABE_BOTTOM
      
      If TBEdge=Edge
        *APPBD\rc\left=0
        *APPBD\rc\right=GetSystemMetrics_(#SM_CXSCREEN)
        *APPBD\rc\top=TBD\rc\top-Size
        *APPBD\rc\bottom=TBD\rc\top
      Else
        *APPBD\rc\left=0
        *APPBD\rc\right=GetSystemMetrics_(#SM_CXSCREEN)
        *APPBD\rc\top=GetSystemMetrics_(#SM_CYSCREEN)-Size
        *APPBD\rc\bottom=GetSystemMetrics_(#SM_CYSCREEN)
      EndIf
  EndSelect
  
  SHAppBarMessage_(#ABM_SETPOS,*APPBD)
  
  ProcedureReturn *APPBD
EndProcedure
    
Procedure RemoveAPPBar(*APPBD.APPBARDATA)
  SHAppBarMessage_(#ABM_REMOVE,*APPBD)
  FreeMemory(*APPBD)
EndProcedure
    
Procedure APPBarX(*APPBD.APPBARDATA)
  ProcedureReturn *APPBD\rc\left
EndProcedure
    
Procedure APPBarY(*APPBD.APPBARDATA)
  ProcedureReturn *APPBD\rc\top
EndProcedure
    
Procedure APPBarWidth(*APPBD.APPBARDATA)
  ProcedureReturn *APPBD\rc\right-*APPBD\rc\left
EndProcedure
    
Procedure APPBarHeight(*APPBD.APPBARDATA)
  ProcedureReturn *APPBD\rc\bottom-*APPBD\rc\top
EndProcedure
    
    ;Beispiel:
*APPBD.APPBARDATA=CreateAPPBar(#ABE_TOP,80) ; AppBar am oberen Rand erstellen
    
x=APPBarX(*APPBD)
y=APPBarY(*APPBD)
width=APPBarWidth(*APPBD)
height=APPBarHeight(*APPBD)
    
OpenWindow(1,x,y,width,height,"AppBar", #PB_Window_BorderLess)
SetWindowPos_(WindowID(1),#HWND_TOPMOST,0,0,0,0,#SWP_NOSIZE|#SWP_NOMOVE)
CreateGadgetList(WindowID(1))
    
TextGadget(1,5,5,200,20,"My AppBar")
    
ButtonImageGadget(5, 0, 30, 50, 40, LoadIcon_(0,103))
    
Repeat
  Event=WaitWindowEvent()
  
  If Event=#PB_Event_Gadget
    
    If EventGadget()=5:Quit=1:EndIf
  EndIf
  
Until Quit

RemoveAPPBar(*APPBD) ; AppBar entfernen

Grüße ... Kiffi
a²+b²=mc²
rudolfo
Beiträge: 19
Registriert: 19.10.2008 14:52

Beitrag von rudolfo »

Da hab ich mich wohl an etwas rangewagt, was zur fortgeschrittenen Programmierung gehört.
Aber es funktioniert und bei der Anpassung werde ich sicher was dazu lernen.
Danke - auch an Stefan.
Antworten