pb+api实际应用 联系客服

发布时间 : 星期日 文章pb+api实际应用更新完毕开始阅读

type devmode from structure string dmdevicename integer dmspecversion integer dmdriverversion integer dmsize

integer dmdriverextra long dmfields

integer dmorientation integer dmpapersize integer dmpaperlength integer dmpaperwidth integer dmscale integer dmcopies

integer dmdefaultsource integer dmprintquantity integer dmcolor integer dmduplex

integer dmyresolution integer dmttoption integer dmcollate string dmformname

integer dmunusedpadding long dmbitsperpel long dmpelswidth long dmpelsheight long dmdisplayflags

long dmdisplayfrequency end type

定义外部函数引用声明:

Function long EnumDisplaySettings (long lpszDeviceName, long iModeNum , lpDevMode As DevMode) Library \\

Function long ChangeDisplaySettings (DevMode lpDevMode , long dwflags) Library \

Function long ExitWindowsEx (long uFlags , long dwReserved ) Library \定义实例变量:

Constant long EWX_REBOOT = 2// 注释: 重开机 Constant long CCDEVICENAME = 32 Constant long CCFORMNAME = 32

Constant long DM_BITSPERPEL = 262144

Constant long DISP_CHANGE_SUCCESSFUL = 0 Constant long DISP_CHANGE_RESTART = 1 Constant long CDS_UPDATEREGISTRY = 1

DevMode DevM 实现代码:

w_example窗口的命令按钮cb_1.clicked: boolean a long i long b long ans

a = EnumDisplaySettings(0, 0, DevM) //注释:Initial Setting DevM.dmBitsPerPel = 8 //注释:设定成256色 DevM.dmFields = DM_BITSPERPEL

b = ChangeDisplaySettings(DevM, 0) If b = DISP_CHANGE_RESTART Then

ans = messagebox(\提示\要重开机设定才能完成,重开?\question!,yesno!)

If ans = 1 Then

b = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)

ExitWindowsEx(EWX_REBOOT, 0)//这个api函数只能在win98上使用,win nt以上须采用别的方法 End If Else

If b <> DISP_CHANGE_SUCCESSFUL Then Messagebox(\提示\设定有误\ End If End If

29、彩色BMP档转成灰度

将RGB想成3D之X,Y,Z轴,则BMP的RGB为(r,g,b)与座标(Y,Y,Y)距离最小时的Y即为灰度值

Y = 0.29900 * R + 0.58700 * G + 0.11400 * B

整数化

Y = ( 9798*R + 19235*G + 3735*B) / 32768 RGB(Y, Y, Y)就可以了 实现步骤:

外部函数引用声明:

Funcation long GetPixel (long hdc , long x , long Y) Library \Funcation long SetPixelV (long hdc , long x , long Y , long crColor ) Library \

Funcation long GetDC(long handle) library \定义实例变量: picture tmpPic

窗口w_example的open事件:

P_1.setredraw(false)// 注释:设定所有Pixel的改变不立即在pictureBox上显示

tmpPic = Picture1.Picture

窗口w_example的cb_1.clicked: long width5, heigh5, rgb5 long hdc5, i , j

long bBlue, bRed, bGreen long y

width5 = unitstopixels(P_1.Width,xunitstopixels!) heigh5 =unitstopixels(P_1.height,yunitstopixels!) hdc5 = getdc(handle(this) For i = 1 To width5 For j = 1 To heigh5

rgb5 = GetPixel(hdc5, i, j) bBlue = Blue(rgb5) bRed = Red(rgb5)

bGreen = Green(rgb5)

Y = (9798 * bRed + 19235 * bGreen + 3735 * bBlue) \\ 32768 rgb5 = RGB(Y, Y, Y)

SetPixelV (hdc5, i, j, rgb5) Next Next

P_1.setredraw(true)// 注释:此时才真正显示Picture End Sub

w_example窗口级函数:

Function long Red(long mlColor )

return wf_and(mlColor,255)//对mlcolor进行位与计算 Function long Green(long mlColor ) return wf_and((mlColor/256) ,255) Function long Blue(long mlColor)

return wf_and ((mlColor /65536) ,255)

30、如何将的游标显示成动画游标

动画在 Windows 底下是 .ani 格式的档案, 要显示此类游标,首先要利用LoadCursorFromFile API 载入.ani 档案, 然或利用 SetSystemCursor API 加以显示。 实现步骤: 定义实例变量

Constant long OCR_NORMAL = 32512 Constant long IDC_ARROW = 32512 外部函数引用声明

Function long LoadCursorFromFile (string lpFileName ) Library \

Function long LoadCursor (ref long hInstance , long lpCursorName) Library \//注释: modified

Function long SetSystemCursor (long hcur , long id ) Library \实现代码: long hCursor

hCursor = LoadCursorFromFile(\欲显示的 .ani 或 .cur 档案名称\SetSystemCursor(hCursor, OCR_NORMAL)

//若要将鼠标游标还原原状, 则是执行以下叙述: long ll_temp ll_temp=0

hCursor = LoadCursor(0, IDC_ARROW) SetSystemCursor(hCursor, OCR_NORMAL)