哪位好心的大侠知道在PB中怎么使用【comctl32.dll】中的日历控件【sysdatetimepick32】

haoshare 2005-11-17 01:30:16
我刚用PB不久,刚刚用PBkiller反编译别人的程序来学习,但是我使用反编译出来的代码去不能显示【comctl32.dll】中的日历控件【sysdatetimepick32】
,而我运行他的安装程序日历控件却是可以用的!

弄了好久都没有弄出来,不知道是反编译的出来的代码有问题还是别的原因?后来我参考了一下反编译出来的代码,自己做了一个用户对象【uo_sysdatetimepick32】,不过把它加到窗口中,也没有看到这个日历控件!

我把我反编译的代码和我自己做的【uo_sysdatetimepick32】的代码都列在下面!

哪位好心的大侠可以帮帮我,非常感谢!

我反编译出来的代码如下:
====================
forward
global type uo_comctl_datetime from userobject
end type
end forward

global type uo_comctl_datetime from userobject
integer width = 508
integer height = 99
long backcolor = 0
string classname = "sysdatetimepick32"
string libraryname = "comctl32.dll"
long style = 1174405120
end type
global uo_comctl_datetime uo_comctl_datetime

type variables
private nvo_comctl_datetime iuodatetime
end variables

forward prototypes
public subroutine of_getobject (ref nvo_comctl_datetime auodatetimepicker)
public function datetime of_getdate ()
public subroutine of_setdate (date ld_rq)
public subroutine of_setdate (datetime ldt_rq)
public subroutine of_setdate (string ls_rq)
public subroutine of_getdate (ref string ls_date)
public subroutine of_getdate (ref datetime ldt_rq)
public subroutine of_getdate (ref date ld_rq)
public subroutine of_getdate (ref time lt_rq)
public subroutine of_setdate (time lt_time)
end prototypes

public subroutine of_getobject (ref nvo_comctl_datetime auodatetimepicker);auodatetimepicker = iuodatetime
return
end subroutine

public function datetime of_getdate ();nvo_comctl_datetime lnvodatetime
datetime ldtselected
string lsselecteddate

if isvalid(this) then
of_getobject(lnvodatetime)
ldtselected = lnvodatetime.of_getdatetime()
end if

return ldtselected
end function

public subroutine of_setdate (date ld_rq);datetime ldt_rq

ldt_rq = datetime(ld_rq)
iuodatetime.of_setdatetime(ldt_rq)
end subroutine

public subroutine of_setdate (datetime ldt_rq);iuodatetime.of_setdatetime(ldt_rq)
end subroutine

public subroutine of_setdate (string ls_rq);date ld_rq
datetime ldt_rq

if len(ls_rq) = 8 then
ls_rq = left(ls_rq,4) + "-" + mid(ls_rq,5,2) + "-" + right(ls_rq,2)
end if

ld_rq = date(ls_rq)
ldt_rq = datetime(ld_rq)
iuodatetime.of_setdatetime(ldt_rq)
end subroutine

public subroutine of_getdate (ref string ls_date);nvo_comctl_datetime lnvodatetime
datetime ldtselected
date ldselected

if isvalid(this) then
of_getobject(lnvodatetime)
ldtselected = lnvodatetime.of_getdatetime()
ldselected = date(ldtselected)
ls_date = string(year(ldselected)) + string(month(ldselected),"00") + string(day(ldselected),"00")
end if
end subroutine

public subroutine of_getdate (ref datetime ldt_rq);nvo_comctl_datetime lnvodatetime

if isvalid(this) then
of_getobject(lnvodatetime)
ldt_rq = lnvodatetime.of_getdatetime()
end if
end subroutine

public subroutine of_getdate (ref date ld_rq);nvo_comctl_datetime lnvodatetime

if isvalid(this) then
of_getobject(lnvodatetime)
ld_rq = date(lnvodatetime.of_getdatetime())
end if
end subroutine

public subroutine of_getdate (ref time lt_rq);nvo_comctl_datetime lnvodatetime

if isvalid(this) then
of_getobject(lnvodatetime)
lt_rq = time(lnvodatetime.of_getdatetime())
end if
end subroutine

public subroutine of_setdate (time lt_time);datetime ldt_date

ldt_date = datetime(date("1900-01-01"),lt_time)
iuodatetime.of_setdatetime(ldt_date)
end subroutine

event constructor;iuodatetime = create nvo_comctl_datetime
iuodatetime.of_sethandle(handle(this))
return 0
end event

on uo_comctl_datetime.create
end on

on uo_comctl_datetime.destroy
end on

event destructor;destroy(iuodatetime)

end event


【uo_sysdatetimepick32】
====================
forward
global type uo_sysdatetimepick32 from userobject
end type
end forward

global type uo_sysdatetimepick32 from userobject
integer width = 508
integer height = 99
boolean border = true
userobjects objecttype = externalvisual!
long backcolor = 0
string classname = "sysdatetimepick32"
string libraryname = "J:\shareDll\comctl32.dll"
long style = 1174405120
end type
global uo_sysdatetimepick32 uo_sysdatetimepick32

