added frameworks entities
This commit is contained in:
290
FRAMEWORKS/STPROC/NDW_HTTP_DATEPICKER_EVENTS.txt
Normal file
290
FRAMEWORKS/STPROC/NDW_HTTP_DATEPICKER_EVENTS.txt
Normal file
@ -0,0 +1,290 @@
|
||||
Function NDW_HTTP_DatePicker_Events(CtrlEntId, Event, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10, Param11, Param12, Param13, Param14, Param15)
|
||||
/***********************************************************************************************************************
|
||||
|
||||
This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
|
||||
permission from SRP Computer Solutions, Inc.
|
||||
|
||||
Name : NDW_HTTP_DatePicker_Events
|
||||
|
||||
Description : This function acts as a commuter module for all events related to this window.
|
||||
|
||||
Notes : Commuter Modules are automatically called from the Promoted_Events function which is called by the
|
||||
application-specific promoted event handler. This makes it possible to add QuickEvents that need to
|
||||
execute Basic+ logic without having use the Form Designer to make the association, although this is
|
||||
limited to the events which are currently promoted.
|
||||
|
||||
If the form needs to call the commuter module directly then the QuickEvent parameters should be
|
||||
formatted like this:
|
||||
|
||||
'@SELF','@EVENT',['@PARAM1','@PARAMx']
|
||||
|
||||
Parameters :
|
||||
CtrlEntId [in] -- The fully qualified name of the control calling the promoted event
|
||||
Event [in] -- The event being executed. See the Notes section regarding "PRE" events
|
||||
Param1-15 [in] -- Additional event parameter holders
|
||||
EventFlow [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
|
||||
EVENT_SETUP insert
|
||||
|
||||
History (Date, Initials, Notes)
|
||||
07/18/19 dmb Original programmer although ported the NDW_DATEPICKER from FrameWorks as a base.
|
||||
|
||||
***********************************************************************************************************************/
|
||||
|
||||
#pragma precomp SRP_PreCompiler
|
||||
#window NDW_HTTP_DATEPICKER
|
||||
|
||||
$insert LOGICAL
|
||||
$insert MSG_EQUATES
|
||||
|
||||
Equ EVENT_CONTINUE$ to 1
|
||||
Equ EVENT_CONTINUE_NO_SYSTEM$ to 3
|
||||
Equ EVENT_STOP$ to 0
|
||||
Equ CRLF$ to \0D0A\
|
||||
|
||||
Declare subroutine Set_Property, Send_Event, Post_Event, Send_Message, SendMessage, End_Dialog
|
||||
Declare function Get_Property, SRP_Get_Window_Rect, Send_Message, SendMessage
|
||||
|
||||
// Get the design time name of the window in case this is a multi-instance window.
|
||||
Window = @Window[1, 'F*']
|
||||
|
||||
// Always get the CtrlClassID since we are not passing it through the event parameters.
|
||||
CtrlClassId = Get_Property(CtrlEntId, 'TYPE')
|
||||
|
||||
// Get the name of the control on the window based on the CtrlClassId.
|
||||
Begin Case
|
||||
Case CtrlClassId EQ 'WINDOW'
|
||||
Control = Window
|
||||
Case CtrlClassId EQ 'RADIOBUTTON'
|
||||
Control = Field(CtrlEntId, '.', 2, 2)
|
||||
Case CtrlClassId EQ 'MENU'
|
||||
Control = CtrlEntId[-1, 'B.']
|
||||
Case 1
|
||||
Control = Field(CtrlEntId, '.', 2, 1)
|
||||
End Case
|
||||
|
||||
If Event EQ 'OLE' then GoSub TransferParams
|
||||
GoToEvent Event for CtrlEntID
|
||||
If Event EQ 'OLE' then GoSub RestoreParams
|
||||
|
||||
Return EventFlow OR EVENT_CONTINUE$
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Events
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Event WINDOW.CREATE(CreateParam)
|
||||
|
||||
GoSub SetupOLEControls
|
||||
GoSub DeterminePosition
|
||||
Set_Property(@Window, 'SIZE', Size)
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event WINDOW.INACTIVATED()
|
||||
|
||||
Post_Event(@Window, 'CLOSE')
|
||||
|
||||
end event
|
||||
|
||||
|
||||
Event PUB_OK.CLICK()
|
||||
|
||||
GoSub ReturnDate
|
||||
|
||||
return
|
||||
|
||||
|
||||
Event OLE_DATEPICKER.OnDblClick(Month, Week, DayOfWeek, Date, Point, Button, Shift, Ctrl)
|
||||
|
||||
If Date NE '' then
|
||||
GoSub ReturnDate
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal Gosubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
SetupOLEControls:
|
||||
|
||||
// All OLE controls can use this qualify configuration.
|
||||
Qualify = ''
|
||||
Qualify<1> = 1
|
||||
Qualify<3> = ''
|
||||
Qualify<4> = 0
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// SRP DatePicker Control
|
||||
//
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
Ctrl = @Window : '.OLE_DATEPICKER'
|
||||
SizeWindow = Get_Property(@Window, 'SIZE')
|
||||
SizePicker = -1 : @FM : -1 : @FM : SizeWindow<3> : @FM : SizeWindow<4>
|
||||
Set_Property(Ctrl, 'SIZE', SizePicker)
|
||||
Set_Property(Ctrl, 'OLE.Theme', 'Windows7Blue')
|
||||
Set_Property(Ctrl, 'OLE.Font', 'Segoe UI' : @SVM : 9 : @SVM : 400)
|
||||
|
||||
// Use asynchronous event handling (because in Dialog Box)
|
||||
Send_Message(@Window : '.OLE_DATEPICKER', 'QUALIFY_EVENT', 'OLE.OnDblClick', Qualify)
|
||||
|
||||
return
|
||||
|
||||
|
||||
TransferParams:
|
||||
|
||||
// ActiveX controls pass their own event names through Param1. Modify the parameter values so they conform to
|
||||
// OpenInsight event parameter values. This will allow commuter modules to be structured the same for OpenInsight
|
||||
// event and ActiveX (OLE) events.
|
||||
Transfer Param1 to Event
|
||||
Transfer Param2 to Param1
|
||||
Transfer Param3 to Param2
|
||||
Transfer Param4 to Param3
|
||||
Transfer Param5 to Param4
|
||||
Transfer Param6 to Param5
|
||||
Transfer Param7 to Param6
|
||||
Transfer Param8 to Param7
|
||||
Transfer Param9 to Param8
|
||||
Transfer Param10 to Param9
|
||||
Transfer Param11 to Param10
|
||||
Transfer Param12 to Param11
|
||||
Transfer Param13 to Param12
|
||||
Transfer Param14 to Param13
|
||||
Transfer Param15 to Param14
|
||||
|
||||
return
|
||||
|
||||
|
||||
RestoreParams:
|
||||
|
||||
// Restore the event parameters so the rest of the event chain will see the parameter values as they were originally
|
||||
// created by OpenInsight. This will also prevent the parameter values from being transferred multiple times in case
|
||||
// there are multiple OLE promoted event handlers (e.g. APPNAME*..OIWIN* and APPNAME*OLE..OIWIN*).
|
||||
Transfer Param14 to Param15
|
||||
Transfer Param13 to Param14
|
||||
Transfer Param12 to Param13
|
||||
Transfer Param11 to Param12
|
||||
Transfer Param10 to Param11
|
||||
Transfer Param9 to Param10
|
||||
Transfer Param8 to Param9
|
||||
Transfer Param7 to Param8
|
||||
Transfer Param6 to Param7
|
||||
Transfer Param5 to Param6
|
||||
Transfer Param4 to Param5
|
||||
Transfer Param3 to Param4
|
||||
Transfer Param2 to Param3
|
||||
Transfer Param1 to Param2
|
||||
Transfer Event to Param1
|
||||
Event = 'OLE'
|
||||
|
||||
return
|
||||
|
||||
|
||||
DeterminePosition:
|
||||
|
||||
Parent = Get_Property(@Window, 'PARENT')
|
||||
|
||||
// Determine the control to do the lookup for
|
||||
CtrlId = Get_Property(Parent, 'FOCUS')
|
||||
|
||||
// Get some property values
|
||||
Ctrls = Parent : @RM : @Window : @RM : CtrlId : @RM : CtrlId : @RM : CtrlId : @RM : CtrlId : @RM : 'SYSTEM'
|
||||
Props = 'MDIFRAME' : @RM : 'SIZE' : @RM : 'TYPE' : @RM : 'HANDLE' : @RM : 'SELPOS' : @RM : 'ORIG_TEXT' : @RM : 'SIZE'
|
||||
Vals = Get_Property(Ctrls, Props)
|
||||
|
||||
Frame = Field(Vals, @RM, 1)
|
||||
Size = Field(Vals, @RM, 2)
|
||||
Type = Field(Vals, @RM, 3)
|
||||
CtlHdl = Field(Vals, @RM, 4)
|
||||
SelPos = Field(Vals, @RM, 5)
|
||||
ProgID = Field(Vals, @RM, 6) ; // To check for OLE EditTables
|
||||
Screen = Field(Vals, @RM, 7)
|
||||
|
||||
// If no frame, use window size to determine if calendar should show below or above control
|
||||
If Frame then
|
||||
WinSize = SRP_Get_Window_Rect(Frame)
|
||||
end else
|
||||
WinSize = SRP_Get_Window_Rect(Parent)
|
||||
end
|
||||
|
||||
Table = (Type EQ 'EDITTABLE') OR (ProgID _EQC 'SRP.EditTable.1')
|
||||
If Table else
|
||||
SelPos = ''
|
||||
end
|
||||
|
||||
If ProgID _EQC 'SRP.EditTable.1' then
|
||||
// OLE EditTables need to use the CellText property
|
||||
ColNo = SelPos<1>
|
||||
RowNo = SelPos<2>
|
||||
Convert @FM to ';' in SelPos
|
||||
DfltDate = Iconv(Get_Property(CtrlId, 'OLE.CellText[':SelPos:']'), 'D')
|
||||
end else
|
||||
DfltDate = Get_Property(CtrlId, 'INVALUE', SelPos)
|
||||
end
|
||||
// Set initial selection to date passed in and make it visible
|
||||
If DfltDate then
|
||||
Set_Property(@Window:'.OLE_DATEPICKER', 'OLE.Selection', DfltDate)
|
||||
Send_Message(@Window:'.OLE_DATEPICKER', 'OLE.EnsureVisible', DfltDate)
|
||||
end
|
||||
|
||||
Rect = Str(\00\, 16)
|
||||
|
||||
CtlSize = SRP_Get_Window_Rect(CtrlId)
|
||||
xPos = CtlSize<1>
|
||||
yPos = CtlSize<2>
|
||||
|
||||
If Table then
|
||||
// add x, y and y+h of cell
|
||||
If ProgID _EQC 'SRP.EditTable.1' then
|
||||
CellSize = Send_Message(CtrlId, 'OLE.GetCellRect', ColNo:@FM:RowNo)
|
||||
*xPos += CellSize<1>
|
||||
xPos += CellSize<1> + 1 ; // This makes alignment better
|
||||
yPos += CellSize<2>
|
||||
cyPos = yPos + CellSize<4>
|
||||
end else
|
||||
LeftBottom = SendMessage(CtlHdl, DTM_GETCELLLEFTBOTTOM$, DTA_CURRENT$, 0)
|
||||
xPos += mod(LeftBottom, 65536)
|
||||
cyPos = yPos + int(LeftBottom / 65536)
|
||||
|
||||
// Get y position with different SendMessage call
|
||||
SendMessage(CtlHdl, DTM_READCELLRECT$, DTA_CURRENT$, GetPointer(Rect))
|
||||
yPos += seq(Rect [5,1]) + (seq(Rect [6,1]) * 256)
|
||||
end
|
||||
end else
|
||||
// get y+h of control
|
||||
cyPos = CtlSize<2> + CtlSize<4>
|
||||
end
|
||||
|
||||
// get y+h of frame or parent window
|
||||
MaxCy = WinSize<2> + WinSize<4>
|
||||
|
||||
// Set x and y of calendar window
|
||||
Size<1> = xPos
|
||||
If Size<1> + Size<3> GT Screen<1> AND (Screen<1> GT Size<1>) then
|
||||
// Shift calendar to left to fit on screen
|
||||
Size<1> = Screen<1> - Size<3>
|
||||
end
|
||||
If cyPos+Size<4> GT MaxCy then
|
||||
// Position above control so calendar shows fully
|
||||
Size<2> = yPos - Size<4>
|
||||
end else
|
||||
Size<2> = cyPos
|
||||
end
|
||||
|
||||
return
|
||||
|
||||
|
||||
ReturnDate:
|
||||
|
||||
SelDate = Get_Property(@Window : '.OLE_DATEPICKER', 'OLE.Selection')
|
||||
End_Dialog(@Window, SelDate)
|
||||
|
||||
// Since we are ending the window now, there is no need to allow the event chain to continue.
|
||||
// If we do, then we will get the "labeled common variable has been freed and is no longer valid" error.
|
||||
EventFlow = EVENT_CONTINUE_NO_SYSTEM$
|
||||
|
||||
return
|
Reference in New Issue
Block a user