Forum | | | | Uwe ''Pascal'' Niemeier | Hi gens!
Irgendwie hab je im Moment un Brett vorm tête...
je voudrais mon CUSTOMDRAW-Routine pour ListViews sur XProfan11-SubClassing ajuster, viens mais avec cela pas bien sûr... Anscheinend werdne qui Werte pour LvDraw#.DrawStage& pas richtig gesetzt.
ici qui Code pour qui ProcAddr-variante (Minimal-Demo): KompilierenMarqueSéparationwindow 10,10-200,200
$H Messages.ph
$H Windows.ph
$H Commctrl.ph
proc HdlgLvColorProc----------------------------HdlgLvColorProc-------------------------
parameters wnd&,msg&,wparam&,lparam&
case msg&<>~WM_NOTIFY:return ~CallWindowProc(HdlgProc&,wnd&,msg&,wparam&,lparam&)
LvDraw#=Lparam&
case LvDraw#.Hwndfrom& <> Lv&:return ~DefWindowProc(wnd&,msg&,wparam&,lparam&)
case LvDraw#.Code&<>~NM_CUSTOMDRAW:return ~DefWindowProc(wnd&,msg&,wparam&,lparam&)
case LvDraw#.DrawStage& = ~CDDS_PREPAINT :return ~CDRF_NOTIFYITEMDRAW
case LvDraw#.DrawStage& = ~CDDS_ITEMPREPAINT:return ~CDRF_NOTIFYSUBITEMDRAW
if LvDraw#.DrawStage& = ~CDDS_SUBITEM | ~CDDS_ITEMPREPAINT
LvDraw#.Textbk&=rgb(25,255,255)
endif
return ~CDRF_DODEFAULT
endproc---------------------------------------------------------------------------------
var Lv&=create(gridbox,%hwnd,Test,0,10,10,150,100)
addstring(Lv&,Test)
declare LvDraw#
struct LvDraw= HwndFrom&,idFrom&,Code&,DrawStage&,Hdc&,Rect#(16),ItemSpec&,ItemState&,ItemLparam&,Text&,Textbk&,SubItem&
dim LvDraw#,LvDraw
Set(FastMode,1)
var HdlgProc&=~SetWindowLong(%hwnd,~GWL_WNDPROC,procaddr(HdlgLvColorProc,4) )
~RedrawWindow(Lv&,0,0,$485)
while 1
waitinput
endwhile
Allerdings allez aus qui Aider pas bien sûr hervor, quoi passiert, si le SubClassProc per Retour sortir de wird, òu qui dabei angegebenen Werte übertragen volonté et quelle rôle Set(WinProc,X) dans dem le cas écoutes
Hoffe sur Aider Pascal |
| | | | |
| | Unterthema: Listview-Customdraw avec Subclassing: So geht's [...] erzeugt. |
| | | | |
| | Jens-Arne Reumschüssel | ici qui Solution:
'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&
si &sWnd=%HWnd
si %sMessage=~WM_NOTIFY
lParam&=&sLParam
dim b#,NMLVCUSTOMDRAW
b#=lParam&
si (b#.hwndFrom&=_hGB%) and (b#.code&=~NM_CUSTOMDRAW)
si b#.dwDrawStage&=~CDDS_PREPAINT'juste wird cela Listview récente gezeichnet
ret&=~CDRF_NOTIFYITEMDRAW'Folgemessages anfordern
elseif b#.dwDrawStage&=~CDDS_ITEMPREPAINT'juste wird un Item gezeichnet
'b#.clrText&=$0000FFFF '@rgb(255,255,0) 'Textfarbe qui cellule changement
'b#.clrTextBk&=$00FFFF00 '@rgb(0,255,255) 'Hintergrundfarbe qui cellule changement
'ret&=~CDRF_NEWFONT 'ginge aussi, ensuite sommes alle Zeilen juste teinté, qui prochain elseif-paragraphe wäre ensuite unnötig
ret&=~CDRF_NOTIFYSUBITEMDRAW'Folgemessages avant dem Zeichnen chaque individuel Subitems anfordern
elseif (b#.dwDrawStage& & (~CDDS_ITEMPREPAINT | ~CDDS_SUBITEM))=(~CDDS_ITEMPREPAINT | ~CDDS_SUBITEM)'juste wird un Subitem gezeichnet
'b#.dwItemSpec&=Zeile
'b#.iSubItem&=Spalte
b#.clrText&=@rgb(255,255,b#.dwItemSpec&*13+b#.iSubItem&*30)'Textfarbe qui cellule changement
b#.clrTextBk&=@rgb(0,200,b#.dwItemSpec&*13+b#.iSubItem&*30)'Hintergrundfarbe qui cellule changement
ret&=~CDRF_NEWFONT
endif
endif
dispose b#
si ret&<>0
@set("WINPROC",0)'muss son, sonst allez's pas
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 allez's malheureusement pas
subclass %HWnd,1'pas qui GridBox subclassen, mais cela Hauptfenster (dahin aller qui 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
si @clicked(_hBende%)
_ende%=1
endif
endwhile
subclass %HWnd,0
@set("FASTMODE",0)
end
attention: si on viele Objekte subclasst et qui Gridbox très grand ist, sollte cela am Anfang qui Subclassproc stehen, weil sonst cela Updaten qui Gridbox erheblich différé volonté peux - insbesondere, si on chaque Element chacun la ligne farblich verändern voudrais, et pas seulement chacun la ligne pour sich unique. |
| | | XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM PM: jreumsc@web.de | 23.05.2018 ▲ |
| |
|
répondreOptions du sujet | 4.639 Views |
Themeninformationencet Thema hat 2 participant: |