2012-01-20 3 views
2

Возможно ли изменить День недели, который элемент управления DTPicker использует в первый день недели «на лету»?Изменить день начала недели на DTPicker

Я знаю, что он использует систему в первый день недели (как определено на панели управления) для этой настройки, но может ли она быть изменена для использования другого дня без изменения настроек панели управления?

ответ

4

Попробуйте это, из post on the old VB6 newsgroup по MikeD

Вы можете сделать это с помощью DTPicker с помощью API Win32. DTPicker использует фактический элемент управления MonthView. Вы можете отправить этот элемент управления MCM_SETFIRSTDAYOFWEEK message, чтобы изменить первый день недели. Обратите внимание, что вы должны (и можете только) сделать это в событии DropDown, потому что до этого элемент управления MonthView не существует. MonthView распадается после события CloseUp. О ... значение в первый день недели является LPARAM из SendMessage (WPARAM всегда 0)

Option Explicit 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" 
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As 
Any) As Long 
Private Const MCM_FIRST     As Long = &H1000& 
Private Const MCM_SETFIRSTDAYOFWEEK  As Long = (MCM_FIRST + 15) 
Private Const DTM_FIRST     As Long = &H1000& 
Private Const DTM_GETMONTHCAL   As Long = (DTM_FIRST + 8) 
Private Sub DTPicker1_DropDown() 
    Dim hMonthview As Long 
    'Get hwnd of MonthView control 
    hMonthview = SendMessage(DTPicker1.hwnd, DTM_GETMONTHCAL, 0&, ByVal 0&) 
    'Set first day of week for MonthView, according to the following: 
    ' Value  Day of Week 
    ' 0   Monday 
    ' 1   Tuesday 
    ' 2   Wednesday 
    ' 3   Thursday 
    ' 4   Friday 
    ' 5   Saturday 
    ' 6   Sunday 
    Call SendMessage(hMonthview, MCM_SETFIRSTDAYOFWEEK, 0&, ByVal 6&) 'first 
day of week = Sunday 
End Sub 
+0

Superb, спасибо! –

+0

Выглядит проста и надежно. – wqw