用PB内部函数更改PB自带Toolbar的字体

来源:互联网 发布:ajax后台获取前端数据 编辑:程序博客网 时间:2024/06/06 17:45
 

PB自带的Toolbar的字体太丑陋了。  

 

方法A:

 PBVMX0.dll里面有个FN_ToolBarSetFont函数,可以用来修改Toolbar的字体,经过一番研究,写出了这个程序。  

  已经作成了UserObject。这里传上来的程序是用PB6.5写的,在PB8和PB6.5下跑均没问题。PB7下没跑过。  

  注意在升级到别的版本时,FN_ToolBarSetFont的声明中要指定相应的library"pbvmx0.dll"  

   

  以下是uo_toolbarfont的主要部分  

  typeprototypes  

  functionlongFindWindowExA(longhParent,longhChildAfter,StringlpszClass,StringlpszWindow)Library"user32.dll"  

  functionlongGetWindowLongA(longhWnd,integerindex)Library"user32.dll"  

  functionlongFN_ToolBarSetFont(longunknown,stringfontname,longfontsize,longunknown1,stringstr)library"pbvm60.dll"    

  endprototypes  

  forwardprototypes  

  publicfunctionlongof_gettoolbarhandle(windowaw_frame)  

  publicsubroutineof_settoolbarfont(windowaw_frame,stringas_fontname,integerai_fontsize,stringas_extent)  

  endprototypes  

  publicfunctionlongof_gettoolbarhandle(windowaw_frame)&#59;//得到Toolbar的HANDLE  

  longll_NULL,ll_hwndToolBar  

  stringls_ClassName,ls_WindowName  

  EnvironmentlEnv  

  IFIsValid(aw_Frame)AND(GetEnvironment(lEnv)=1)THEN  

  CHOOSECASElEnv.PBMajorRevision  

  CASE6  

  ls_ClassName="FNFIXEDBAR60"  

  case8  

  ls_ClassName="FNFIXEDBAR80"  

  case7  

  ls_ClassName="FNFIXEDBAR70"  

  //我没用过PB7,我猜应该是"FNFIXEDBAR70"  

  ENDCHOOSE  

  SetNull(ls_WindowName)  

  SetNull(ll_NULL)  

  ll_hwndToolBar=FindWindowEXA(Handle(aw_Frame),ll_NULL,ls_ClassName,ls_WindowName)  

  ENDIF  

  RETURNll_hwndToolBar  

  endfunction  

  publicsubroutineof_settoolbarfont(windowaw_frame,stringas_fontname,integerai_fontsize,stringas_extent)&#59;//---------------------------------  

  //uo_toolbarfontver1.0  

  //作者:WangAQ(ozen_wang@msn.com)2002.11.6  

  //设置工具条的字体  

  //参数说明:  

  //windowaw_frameMDIFrameWindow  

  //stringas_fontname字体名称  

  //integerai_fontsize字体大小,这里一般设为负值,可参考Win32SDK中有关字体的文档。工具条的高度会根据自己的大小自动调整。  

  //stringas_extent该参数影响工具条上每个按钮的宽度  

  //PBVM60中的FN_ToolBarSetFont的说明  

  //注意在别的版本上要指明相应的PBVMX0.dll  

  //FN_ToolBarSetFont(longunknown,stringfontname,longfontsize,longunknown1,stringstr)  

  //第一个参数我不知道其确切含义,但我猜想其级有可能是Toolbar对象的指针。我发现在PBVM里是通过  

  //GetWindowlong(handleoftoolbar,0)来取得该指针的。  

  //第二和第三个参数分别为字体名称和大小。  

  //第四个参数我也不知道它是干什么的,但我发现PBVM里总是赋其值为0  

  //第五个参数最有意思,PBVM用他来做为GetTextExtentPoint的第二个参数来获得工具条上的按钮上的文字  

  //在指定字体下的宽度,如果为空,PB会用"1234567890"来调用GetTextExtentPoint,这样如果字体变大,每个按钮就会变的很宽很扁  

   

  longll_hwndToolBar,ll_unknown  

  ll_hwndToolBar=of_GetToolBarHandle(aw_frame)  

  ifll_hwndToolBar>0then  

  ll_unknown=GetWindowLongA(ll_hwndToolBar,0)  

  FN_ToolBarSetFont(ll_unknown,as_fontname,ai_fontsize,0,as_extent)  

  endif  

  endsubroutine

 

方法B:

 

最近有个项目要求有带文字的工具栏,可是工具栏的字体太小,不清楚,想放大,谁有办法?

1菜单:windows--->Toolbars

打开后会弹出个窗口,修改里面的 FontName 和 FontSize 就行了 :)

编辑时可以,编译后不可以。

2

用UltraEdit之类的编辑器打开PBVM70.DLL,切换到16进制模式

 

把下面的字符

85F675186A486A5A50FF1560104711506A06

改为:

85F675186A486A5A50FF1560104711506A08

 

问题已经解决,方法同NetColorWolf(NCW)所讲,高手之高手!!

但在用UltraEdit查找不到 

85F675186A486A5A50FF1560104711506A06

而是将

85 F6 75 18 48 6A 5A 50 FF 15 60 10 47 11 50 6A 06

更改为

85 F6 75 18 48 6A 5A 50 FF 15 60 10 47 11 50 6A 08

 

NetColorWolf(NCW) (

///////////////   源  //////////////

85F675186A486A5A50FF15????????506A06

////////////////////////////////////

改成:

//////////////   目标  /////////////

85F675186A486A5A50FF15????????506A08

////////////////////////////////////

 

方法C:

 

调用PB的DLL的API

function long FN_ToolBarSetFont(long unknown,string fontname,long fontsize,long unknown1,string str) library "pbvm70.dll"

//PBVM70中的FN_ToolBarSetFont的说明

//注意在别的版本上要指明相应的PBVMX0.dll

//FN_ToolBarSetFont(long unknown,string fontname,long fontsize,long unknown1,string str)

//第一个参数我不知道其确切含义,但我猜想其级有可能是Toolbar对象的指针。我发现在PBVM里是通过

//GetWindowlong(handleoftoolbar,0)来取得该指针的。

//第二和第三个参数分别为字体名称和大小。

//第四个参数我也不知道它是干什么的,但我发现PBVM里总是赋其值为0

//第五个参数最有意思,PBVM用他来做为GetTextExtentPoint的第二个参数来获得工具条上的按钮上的文字

//在指定字体下的宽度,如果为空,PB会用"1234567890"来调用GetTextExtentPoint,这样如果字体变大,每个按钮就会变的很宽很扁