Deutsch
Forum

GridBox & CUSTOMDRAW per SubClassing

Listview-Customdraw mit Subclassing: So geht's

 

Jens-Arne
Reumschüssel
Wenn auch erst gut 9 Jahre später... Vielleicht hilft's ja trotzdem noch, oder wenigstens jemand anderem:
'Gridbox(=ListView)-CustomDraw-Beispiel
 $H windows.ph
 $H messages.ph
 $H commctrl.ph
STRUCT NMHDR=hwndFrom&,idFrom&,code&
STRUCT NMCUSTOMDRAW=NMHDR,dwDrawStage&,hdc&,rcLeft&,rcTop&,rcRight&,rcBottom&,dwItemSpec&,uItemState&,lItemlParam&
STRUCT NMLVCUSTOMDRAW=NMCUSTOMDRAW,clrText&,clrTextBk&,iSubItem&,dwItemType&,clrFace&,iIconEffect&,iIconPhase&,iPartId&,iStateId&,rcTextLeft&,rcTextTop&,rcTextRight&,rcTextBottom&,uAlign&
declare _hGB%,_hBende%,_ende%

SUBCLASSPROC

    declare b#,lParam&,ret&

    if &sWnd=%HWnd

        if %sMessage=~WM_NOTIFY

            lParam&=&sLParam
            dim b#,NMLVCUSTOMDRAW
            b#=lParam&

            if (b#.hwndFrom&=_hGB%) and (b#.code&=~NM_CUSTOMDRAW)

                if b#.dwDrawStage&=~CDDS_PREPAINT'gleich wird das Listview neu gezeichnet

                    ret&=~CDRF_NOTIFYITEMDRAW'Folgemessages anfordern

                elseif b#.dwDrawStage&=~CDDS_ITEMPREPAINT'gleich wird ein Item gezeichnet

                    'b#.clrText&=$0000FFFF '@rgb(255,255,0) 'Textfarbe der Zelle ändern
                    'b#.clrTextBk&=$00FFFF00 '@rgb(0,255,255) 'Hintergrundfarbe der Zelle ändern
                    'ret&=~CDRF_NEWFONT 'ginge auch, dann sind alle Zeilen gleich gefärbt, der nächste elseif-Abschnitt wäre dann unnötig
                    ret&=~CDRF_NOTIFYSUBITEMDRAW'Folgemessages vor dem Zeichnen jedes einzelnen Subitems anfordern

                elseif (b#.dwDrawStage& & (~CDDS_ITEMPREPAINT | ~CDDS_SUBITEM))=(~CDDS_ITEMPREPAINT | ~CDDS_SUBITEM)'gleich wird ein Subitem gezeichnet

                    'b#.dwItemSpec&=Zeile
                    'b#.iSubItem&=Spalte
                    b#.clrText&=@rgb(255,255,b#.dwItemSpec&*13+b#.iSubItem&*30)'Textfarbe der Zelle ändern
                    b#.clrTextBk&=@rgb(0,200,b#.dwItemSpec&*13+b#.iSubItem&*30)'Hintergrundfarbe der Zelle ändern
                    ret&=~CDRF_NEWFONT

                endif

            endif

            dispose b#

            if ret&<>0

                @set("WINPROC",0)'muss sein, sonst geht's nicht
                return ret&'CustomDraw-spezifischen Wert zurückgeben

            endif

        endif

    endif

ENDPROC'SUBCLASSPROC

'***** Hauptprogramm
cls
_hGB%=@create("GRIDBOX",%HWnd,"Spalte 1;0;100;Spalte 2;0;100;Spalte 3;0;100;Spalte 4;0;100;Spalte 5;0;100;Spalte 6;0;100",0,0,0,@width(%HWnd),(@height(%HWnd)-40))
_hBende%=@create("BUTTON",%HWnd,"Ende",((@width(%HWnd)\2)-35),(@height(%HWnd)-30),70,20)
@set("FASTMODE",1)'sonst geht's leider nicht
subclass %HWnd,1'nicht die GridBox subclassen, sondern das Hauptfenster (dahin gehen die WM_NOTIFY-Messages)
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
_ende%=0

whilenot _ende%

    waitinput

    if @clicked(_hBende%)

        _ende%=1

    endif

endwhile

subclass %HWnd,0
@set("FASTMODE",0)
end
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
22.05.2018  
 




Jörg
Sellmeyer
Toll! Und für ne gute Idee ist es nie zu spät. Würdest du trotzdem den Beitrag nochmal direkt unter Uwes Beitrag neu erstellen? Dann muss man sich nicht durch einen zusätzlichen Link hangeln.
Ich würde ihn verschieben aber die Forumprogrammierung lässt mich grad nicht
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
23.05.2018  
 




Jens-Arne
Reumschüssel
Hmm, aber dann ist die Überschrift weg, wenn ich direkt antworte. Oder meinst Du das anders?
 
XProfan X3
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
23.05.2018  
 




Jörg
Sellmeyer
Genauso mein ich das. Dann ist zwar die Überschrift weg aber du kannst es ja im Text einfügen.
Finde ich jedenfalls besser, als ein Unterthema, wodurch der Thrad unübersichtlicher wird, da man zur Lösung nochmal durchklicken muss.
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
23.05.2018  
 




Jens-Arne
Reumschüssel
Aber dann ist der Eintrag nicht mehr in der Übersicht und der Suche zu finden. Das finde ich deutlich schlechter, als einen Klick mehr machen zu müssen. Oder wird der Text ("Body") der Nachricht in der Suche ebenfalls mit einbezogen? Dann wär's tatsächlich eine Verbesserung.
 
XProfan X3
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
23.05.2018  
 




Jens-Arne
Reumschüssel
...ach egal, ich poste das einfach noch einmal direkt unter dem Originaleintrag, dann sind alle Wünsche bedient.
 
XProfan X3
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
23.05.2018  
 




Jörg
Sellmeyer
Wieso? Wenn mann Listview, Customdraw oder Subclassing eingibt, kommt doch dieser Thread. Oder meinst du, jemand sucht nach "so gehts"?
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
23.05.2018  
 




Jens-Arne
Reumschüssel
Nein, das natürlich nicht. Aber die Lösung taucht dann eben auch nicht in der Threadübersicht auf, wo sie jemandem ins Auge fallen könnte, der vielleicht genau dasselbe Problem hat. Das ist aber auch schon alles. Meinetwegen kann dieser Unterthread auch gerne gelöscht werden.
 
XProfan X3
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
23.05.2018  
 




Jörg
Sellmeyer
Wir lassen ihn einfach erstmal drin.
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
23.05.2018  
 




p.specht

Jedenfalls eine ganz tolle Sache, hab sowas noch nie gesehen!
Ähnliches mit einfärbig Einfärben gabs mal von Sebastian Koenig, aber ich finde das Teil leider nicht mehr...
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
24.05.2018  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

8.167 Betrachtungen

Unbenanntvor 0 min.
Jens-Arne Reumschüssel21.04.2022
RudiB.16.02.2022
Stringray05.01.2022
Manfred Barei06.09.2021
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