Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Statusbar: farbig, mit ToolTips und Icons
Der Code ist frei und ohne Einschränkungen nutzbar.
Autor: Dieter Zornow
Der Code ist frei und ohne Einschränkungen nutzbar. Ich übernehme aber keinerlei
Garantie für einwandfreie Funktion oder eventuelle Schäden an Daten oder Hardware.
Die Include ist getestet und erfüllt den gewünschten Zweck.
Autor: Dieter Zornow
Dokumentation der Statusex.inc
einige Funktionen sind unter dem bunten Windows XP scheinbar ohne Wirkung
Setstatuscolor funktioniert bei mir nicht sowie beim Einfügen
von Text, die parameter risen und sunken
Parameter und Zweck der einzelnen Funktionen.
-----------------------------------------------------------------
Setstatuspos
Beispiel: Setstatuspos status&
parameter: Handle der Statusbar
Zweck: setzt die Position der Statusbar nach einer Größenänderung des Fensters, muss in die Abfrage-Schleife
-----------------------------------------------------------------
GetNumbersOfParts
Beispiel: GetNumbersOfParts status&
Anzahl& = @&(0)
parameter: handle der Statusbar
Zweck: Gibt die Anzahl der Felder zurück
-----------------------------------------------------------------
GetStatusRect
Beispiel: GetStatusRect status&,0
Print Größe des 1. Feldes
print X:,Val(@SubStr$(@$(0),1,|))
print Y:,Val(@SubStr$(@$(0),2,|))
print X1:,Val(@SubStr$(@$(0),3,|))
print Y2:,Val(@SubStr$(@$(0),4,|))
parameter: Handle der Statusbar,gewünschte Feldnummer
Zweck: Gibt Größe und Position des gewünschten Feldes zurück
Die 4 Parameter werden in einem String zurückgeliefert, der aufgelöst
werden muss.
Val(@SubStr$(@$(0),Teilnummer,|))
(siehe Beispiele)
-----------------------------------------------------------------
GetStatusTextlenght
Beispiel: GetStatusTextlenght status&,0
tl& = @&(0)
Parameter: Handle der Statusbar,gewünschte Feldnummer
Zweck: Ergibt die Länge des Textes im Feld
-----------------------------------------------------------------
SetStatusTip
Beispiel: SetStatusTip status&,2,Ein Icon aus der shell32.dll
oder wenn der abgeschnittene Text im Feld angezeigt werden soll
Beispiel: SetStatusTip status&,0,
Parameter: Handle der Statusbar,gewünschte Feldnummer,Text des Tooltips
Wenn ein abgeschnittener Text als Tooltip gesetzt wird, einen Leerstring übergeben
Zweck: Setzt für jedes Feld einen Tooltip
Achtung ! Der Tip erscheint nur, wenn ein Feld Text abschneidet oder nur ein Icon enthält.
-----------------------------------------------------------------
SetStatusIcon
Beispiel: SetStatusIcon status&,2,shell32.dll,60,large
parameter: Handle der Statusbar,gewünschte Feldnummer,Pfad zur Icondatei,indexnummer des Icons,small oder large
je nach gewünschter Größe
Zweck: Setzt ein Icon in ein Feld, bei großen Icons, wird die Höhe der Statusbar angepaßt
-----------------------------------------------------------------
DelStatusIcon
Beispiel: DelStatusIcon status&,2
parameter: Handle der Statusbar,gewünschte Feldnummer
Zweck: Löscht das Icon in einem Feld
-----------------------------------------------------------------
GetStatusIconHndl
Beispiel: GetStatusIconHndl status&,2
Ihandle_in2& = @&(0)
parameter: Handle der Statusbar,gewünschte Feldnummer
Zweck:
-----------------------------------------------------------------
SetStatusHeight
Beispiel: SetStatusHeight status&,20
parameter: Handle der Statusbar, Höhe in Pixel
Zweck: Verändert die Mindesthöhe der Statusbar zu Höhe in Pixel
-----------------------------------------------------------------
SetStatusText style$,hndl&,part&,text$
parameter: sunken oder Risen,Handle der Statusbar,gewünschte Feldnummer,gewünschter Text
sunken = Text ist vertieft (normal)
risen = text ist hervorgehoben wie ein Button
Beispiel: SetStatusText RISEN,status&,0,Dieter, das ist mein Vorname
oder: SetStatusText SUNKEN,status&,1,Zornow, das ist mein Nachname
Zweck: Setzt den Text in ein Feld der Statusbar
XP wahrscheinlich ohne Wirkung
-----------------------------------------------------------------
SetstatusParts
parameter: Handle der Statusbar, Anzahl Felder, Feldgröße in einem String durch Komma getrennt.
Beispiel: SetstatusParts status&,4,100,200,300,-1
Das letzte Feld sollte -1 haben, dann get es immer bis zur rechten Ecke des Fensters.
Zweck: Setzt die Anzahl der Felder. Diese Funktion wird von CreateStatusbarEx aufgerufen wenn die Anzahl größer 0 ist.
-----------------------------------------------------------------
Setstatuscolor
parameter: Handle der Statusbar,RGBwert
Beispiel: Setstatuscolor status&,RGB(255,53,96)
altefarbe& = @&(0)
Zweck: Setzt die Hintergrundfarbe der Statusbar, gibt die alte Hintergrundfarbe zurück
XP wahrscheinlich ohne Wirkung
-----------------------------------------------------------------
GetStatusText
parameter: Handle der Statusbar,gewünschte Feldnummer
Beispiel: GetStatusText status&,0 0 ist das erste Feld, 1 das Zweite, 2 das Dritte usw
Text = @$(0)
Zweck: Gibt den Inhalt eines Feldes zurück
-----------------------------------------------------------------
CreateStatusbarEx WHnd&,ID&,where$,parts&,size$,Bcolor&
parameter: Handle des Elternfensters, Id des Status controls, wo, Anzahl Felder, size als String, Hintergrundfarbe (optional)
wo: BOTTOM oder TOP
Beispiel unten: CreateStatusbarEx %Hwnd,1,BOTTOM,4,100,200,300,-1,RGB(255,53,96) mit Farbe beim Erzeugen, optional
handle& = @&(0)
Beispiel oben: CreateStatusbarEx %Hwnd,1,TOP,4,100,200,300,-1,RGB(255,53,96) mit Farbe beim Erzeugen, optional
handle& = @&(0)
Zweck: Erstellt ein Statusfenster wahlweise oben oder unten im Fenster, gibt den Handle zurück
Es können auch 2 Statusfenster oben und unten nacheinander angelegt werden.
Die Funktion setzt noch keinen Text oder Icon in die Felder, dazu die obige Funktion nehmen.
Windows XP wird in den bunten Themen keine Farbveränderung zulassen.
-----------------------------------------------------------------
###############################################################
Def SetSysColor(1) !USER32,GetSysColor
Def ExtractIconEx(5) !SHELL32,ExtractIconExA
Def HiWord(1) Div&(&(1),$10000)
Def LoWord(1) And(&(1),$FFFF)
proc Setstatuspos
parameters hndl&
sendmessage(hndl&,5,0,0)
endproc
Proc GetNumbersOfParts Hier könnte man noch die Koordinaten abfragen
parameters hndl&
Declare numbers&
numbers& = sendmessage(hndl&,1030,0,0)
Return numbers&
endproc
Proc GetStatusRect
parameters hndl&,part&
Declare rect#,rect$
Dim rect#,16
sendmessage(hndl&,1034,part&,rect#)
Rect$ = str$(Long(rect#,0)) + |
Rect$ = Rect$ + str$(Long(rect#,4)) + |
Rect$ = Rect$ + str$(Long(rect#,8)) + |
Rect$ = Rect$ + str$(Long(rect#,12))
Dispose rect#
Return rect$
endproc
Proc GetStatusTextlenght
parameters hndl&,part&
Declare length&,type&
length& = sendmessage(hndl&,1027,part&,0)
type& = HiWord(length&)
length& = LoWord(length&)
return length&
endproc
Proc SetStatusTip Der Tip erscheint nur, wenn das Feld Text abschneidet oder nur ein Icon enthält
parameters hndl&,part&,text$
Declare tiptext$,buf#
tiptext$ = text$
if tiptext$ <>
sendmessage(hndl&,$410,part&,Addr(tiptext$))
else
Dim buf#,512
sendmessage(hndl&,1026,part&,buf#)
tiptext$ = string$(buf#,0)
Dispose buf#
sendmessage(hndl&,$410,part&,Addr(tiptext$))
endif
endproc
Proc SetStatusIcon
Parameters hndl&,part&,source$,Index&,size$
Declare IcHndl&,iar#
Dim iar#,4
if Upper$(size$) = SMALL
ExtractIconEx(addr(source$),index&,0,iar#,1) small Icons
elseif Upper$(size$) = LARGE
ExtractIconEx(addr(source$),index&,iar#,0,1) large Icons
sendmessage(hndl&,1032,34,0) mindesthöhe der Statusbar
sendmessage(hndl&,5,0,0) WM_SIZE senden zum Neuzeichnen
endif
IcHndl& = Long(iar#,0)
Dispose iar#
sendmessage(hndl&,1039,part&,IcHndl&)
return IcHndl&
endproc
proc DelStatusIcon
parameters Hndl&,part&
sendmessage(hndl&,1039,part&,0)
endproc
proc GetStatusIconHndl
parameters hndl&,part&
Declare Iconhndl&
Iconhndl& = sendmessage(hndl&,1044,part&,0)
Return Iconhndl&
endproc
Proc SetStatusHeight
Parameters hndl&,height&
sendmessage(hndl&,1032,height&,0) mindesthöhe der Statusbar
sendmessage(hndl&,5,0,0) WM_SIZE senden zum Neuzeichnen
endproc
Proc SetStatusText
Parameters style$,hndl&,part&,text$
declare fieldtext$
fieldtext$ = text$
if Upper$(Style$) = RISEN
sendmessage(hndl&,$401,part& | $0200,Addr(fieldtext$))
elseif Upper$(Style$) = SUNKEN
sendmessage(hndl&,$401,part&,Addr(fieldtext$))
sendmessage(hndl&,5,0,0) WM_SIZE senden zum Neuzeichnen
endif
endproc
Proc SetstatusParts
parameters hndl&,amount&,size$
decimals 0
Declare arr#,counter%,adr%
case amount& = 0:Return
Dim arr#,amount& * 4
counter% = 1
adr% = 0
whilenot counter% > amount&
long arr#,adr% = val(@SubStr$(Size$,counter%,,))
inc counter%
adr% = adr% + 4
endwhile
sendmessage(hndl&,1028,amount&,arr#)
Dispose arr#
decimals 6
endproc
Proc Setstatuscolor
parameters hndl&,Bcolor&
Declare oldcolor&
oldcolor& = sendmessage(hndl&,8193,0,Bcolor&)
sendmessage(hndl&,5,0,0) WM_SIZE senden zum Neuzeichnen
return oldcolor&
endproc
Proc GetStatusText
parameters hndl&,part&
Declare buf#,text$
Dim buf#,512
sendmessage(hndl&,1026,part&,buf#)
text$ = string$(buf#,0)
Dispose buf#
return text$
endproc
Proc CreateStatusbarEx
parameters WHnd&,ID&,where$,parts&,size$,Bcolor&
Declare sthndl&, para&
para& = %pcount
if Upper$(where$) = BOTTOM
sthndl& = Control(msctls_statusbar32,,$54000100 | $0800,0,0,0,0,WHnd&,id&,%hinstance,$0) unten
elseif Upper$(where$) = TOP
sthndl& = Control(msctls_statusbar32,,$54000101 | $0800,0,0,0,0,WHnd&,id&,%hinstance,$0) oben
endif
if para& = 6 nur wenn Farbe übergeben wird im 4. Parameter
sendmessage(sthndl&,8193,0,Bcolor&)
endif
If parts& <> 0
SetstatusParts sthndl&,parts&,size$
endif
Return sthndl&
endproc
Beispiel
cls
Declare status&,oldCol&
CreateStatusbarEx %Hwnd,1,BOTTOM,4,100,200,300,-1,RGB(255,53,96) mit Farbe beim Erzeugen, optional
status& = @&(0)
SetStatusText RISEN,status&,0,Dieter, das ist mein Vorname
SetStatusText SUNKEN,status&,1,Zornow, das ist mein Nachname
SetStatusIcon status&,2,shell32.dll,60,large
SetStatusTip status&,0,
SetStatusTip status&,1,
SetStatusTip status&,2,Ein Icon aus der shell32.dll
GetStatusText status&,0
print @$(0)
GetStatusText status&,1
print @$(0)
GetStatusIconHndl status&,2
print Iconhandle: ,@&(0)
GetStatusTextlenght status&,0
print Textlänge in Feld 1: (Index 0)=,@&(0),Zeichen
GetStatusRect status&,0
Print
Print Größe des 1. Feldes
print X:,Val(@SubStr$(@$(0),1,|))
print Y:,Val(@SubStr$(@$(0),2,|))
print X1:,Val(@SubStr$(@$(0),3,|))
print Y2:,Val(@SubStr$(@$(0),4,|))
GetNumbersOfParts status&
Print
print Anzahl Felder: , @&(0)
waitinput Ein Tooltipereignis verlässt Waitinput in neuen Profanversionen
setStatusHeight status&,20 = default value for W9x
DelStatusIcon status&,2
SetStatusIcon status&,2,shell32.dll,60,small
Setstatuscolor status&,RGB(255,0,255)
oldcol& = @&(0)
while 1
getmessage
Setstatuspos status&
wend
end
SB_SETICON = 1039 or $40F sendmessage(hndl&,1039,part&,IconHndl&) iconhndl = 0 löschen
SB_SETTEXT = 1025 or $401 sendmessage(hndl&,1025,part&,Addr(text$))
SB_SETTIPTEXT = 1040 or $410 sendmessage(hndl&,1040,part&,Addr(text$))
SB_GETTEXT = 1026 or $402 sendmessage(Statbar&,1026,part&,buf#)
SB_GETTEXTLENGTH = 1027 or $403 length& = sendmessage(Statbar&,1027,part&,0) lowword ist length, highword = type
SB_GETTIPTEXT = 1042 or $412 sendmessage(Statbar&,1042,bufsize&,buf#)
SB_SETPARTS = 1028 or $404 sendmessage(Statbar&,1028,Anzpart&,array_widths) last should be -1
SB_GETPARTS = 1030 or $406 anzahl& = sendmessage(Statbar&,1030,part&,array or 0)
SB_GETBORDERS = 1031 or $407 sendmessage(Statbar&,1031,0,array with 3 elements)
SB_SETMINHEIGHT = 1032 or $408 sendmessage(Statbar&,1032,pixel&,0)
SB_SIMPLE = 1033 or $409 sendmessage(Statbar&,1033,simple&,0) simple = 1 or 0
SB_GETRECT = 1034 or $40A sendmessage(Statbar&,1034,part&,rect#)
SB_ISSIMPLE = 1038 or $40E simple& = sendmessage(Statbar&,1034,0,0) non simple = 0
SB_GETICON = 1044 or $414 Iconhndl& = sendmessage(Statbar&,1044,part&,0)
SB_SETBKCOLOR = 8193 or $2001 / oldcolor& = sendmessage(Statbar&,8193,0,COLORREF)
Styles
SBT_OWNERDRAW = $1000;
SBT_NOBORDERS = $0100;
SBT_POPOUT = $0200;
otro Textrichtung
SBT_TOOLTIPS = $0800;