on uo_sysdatetimepick32.create
end on

on uo_sysdatetimepick32.destroy
end on

...全文
1476 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2005-12-08
  • 打赏
  • 举报
回复
支持一下
xiongxiao 2005-12-08
  • 打赏
  • 举报
回复
PB10开始PB中自带日历控件
一手软一手硬 2005-12-02
  • 打赏
  • 举报
回复
楼主碰到好人了
Supernpc 2005-12-01
  • 打赏
  • 举报
回复
自己写一个日历控件就好了.大小格式自己控制,多好..
haoshare 2005-12-01
  • 打赏
  • 举报
回复
谢谢大家,刚从外地出差回来,没想到工作这么辛苦的,也没想到这么多天没上网,一上来还有这么多热心的朋友给予我这么无私的帮助,明天我应该有时间根据你们告诉我的方法好好试试,谢谢你们!

另外请知道怎么给分的朋友告诉我一声怎么给帮助过我的朋友加分,谢谢!

呵呵,别笑话我,我这是第一次到这里来问问题,发现这里挺好的,人气不错,网友也非常热心!
phenix16 2005-11-27
  • 打赏
  • 举报
回复
新建个external visual(别告诉我你不知道怎么建),在类的名字填上comctl.dll,在类名填上sysdatetimepick32,ok可以使用了。
sunday_hl 2005-11-19
  • 打赏
  • 举报
回复
sunday_hl@mail.csdn.net
haoshare 2005-11-18
  • 打赏
  • 举报
回复
现在我最急需解决的问题是程序中用到了我反编译出来的按钮控件(pfc_picture_command_button、pfc_picture_command_button_cancel、pfc_picture_command_button_ok、pfc_tooltip)的代码来显示界面,也是遇到与我前面相似的问题【Null object reference at line 4 in constructor event of object pfc_picture_command_button】,不知道该怎么解决这个问题。

我把我遇到问题所涉及到的东西都放在我上传的文件中,大家可以看看,网址是【http://www.hur.cn/bbs/dispbbs.asp?boardid=85&id=47694】。

我想应该这几个都是通用的组件,不知道哪位大侠可以发一份给我!

这些组件在我反编译的程序中都是在【print.pbl】中的,我看了一下可以导出如下对象:

dw_savetoexcel.srd
dw_savetoexcel_columns.srd
f_columname.srf
f_datawindow_to_word.srf
f_getvalue.srf
f_pbtoexcel.srf
gf_cm_center_window.srf
gf_cm_dw_printpreview.srf
gf_savetoexcel.srf
m_cm_dw_print_preview.srm
pfc_picture_command_button.sru
pfc_picture_command_button_cancel.sru
pfc_picture_command_button_ok.sru
pfc_picture_status_button.sru
pfc_response.srw
pfc_tooltip.sru
u_selection_list.sru
w_cm_dw_print_preview_popup.srw
w_cm_print_setup.srw
wwd_f_centralizewindow.srf

其中以下几个对我来说最关键:
pfc_picture_command_button.sru
pfc_picture_command_button_cancel.sru
pfc_picture_command_button_ok.sru
pfc_picture_status_button.sru
pfc_response.srw
pfc_tooltip.sru
u_selection_list.sru
w_cm_dw_print_preview_popup.srw
w_cm_print_setup.srw
wwd_f_centralizewindow.srf

如果您那有的话一起发给我吧,有些东西也许对您这样的大侠来说是举手之劳(就只要花您几分钟),但是对我这样的菜鸟来说可能是几天几十天也弄不出来的!

我的邮箱是【haoshare@163.com】,非常感谢!

我刚刚注册,对于这边怎么送分还不是很清楚,我知道对于你们来说不一定会把分看在眼里,但是帮助过我的人我一定要送分表示感谢!
balloonman2002 2005-11-17
  • 打赏
  • 举报
回复
uo_comctl_datetime、nvo_comctl_datetime这些UO在下面的例子里有:

http://www.pdriver.com/display.asp?key_id=1494
http://www.pdriver.com/display.asp?key_id=1428
http://www.pdriver.com/display.asp?key_id=1419
haoshare 2005-11-17
  • 打赏
  • 举报
回复
TO hygougou(狗狗) 兄

呵呵,看得出来你是这里的资深网友,在这混一定很久了,很高兴认识你,以后还有很多问题向你请教!

可能我说得不是很明白,我的意思是之所以想知道怎么使用这些控件不纯粹是为了学习怎么做界面的东西,而是我要学习的程序里面用到了这些控件,不把它们弄出来,我没法正常调试运行我要学习的别人的程序,这样不便于我通过学习别人的程序更快的提高自己的PB水平!
hygougou 2005-11-17
  • 打赏
  • 举报
回复
我就说的这个控件源代码网上很多,何必反编译呢?:)

应用该控件在其它开发工具上的例子也很多,呵呵~~
haoshare 2005-11-17
  • 打赏
  • 举报
回复
问题是我要通过看人家编写的程序来学习PB,所以我需要这些东西才能完整的调试运行程序!

