设置参数!(100分)

  • 主题发起人 主题发起人 pingshx
  • 开始时间 开始时间
P

pingshx

Unregistered / Unconfirmed
GUEST, unregistred user!
对Tdatetimepicker的DTN_DATETIMECHANGE 消息如何设置参数:
我现在用别人提供的ocx,上有Tdatetimepicker ,现在想对其发送DTN_DATETIMECHANGE 消息,sendmessage(handle,DTN_DATETIMECHANGE,?,?)

不知后面两个参数如何设置? 现在没有找到相应的帮助文档麻烦各位大侠帮忙!是否可以用别的办法触发它的onchange事件,这里没有相应的变量只可以获得它的句柄?
Thank you!
[red][/red]
 
var d:NMDATETIMECHANGE

d.nmhdr.hwndFrom:=datetimepicker1.Handle

d.nmhdr.idFrom:=NULL

dtc.nmhdr.code:=DTN_DATETIMECHANGE

datetimepicker1.Perform(WM_NOTIFY, NULL,longint(d))


不知道这样行不行你试试看,不过改改估计能过吧
 
52free谢谢你的回答,但是我现在肯定有能用perform来执行消息,因为我只能捕获他的句柄,
无法获的相应的变量,只能用sendmessage或postmessage来操作,麻烦大家积极帮忙!谢谢!
 
52free,你好,把var d:NMDATETIMECHANGE;改为d:tnmdatetimechange,把d.nmhdr.idFrom:=NULL

改为d.nmhdr.idFrom:=44245;随便一个数字,把dtc.nmhdr.code:=DTN_DATETIMECHANGE
改为:
d.nmhdr.code:=DTN_DATETIMECHANGE
是可以触发datetimepicker的onchange事件,但我现在只能
捕捉到activex上datetimepicker的句柄,也就无法用perform这个api,有没有可以转换到用
sendmessage,postmessage的方法呀,各们老大救救我!
 
可以用datetimepicker,写上它的onchange,用sendmessage,postmessage操作!
 
var d:NMDATETIMECHANGE

d.nmhdr.hwndFrom := datetimepicker1.Handle

d.nmhdr.idFrom := NULL

d.nmhdr.code:=DTN_DATETIMECHANGE

d.dwFlags := GDT_VALID;//加上这个看看
sendmessage(handle,DTN_DATETIMECHANGE,NULL,longint(d))
 
还要加上
d.st := DateTimeToSystemTime(你要设定的日期)
 
shenloqi你好,谢谢你的解答,但是sendmessage仍通不过,sendmessage的第三个参数错误!
进来的各位老大帮帮我!
 
DTN_DATETIMECHANGE
This notification message is sent by a date and time picker (DTP) control whenever a change occurs. It is sent in the form of a WM_NOTIFY message.

At a Glance

Header file: Commctrl.h
Windows CE versions: 2.0 and later


Syntax

DTN_DATETIMECHANGE
lpChange = (LPNMDATETIMECHANGE) lParam;

Parameters

lpChange

Long pointer to an NMDATETIMECHANGE structure that contains information about the change that took place in the control.

Return Values

The owner of the control must return zero

MSDN的说明,应该够详细了吧
 
你要实现的什么样的效果?是不是更改Tdatetimepicker的值?
 
to:诸葛白痴
人家的做法不都是这样的么,你看看MSDN说了什么具体的如何发送这个消息的么?
MSDN说这个方法是空间内部处理的呢。
 
我用人家的ocx,上面有datetimepicker, 更改时间之后,还要发送onchange事件,
这ocx自动从远方写数过来,可以在uses中加入commctrl 然后用
sendmessage(handle,dtn_setdatetime,longint(t),0), 设置好时间之后,还要
触发它的onchagne事件,才可以实现调用远方的数据,该死的是这个ocx没
有提供相应的接口,做的绝呀!没有用编程来控制的话,我们平常用鼠标选中这个
datetimepicker之后,然后选择时间,这样操作有设置时间操作,也有onchange事件,
所以编程来控制的话,也应有设置时间操作,也有onchange事件!
 
to 诸葛白痴:
你说这些在commctrl.pas中有,但涉及datetimepiker的onchange信息太少,我从大量的
windows编程书籍中查找,也只找到你提供类似信息,但dtn_datetimechange的两个参数没有
说呀!
 
用Delphi自己的TDateTimePicker通过了
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls,CommCtrl;

type
TForm1 = class(TForm)
DateTimePicker1: TDateTimePicker;
Memo1: TMemo;
Button1: TButton;
procedure DateTimePicker1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
Memo1.Lines.Add(IntToStr(Memo1.Lines.Count) + ':changed');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
d: TNMDATETIMECHANGE;
t:_SYSTEMTIME;
begin
d.nmhdr.hwndFrom := DateTimePicker1.Handle;
d.nmhdr.idFrom := 0;
d.nmhdr.code:=DTN_DATETIMECHANGE;
d.dwFlags := GDT_VALID;//加上这个看看
DateTimeToSystemTime(Date,t);
d.st := t;
PostMessage(DateTimePicker1.Handle ,WM_NOTIFY,0,Longint(@d))
end;

end.
 
我说的这个控件,我们自己可以用delphi的activeform技术来模拟:
在activeform中放上datetimepicker,query,dbsource,dbgrid,一但
datetimvepikcer选择了时间,query就从数据库中选择这一日的数据!
编译完之后,注册,通过componet/import active安装到delphi上,然
后把这个控件拖放到form中,用emumchildwindows捕捉这个控件上的
datetimepicker这个句柄,要实现缟码来选择时间,显示数据!
 
是要改变时间吗?
本想将我的代码贴上来,看来shenloqi的代码跟我的差不多!
其中DateTimePicker1.Handle改成你得到的OCX上DateTimePicker的句柄就成了.
 
对进入本贴的朋友表示衷心的感谢,特别是shenloqi的帮助!
 
后退
顶部