2016-12-17 12 views
3

Delphi XE6을 사용하여 TdateTimePicker와 비슷한 컨트롤을 만들었지 만 몇 가지 이유 때문에 TMonthCalendar가 "임베디드"되어있는 TButtonedEdit을 사용하고 있습니다. 이들은 따라서 정의됩니다Delphi에서 TMonthCalendar의 상태/형식 변경하기

TMyMonthCalendar = class(TMonthCalendar) 
    procedure DoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); 
    procedure DoCloseUp(Sender: TObject); 
    private 
    FDroppedDown: boolean; 
    procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY; 
    protected 
    end; 

    TMyDateEdit = class(TButtonedEdit) 
    private 
    FMonthCalendar: TMyMonthCalendar; 

    procedure DoRightButtonClick(Sender: TObject); 
    protected 
    procedure CreateWnd; override; 
    public 
    constructor Create(AOwner:TComponent); override; 
    destructor Destroy; override; 
    end; 

내가 가지고있는이 달의 달력 오른쪽 버튼을 클릭 할 때 표시하고 선택할 때 나는 그것을 숨기기되면서 원하는대로 가고있어 꽤 많은 사용자가, 이스케이프 등 멀리 탐색

나를 혼란에 빠뜨리는 것은 다음과 같습니다. 캘린더가 "드롭 다운"되면 사용자가 제목을 클릭하거나 더블 클릭하면 캘린더가 그에 따라 월 또는 연도 그리드로 변경됩니다. 예를 들어 사용자가 그 시점에서 ESCapes를하면 다음에 달력을 내릴 때 해당 월/연도 상태로 돌아가는 반면 TDateTimePicker처럼 Date 속성의 현재 달을 표시하는 것으로 되돌리고 싶습니다.

월 캘린더 표시 전에 한 달 상태로 되돌릴 수있는 방법은 무엇입니까?

편집 : 답변을 찾았습니다. MonthCalendar를 숨긴 다음에는 간단히 RecreateWnd를 호출하고 다음에 호출 할 때 기본 화면 개체가 처음부터 삭제되고 다시 만들어집니다. 그리고 그것이 원하는 한 달 형식으로 나오므로 더 이상 할 필요가 없습니다.

+0

정상적인 동작입니다. 양식에 주식 월 캘린더를 놓고 제목을 클릭하면 (제목에 달이 있으면 클릭 할 때 어떤 것이 나올 것이라는 힌트가 바뀝니다) 월을 표시합니다. –

+0

예,하지만 if 그것을 닫으면 (ESCaping 또는 다른 컨트롤로 이동하여) TdateTimePicker를 다시 내리면 이전 "월/년 그리드"상태로 떨어지지 않고 "기본"단일 월 상태로 돌아갑니다. 나는 그것을 "기본"상태로 되돌려 놓는 법을 알고 싶다. – TomB

+0

보기를 설정하는 절차를 작성하십시오. 예 : 'SetCalendarView (Calendar : TMonthCalendar; ViewType : TViewType);'호출하고 적절하게 호출하십시오. 예 : 'SetCalendarView (MyMonthCalendar1, vtMonth);'. –

답변

2

MonthCal_SetCurrentView으로 전화하여 월 달력보기를 설정하거나 MCM_SETCURRENTVIEW을 보낼 수 있습니다. 혹시 현재보기를 검색해야하는 경우

uses commctrl; 

MonthCal_SetCurrentView(FMonthCalendar.Handle, MCMV_MONTH); 

, 당신은 MonthCal_GetCurrentView (또는 MCM_GETCURRENTVIEW)를 사용할 수 있습니다.

+0

고마워요. 이것은 실제로 트릭을 수행합니다. 나는 그것을 발견하지 못한 채 스스로 차고있다. – TomB