Hi,
The following code example shows how to add the DateTimePicker control, but can be used for any control. The original version of this code is found at: http://forum.codejock.com/forum_posts.asp?TID=18679&KW=DateTimePicker&title=adding-control-please-help - http://forum.codejock.com/forum_posts.asp?TID=18679&KW=DateTimePicker&title=adding-control-please-help
However I have changed the code to use the BeginEdit event as this works better than FocusChanging. I also tweaked the code to set the position relative to the ReportControls position, as this is not always set as Left = 0 and Top = 0 on the screen.
The code for showing/hiding the DateTimePicker has been added to a module so this can be reusable for any ReportControl.
Note: I prefer to use the MSComCtl2.DTPicker instead of Codejocks XtremeSuiteControls.DateTimePicker as it allows me to change the colours. I find the XtremeSuiteControls.DateTimePicker Day names to be unreadable when used in conjunction with the SkinFramework control. Plus if you use the XtremeSuiteControls.DateTimePicker you will find the navigation on press of the Tab key doesn't quite work correctly as when the DateTimePicker has focus it then moves out of the ReportControl into other controls even with TabStop set as false! Using the MSComCtl2.DTPicker resolves this when setting TabStop to False allowing the Tab key navigation to flow correctly within the ReportControl even when the DTPicker has focus.
Form Code
' Some test data for this example Private Sub Form_Load() With ReportControl .AllowEdit = True .AutoColumnSizing = True .EditOnClick = True .FocusSubItems = True Dim Column As ReportColumn Set Column = .Columns.Add(0, "Column 1", 150, False) Set Column = .Columns.Add(1, "Date 1", 90, False) Set Column = .Columns.Add(2, "Date 2", 90, False) .Populate Dim Record As ReportRecord For i = 0 To 100 Set Record = .Records.Add With Record .AddItem "Row: " & i .AddItem Date .AddItem Date End With Next .Populate End With End Sub
' Below is the code events required for the DateTimePicker & ReportControl Private Sub DateTimePicker_Change() ReportControl.FocusedRow.Record(ReportControl.FocusedColumn.Index).Value = DateTimePicker.Value ReportControl.Populate End Sub
Private Sub ReportControl_BeginEdit(ByVal Row As XtremeReportControl.IReportRow, ByVal Column As XtremeReportControl.IReportColumn, ByVal Item As XtremeReportControl.IReportRecordItem) DateTimePicker.Visible = False Select Case Column.Index Case 1, 2 Call ShowDatePicker(ReportControl, DateTimePicker, Row, Column, Item) End Select End Sub
Private Sub ReportControl_FocusChanging(ByVal NewRow As XtremeReportControl.IReportRow, ByVal NewColumn As XtremeReportControl.IReportColumn, ByVal NewItem As XtremeReportControl.IReportRecordItem, Cancel As Boolean) Call HideDatePicker(DateTimePicker) End Sub
Private Sub ReportControl_VScroll(ByVal Section As Long, ByVal Position As Long) Call HideDatePicker(DateTimePicker) End Sub
|
Module Code
Public Sub HideDatePicker(ByVal DTPicker As XtremeSuiteControls.DateTimePicker) With DTPicker .Move -10000, -10000, DTPicker.Width, DTPicker.Height .ZOrder 1 .Visible = False End With End Sub
Public Sub ShowDatePicker(ByVal rc As XtremeReportControl.ReportControl, ByVal DTPicker As XtremeSuiteControls.DateTimePicker, ByVal Row As XtremeReportControl.IReportRow, ByVal Column As XtremeReportControl.IReportColumn, ByVal Item As XtremeReportControl.IReportRecordItem) Dim l As Long, t As Long, r As Long, b As Long, x As Long, y As Long x = Screen.TwipsPerPixelX y = Screen.TwipsPerPixelY rc.Rows(Row.Index).GetItemRect Item, l, t, r, b l = l * x t = t * y r = r * x b = b * y
With DTPicker .Move (rc.Left + x) + l, (rc.Top + y) + t, (r - l) + x, (b - t) + y .ZOrder 0 .Visible = True .Value = Item.Value End With End Sub
|
------------- Product: Xtreme SuitePro (ActiveX) v15.3.1 Platform: Windows 7 64-bit (SP1) Professional Edition Languages: C#.Net using Visual Studio 2012 & Visual Basic 6.0 (SP6)
|