저는 Delphi7을 사용하고 있습니다. 나는 언젠가 컨트롤을 TDateTimePicker
으로 대담하게하고 싶습니다.TDateTimePicker의 BoldDays?
나는 원래는 TMonthCalendar
의 자손이므로 읽을 수 있어야합니다.
가 나는 표준 하나 머무르고 싶은 것, 내가 제 3 자에게 DateTimePicker
컨트롤을 사용하지 않음을 유의하시기 바랍니다 .
저는 Delphi7을 사용하고 있습니다. 나는 언젠가 컨트롤을 TDateTimePicker
으로 대담하게하고 싶습니다.TDateTimePicker의 BoldDays?
나는 원래는 TMonthCalendar
의 자손이므로 읽을 수 있어야합니다.
가 나는 표준 하나 머무르고 싶은 것, 내가 제 3 자에게 DateTimePicker
컨트롤을 사용하지 않음을 유의하시기 바랍니다 .
당신은 옳고 그름 :-) 모두
참조 : http://www.experts-exchange.com/Programming/System/Windows__Programming/MFC/Q_23927552.html
당신은 XP에서 BoldDays을 설정할 수있는 권리이다. Vista/Win7에서 할 수 있기 때문에 틀렸어!
다음은 수정 된 코드입니다 :
procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
const
DTM_GETMCSTYLE = (DTM_FIRST + 12);
DTM_SETMCSTYLE = (DTM_FIRST + 11);
MCS_NOTRAILINGDATES = $0040;
MCS_SHORTDAYSOFWEEK = $0080;
MCS_NOSELCHANGEONNAV = $0100;
var
monthCalHandle: THandle;
boldDates: array[0..2] of integer;
style, prevstyle: LResult;
begin
style := SendMessage(DateTimePicker1.Handle, DTM_GETMCSTYLE, 0, 0);
style := style or MCS_DAYSTATE; //or MCS_NOSELCHANGEONNAV or MCS_WEEKNUMBERS;
prevstyle := SendMessage(DateTimePicker1.Handle, DTM_SETMCSTYLE, 0, style);
monthCalHandle := SendMessage(dateTimePicker1.Handle, DTM_GETMONTHCAL, 0, 0);
boldDates[0]:=$5a5a5a;
boldDates[1]:=$5a5a5a;
boldDates[2]:=$5a5a5a;
SendMessage(monthCalHandle, MCM_SETDAYSTATE, 3, integer(@boldDates));
end;
참고 : 그렇지 않으면 작동하지 않기 때문에 파일에 매니페스트 비스타를 추가해야합니다!
상수가 업데이트 commctrl.h 파일에서 있으며, 여기에서 찾을 : 도움을 http://www.koders.com/cpp/fid6A6537D52B537D0920D7A760D2073F7B65ADE310.aspx?s=WM_CAP_DRIVER_CONNECT
감사합니다, 당신이 날은 솔루션으로 이어질! :-)
DateTimePicker의 dropDown 단추 누르기에 대한 응답으로 표시된 MonthCalendar가 MCS_DAYSTATE 스타일이 설정되지 않은 MonthCalendar이기 때문에 원하는 것을 수행 할 수 없습니다. 이것은 Microsoft의 결정입니다. VCL 제한 사항이 아니므로, 내 지식으로는 변경할 수 없습니다. 유일한 방법은 그것을 사용하지 않고 드롭 다운 버튼을 누르는 것에 대한 응답으로 자신의 실제 MonthCalendar를 인스턴스화하는 것입니다. 이미 사용 가능한 맞춤 구성 요소 중 일부를 사용하십시오.
게시하려면 다음과 같이 게시 한 동일한 C# 코드의 파스칼 버전을 사용하십시오. 그것은 효과가 없으며 내 지식으로는 결코 실현되지 않습니다. 테스트하고 싶다면 DateTimePicker의 DropDown 이벤트에 연결하십시오.
procedure TForm1.DateTimePicker1DropDown(Sender: TObject);
var
monthCalHandle: THandle;
boldDates: array[0..2] of integer;
begin
{ obtain the MonthCalendar handle using the DTM_GETMONTHCAL message
note that the handle returned changes for every time the
drop down calendar is displayed. }
monthCalHandle := SendMessage(dateTimePicker1.Handle, DTM_GETMONTHCAL, 0, 0);
{ Send the MCM_SETDAYSTATE message. This message takes an array of
3 MONTHDAYSTATEs. Every MONTHDAYSTATE is a bit set that represents a month.
Each bit (0 through 30) represents the state of a day. Whan a bit is on,
its corresponding day is emphasized in the MonthCalendar }
boldDates[0]:=$5a5a5a;
boldDates[1]:=$5a5a5a;
boldDates[2]:=$5a5a5a;
SendMessage(monthCalHandle, MCM_SETDAYSTATE, 3, integer(@boldDates));
end;
+1 잠시 동안 놀고 나면, 나는 당신이 옳다고 믿습니다. –
+1, 업데이트는 thx입니다. –