Deutsch
Forum

Farben für Controls ändern

 

Peter
Mallow
Hallo,
ist es z.B. möglich die Hintergrundsfarbe einer Listbox zu ändern ohne zusätzliche DLL?
Bei einen RichEdit brauche ich nur eine Message schicken, jedoch für Listboxen kann ich keine Message finden.
Eine andere Möglichkeit wäre eventuell mit einer Callback-Routiene wie es im Beispiel in der Profanhilfe beschrieben ist (Listing: Callback (Textfeldfarbe))

Nur schaffe ich es nicht diesen Code für eine Listbox umzuschreiben.

Kann mir jemand Ansätze liefern? Allerdings wenn es leicht mit einer Message geht, dann ist mir das lieber
 
WinXP Pro SP2, XProfan 9 + XPSE
AMD Athlon 64 X2 3800
03.10.2005  
 



Suche => Codes... => Codesnippets-Finder => Farbige...

Wofür habe ich das Teil geproggt...?

Salve.
 
03.10.2005  
 




Peter
Mallow
Sorry, da habe ich nicht gesucht.

Aber das beispiel funktioniert leider nicht.
Ich sehe keine unterschiede:
KompilierenMarkierenSeparieren
 {$cleq}
###########################
Thema : Subclassing
###########################
Listbox mit Hintergrundbild
###########################
Andreas Miethe
Oktober 2003
###########################
 $H Windows.ph
 $H Structs.ph
 $H Messages.ph
Set(FastMode,1)

Proc Setcolor

    Parameters Wparam&,Col&

    If Brush&

        ~Deleteobject(Brush&)

    Endif

    Brush& = ~Createsolidbrush(Col&)
    Return Brush&

Endproc

Struct Ps = ~Paintstruct
Struct Rect = ~Rect
Declare Ende&,Listbox&,Oldlbproc&,Brush&
Declare Hdc&, Mdc&, M2dc&, Width&, Height&, Painting&
Declare Image&,Moldobject&,M2oldobject&,Hmbitmap&
Declare Ps#,Rect#
Dim Ps#,Ps
Dim Rect#,Rect

Proc Lbproc

    Declare Result&
    Parameters Wnd&, Msg&, Wparam&, Lparam&
    Result& = 0

    If Msg& = ~Wm_erasebkgnd

        Result& = 1

    Elseif Msg& = ~Wm_paint

        If Painting& = 0

            Painting& = 1
            Result& = ~Callwindowproc(Oldlbproc&, Wnd&, Msg&, M2dc&,Lparam&)
            ~Beginpaint(Wnd&, Ps#)
            ~Getclientrect(Listbox&,Rect#)
            ~Bitblt(M2dc&, Rect#.Left&,Rect#.Top&,Rect#.Right&,Rect#.Bottom&, Mdc&,Rect#.Left&,Rect#.Top&, ~Srcand)
            ~BitBlt(m2dc&, 0, 0, width&, height&, mDC&, 0, 0, ~SRCAND)
            Hdc& = ~Getdc(Wnd&)
            ~Bitblt(Hdc&, Rect#.Left&,Rect#.Top&,Rect#.Right&,Rect#.Bottom&, M2dc&,Rect#.Left&,Rect#.Top&, ~Srccopy)
            ~BitBlt(hdc&, 0, 0, width&, height&, m2DC&, 0, 0, ~SRCCOPY)
            ~Releasedc(Wnd&, Hdc&)
            ~Endpaint(Wnd&, Ps#)
            Painting& = 0

        Endif

    Else

        Result& = ~Callwindowproc(Oldlbproc&,Wnd&, Msg&, Wparam&, Lparam&)

    Endif

    Return Result&

Endproc

Cls ~Getsyscolor(~Color_btnface)
Image& = ~Loadimage(0,tile.bmp,0,640,480,$10)
Width& = 640
Height& = 480
Hdc& = ~Getdc(%Hwnd)
Mdc& = ~Createcompatibledc(%Hdc)
Moldobject& = ~Selectobject(Mdc&, Hmbitmap&)
Moldobject& = ~Selectobject(Mdc&, Image&)
M2dc& = ~Createcompatibledc(Hdc&)
Hmbitmap& = ~Createcompatiblebitmap(%Hdc,Width&,Height&)
M2oldobject& = ~Selectobject(M2dc&, Hmbitmap&)
~Releasedc(%Hwnd,Hdc&)
Clearlist
Addfiles *.*
Listbox& = Create(Listbox,%Hwnd,,0,0,0,0)
~Setwindowpos(Listbox&,0,10,10,300,292,~Swp_showwindow)
Movelisttolist(Listbox&)
~Sendmessage(Listbox&,~Wm_setfont,~Getstockobject(~Default_gui_font),0)
Oldlbproc& = ~Setwindowlong(Listbox&,~Gwl_wndproc, Procaddr(Lbproc,4))
Repaint
Usermessages ~Wm_close

Whilenot Ende&

    Waitinput

    If Getfocus(Listbox&)

        Sendmessage(Listbox&,~Wm_paint,0,0)

    Endif

    If %Umessage = ~Wm_close

        ~Deleteobject(Image&)
        Ende& = 1

    Endif

Wend

 
WinXP Pro SP2, XProfan 9 + XPSE
AMD Athlon 64 X2 3800
03.10.2005  
 




Peter
Mallow
Mein Fehler funktioniert doch, wenn ich die Adresse zum Hintergrundsbild ändere.

Aber gehts vielleicht auch einfacher? Möchte nur die Farbe des Hintergrundes (schwarz) und die Schriftfarbe ($FFFFFF) einer Listbox ändern.
 
WinXP Pro SP2, XProfan 9 + XPSE
AMD Athlon 64 X2 3800
16.10.2005  
 




Frank
Abbing
Hallo Peter,

ohne dir zu Nahe treten zu wollen, ist mir aufgefallen, dass du dir gerne Codes von anderen Leuten erstellen lässt...
Nimm dir doch mal den Code von Andreas vor und versuche ihn selber abzuspecken. Beschäftige dich damit, so lang ist er ja nicht. Du wirst merken, das lehrt ungemein. Jedenfalls mehr, als sich ständig Codes vorsetzten zu lassen.


Für dein Problem gibt es keine einfache Lösung, ausser das Subclassing. Oder du nimmst Sebastians SKControl.dll. Die arbeitet auch nach diesem Prinzip.
 
16.10.2005  
 



Kann dir da nur voll zustimmen, Frank.
 
17.10.2005  
 




Frank
Abbing
Danke Andreas!

Peter, du könntest auch ein Listview verwenden. Dort sind die Farben einstellbar und du kannst es so ausehen lassen wie eine Listbox. Und es gibt sogar eine tolle Dll, um die Sache noch einfacher zu gestalten....
 
17.10.2005  
 




Peter
Mallow
@Frank
ehrlich gesagt hast du schon recht Aber ich versuche immer die Codes zu verstehen.

Habe mich schon mal versucht mit dem Code auseinanderzusetzten, doch das war etwas zu viel neues auf einmal. Aber ich werde mich damit nocheinmal genauer beschäftigen, wenn ich mal wieder viel Zeit habe.
 
WinXP Pro SP2, XProfan 9 + XPSE
AMD Athlon 64 X2 3800
19.10.2005  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.341 Betrachtungen

Unbenanntvor 0 min.
H.Brill19.09.2023
Sven Bader06.08.2021
Peter Max Müller29.10.2017
Ernst04.05.2014
Mehr...

Themeninformationen



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