Hi, > I need to be able to set and read the minutes and seconds for a date time > control, but from the XS code it looks like this is not possible (!?).
Yes, Win32::GUI::DateTime by default only work with date.
You can turn it to a time control by adding DTS_TIMEFORMAT (0x0009)
style.
> Could sending messages to the control work? I’ve tried it, but didn’t get
> anywhere fast…
Yes, you can but you need to use a Win32::API because
Win32::GUI::SendMessage handle LPARAM as a numeric value.
See Attached file, for a sample. With last Win32::API, you can use
Win32::API::Struct instead pack/unpack.
> But…I’ve never built win::gui from scratch, nor played with XS. I must
admit
> that I am daunted at the prospect! I am desperate, so am willing to go
> through the learning curve and would be grateful for any pointers to where
I
> should start.
If you want build Win32::GUI from scratch.
You must have Visual C++ 6.
I'm not 100% sure but with ActiveState you need a specific service pack
depending perl version.
- for ActivePerl 5.6 and 5.8 => SP6
- for ActivePerl 5.005 => SP4
I suppose you have VC and perl in your path and all is working ok.
1) Open a dos/cmd sonsole
2) Go to Bin directory of your Visual C++, and run VCVARS32.bat.
3) Go to Win32::GUI directory.
perl MakeFile.pl <-- make a makefile for build
Win32::GUI
nmake <-- build Win32::GUI
nmake install <-- install Win32::GUI in perl
directory.
If all Work, you can modify GUI.XS and rebuild (nmake) and install
(nmake install).
For learn XS programming, take a look to perlxs documentation.
You have perlxstut for build a xs from scratch.
Call simple function is not very difficult if you have some C knowlege.
You can look to GUI.xs for different code samples
See below for what you can do for set and get date&time information.
(I have not test this code but i think it's ok)
Laurent.
###########################################################################
# (@)METHOD:GetDateTime()
# (preliminary) Returns the date and time in the DateTime control in a three
# elements array (year, month, day, dayofweek, hour, minute, second,
millisecond).
void
GetDateTime(handle)
HWND handle
PREINIT:
SYSTEMTIME st;
PPCODE:
if(DateTime_GetSystemtime(handle, &st) == GDT_VALID) {
EXTEND(SP, 8)
XST_mIV(0, st.wYear);
XST_mIV(1, st.wMonth);
XST_mIV(2, st.wDay);
XST_mIV(3, st.wDayOfWeek);
XST_mIV(4, st.wHour);
XST_mIV(5, st.wMinute);
XST_mIV(6, st.wSecond);
XST_mIV(7, st.wMilliseconds);
XSRETURN(8);
} else {
XSRETURN_UNDEF;
}
###########################################################################
# (@)METHOD:SetDateTime(YEAR,MOn, DAY, HOUR, MIN, SEC, [MSEC=0])
# (preliminary) Sets the date in the DateTime control
BOOL
SetDateTime(handle, year, mon, day, hour, min, sec, msec=0)
HWND handle
int year
int mon
int day
int hour
int min
int sec
int msec
PREINIT:
SYSTEMTIME st;
CODE:
ZeroMemory(&st, sizeof(SYSTEMTIME));
st.wYear = year;
st.wDay = day;
st.wMonth = mon;
st.wHour = hour;
st.wMinute = min;
st.wSecond = sec;
st.wMilliseconds = msec;
RETVAL = DateTime_SetSystemtime(handle, GDT_VALID, &st);
OUTPUT:
RETVAL
##############################
<<attachment: DateTime.zip>>