比它好的日历控件网上却是是有很多!
hygougou 2005-11-17
  • 打赏
  • 举报
回复
呵呵,这个控件网上应该很多,

其它工具上的例子也很多
haoshare 2005-11-17
  • 打赏
  • 举报
回复
哦,对了,我的邮箱是【haoshare@163.com】

上面我所说的不是【uo.pbd】,而是【ui.pbd】,敲错了一个字!

我反编译的【ui.pbd】好像里面全部都是一些用户界面的方面的东西,如果哪位大侠有最好可以顺便发给我学习学习,象我这样的菜鸟要一个个的去解决问题真的很麻烦的,谢谢了!

【ui.pbd】中有如下用户对象:

nvo_comctl_datetime
nvo_comctl_monthcal
nvo_diskinfo
nvo_month_dw
nvo_qq_group
nvo_qq_node
nvo_systray2
nvo_tooltips
nvo_transparent
u_analog_clock
u_lbs_stsplitbar
u_tv
u_vst_link
ufc_u_splitbar
uo_angle
uo_color_selection
uo_comctl_date_fordw
uo_comctl_datetime
uo_comctl_datetime_fordw
uo_comctl_monthcal
uo_coolbutton
uo_dwsort
uo_dwtoword
uo_flat_btn
uo_flat_picbtn
uo_flat_textbox
uo_gradientfillbutton
uo_groupbox
uo_imflatbutton
uo_navigate_treeview
uo_pfc_splitbar
uo_pfc_statusbar
uo_qq_button
uo_qq_header
uo_qq_panel
uo_qq_pb
uo_radiobutton
uo_statictext
uo_systray2
uo_toolbar
uo_toolbar_button
uo_toolbar_menuseperator
uo_toolbar_space
uo_tooltip
uo_xp_button
uo_xp_editmask
uo_xp_textbox
uo_xpbutton
uo_xpbutton1
uo_xpradiobutton
haoshare 2005-11-17
  • 打赏
  • 举报
回复
谢谢你们,我真是太幸运了,第一次提问就遇到你们两位热心的大侠!

我发现反编译出来的代码是有问题的,我用的反编译工具是PBKiller.exe v1.5.07,但是这个软件还是有些不完善的地方,有的代码错误,数据窗口对象反编译不出来,如果你们谁知道有什么好的工具的话,记得告诉我一声,谢谢各位大侠了!

顺便问一下我发现反编译出来的【uo_comctl_datetime】的代码是有问题的,那就是没发现有创建实例的语句,我将反编译出来的代码加到我的程序里面,运行到调用它的时候老报错,说是空对象:

就拿我上面贴出来的关于【uo_comctl_datetime】的那段代码来说吧,它的【constructor】事件的第一句代码【iuodatetime = create nvo_comctl_datetime
】是我加进去的,本来没有的:

event constructor;iuodatetime = create nvo_comctl_datetime
iuodatetime.of_sethandle(handle(this))
return 0
====================
我对PB不是很熟,我不知道有了下面这样的语句之后,是否还需要在后面加上【iuodatetime = create nvo_comctl_datetime】这句代码来创建【iuodatetime】这个对象?
type variables
private nvo_comctl_datetime iuodatetime
end variables

end event
====================

我看了一下所有的对象都是在一个叫【uo.pbd】中的,除了【uo_comctl_datetime、nvo_comctl_datetime】这对对象之外还有【uo_comctl_monthcal、nvo_comctl_monthcal】这对对象,我想他们也应该有相似的问题,如果您那有的话一起发给我吧,有些东西也许对您这样的大侠来说是举手之劳(就只要花您几分钟),但是对我这样的菜鸟来说可能是几天几十天也弄不出来的!

另外我自己想办法解决了从【PBD 】中反编译出数据窗口对象的问题,各位帮助过我的大侠如果有需要,我可以马上把我知道的告诉您!
lzheng2001 2005-11-17
  • 打赏
  • 举报
回复
太长了,不好发,要的留下EMAIL吧
lzheng2001 2005-11-17
  • 打赏
  • 举报
回复
一共有两个userobject,要结合使用, 一个是uo_comctl_datetime用于显示;另一个是nvo_comctl_datetime是非可视的对象,封装了对uo_comctl_datetime的所有操作(如,函数)

以下发一个pb8导出的语法,你把它导入使用就是了.
j9dai 2005-11-17
  • 打赏
  • 举报
回复
private nvo_comctl_datetime iuodatetime
缺少最重要的东东nvo_comctl_datetime
里面包面创建日历控件(其实也是一个Window)的代码
haoshare 2005-11-17
  • 打赏
  • 举报
回复
补充一点:

因为这里没有文件上传的功能,所以我只好把上传的文件放在另外一个地方!

我上传的文件是我做试验的相关文件,主要有【comctl32.dll】以及【test.pbl】中的【uo_sysdatetimepick32】【w_test】这两个对象!

网址是:【http://www.hur.cn/bbs/dispbbs.asp?boardid=85&id=47694】

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