Deutsch
Quelltexte/ Codesnippets

Farbig Icons Statusbar Tooltips

 

KompilierenMarkierenSeparieren
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;
SBT_RTLREADING          = $0400; andere Textrichtung
SBT_TOOLTIPS            = $0800;
 
15.07.2007  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.135 Betrachtungen

Unbenanntvor 0 min.
Langer19.12.2021
Sven Bader17.08.2021
Rainer Hoefs04.03.2018
Ernst15.05.2016
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

unbekannt (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie