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?
Ticker Window machen
Re: Ticker Window machen
folgendes Beispiel mal eben an PB4.2 angepasst:rudolfo hat geschrieben:Wenn ja - wie?
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²