国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

修改XPMenu讓ToolButton在Down=True時(shí)正確顯示

2019-11-18 18:02:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
XPMenu是一個(gè)不錯(cuò)的程序界面效果控件,但它也存在不少不足之處。我最近又對(duì)它作了一點(diǎn)修改。
  原因是我在程序里有一個(gè)ToolButton,其Style=tbsButton,當(dāng)Down=True時(shí),XPMenu繪制的效果效果跟Down=False時(shí)一樣,也就是說(shuō)根本看不出它是按下的。當(dāng)把Style改為tbsCheck后,卻能顯示效果,但是底色很深。
  這個(gè)按鈕來(lái)我是用來(lái)表示某個(gè)面板是否可以顯示的,我希望它像OfficeXP的工具按鈕那樣,當(dāng)工具條顯示時(shí),在按鈕上畫個(gè)邊框即可,而不是以很深的底色顯示。
  XPMenu繪制工具欄按鈕是由TXPMenu.ToolBarDrawButton函數(shù)完成,原型為如下:
PRocedure TXPMenu.ToolBarDrawButton(Sender: TToolBar;  Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
  在函數(shù)內(nèi)由以下代碼決定按鈕是否顯示邊框,以及用什么顏色作底色:
if (cdsHot in State) then
  begin
    if (cdsChecked in State) or (Button.Down) or (cdsSelected in State) then
      ACanvas.Brush.Color := FCheckedAreaSelectColor
    else
      ACanvas.brush.color := FBSelectColor;
    HasBorder := true;
    HasBkg := true;
  end;

  if ((cdsChecked in State) and not (cdsHot in State)) then
  begin
    ACanvas.Brush.Color := FCheckedAreaColor;
    HasBorder := true;
    HasBkg := true;
  end;

  if (cdsIndeterminate in State) and not (cdsHot in State) then
  begin
    ACanvas.Brush.Color := FBSelectColor;
    HasBkg := true;
  end;

  它忽略掉了非cdsHot、非cdsChecked狀態(tài)下按鈕的Down=True的情況的處理。因此只要加上相應(yīng)的判斷,并讓HasBorder=true即可達(dá)到我希望的效果。修改后代碼如下:
if (cdsHot in State) then
  begin
    if (cdsChecked in State) or (Button.Down) or (cdsSelected in State) then
      ACanvas.Brush.Color := FCheckedAreaSelectColor
    else
      ACanvas.brush.color := FBSelectColor;
    HasBorder := true;
    HasBkg := true;
  end;

  if ((cdsChecked in State) and not (cdsHot in State)) then
  begin
    ACanvas.Brush.Color := FCheckedAreaColor;
    HasBorder := true;
    HasBkg := true;
  end;

{Modify: Conch 2005-3-10 在Down=true的按鈕上畫出邊框}
  if (Button.Down) and not (cdsHot in State) then
  begin
    HasBorder := true;
    HasBkg := false;
  end;
//Conch

  if (cdsIndeterminate in State) and not (cdsHot in State) then
  begin
    ACanvas.Brush.Color := FBSelectColor;
    HasBkg := true;
  end;


上一篇:我的共享軟件防破解的實(shí)用著法

下一篇:自定義的TShockwaveflash

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 通河县| 汽车| 兴仁县| 车险| 寻甸| 大方县| 祁东县| 东宁县| 五华县| 凉城县| 鄂尔多斯市| 南郑县| 芷江| 定南县| 开封市| 富宁县| 仙桃市| 获嘉县| 繁昌县| 维西| 长沙县| 蓬溪县| 四平市| 赣州市| 开封县| 巴东县| 贵阳市| 永济市| 平舆县| 汝阳县| 海阳市| 行唐县| 正宁县| 大同县| 庆安县| 泾阳县| 河间市| 彩票| 大兴区| 河间市| 金塔县|