| |
|
|
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. |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
| Kann dir da nur voll zustimmen, Frank. |
|
|
| |
|
|
|
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.... |
|
|
| |
|
|
|
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 ▲ |
|
|
|