delphi中為自定控制項繪製windows按鈕

2021-04-13 00:47:29 字數 1818 閱讀 7249

若要自定工具攔,但也要保留windows樣式的按鈕時

下面給出一種實現

procedure tmybutton.defaultdraw;

var arect,r:trect;

wpos,hpos:integer;

details: tthemedelementdetails;

begin

hpos:=0;

arect:=self.clientrect;

canvas.font:=font;

canvas.brush.color:=$ccffff;

if assigned(fimagelist) then

begin

if (fimagelist.count>0) or (fimage>=0) then

begin

wpos:=(width-imagelist.width) div 2;

if fhot and ( not (csdesigning in componentstate) ) then

begin

r:=rect(wpos-8,0,wpos+fimagelist.width+8,fimagelist.height+16);

if themeservices.themesenabled then

begin

if fdown then

begin

details := themeservices.getelementdetails(themes.ttbbuttonpressed);

endelse

details := themeservices.getelementdetails(themes.ttbbuttonhot);

themeservices.drawelement(canvas.handle, details, r, nil);

endelse

begin

if fdown then

begin

canvas.fillrect(r);

drawedge(canvas.handle, r, bdr_sunkenouter, bf_rect);

endelse

drawedge(canvas.handle, r, bdr_raisedinner, bf_rect);

end;

end;

fimagelist.draw(canvas,wpos,8,fimage);

hpos:=hpos+fimagelist.height+20;

end;

canvas.brush.style:=bsclear;

wpos:=(width-canvas.textwidth(fcaption)) div 2;

canvas.textout(wpos,hpos,fcaption);

exit;

end;

wpos:=(width-canvas.textwidth(fcaption)) div 2;

hpos:=4;

canvas.textout(wpos,hpos,fcaption);

if fhot and ( not (csdesigning in componentstate) ) then

begin

if fdown then

drawedge(canvas.handle,arect,edge_etched,bf_flat or bf_rect)

else

drawedge(canvas.handle,arect,edge_raised,bf_flat or bf_rect);

end;

end;

MFC控制項的自定義繪製

mfc一部分空間提供了對控制項的customdraw,對於控制項的子項都能夠進行定製,如果這樣還是不能滿足應用的話,建議不要用控制項了,直接繼承自cwnd進行全部繪製才是最好的辦法,mfc提供的自繪功能也只能是在一定的限制條件下的,比如子項的統一高度和子項的規則性,比如clistctrl控制項就不能...

Qt自定義控制項 繪製滑動條

主要 展示 標頭檔案 ifndef myslider h define myslider h include include include include include class myslider public qwidget q object public explicit myslider...

Android自定義控制項之繪製選礦中的可選性曲線

原始資料 原始 轉化 excel畫可選性曲線 android繪製可選性曲線 座標軸命名 繪圖區域圍成乙個正方形,它有四個座標軸 座標系命名 你可以使用它繪製5條可選性曲線,請對應著上述總結的 檢視 引入依賴 將washview作為你的主專案的module 引入控制項 android id id id...