Для ввода даты в ГРИД пробую использовать стандартный компонент по вводу даты. Порядок действий таков.
Описываем новый класс:
TPopupDateTimePicker = class(TMonthCalendar)
private
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
end;
procedure TPopupDateTimePicker.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
begin
Style := Style or WS_BORDER;
ExStyle := WS_EX_TOOLWINDOW or WS_EX_TOPMOST;
AddBiDiModeExStyle(ExStyle);
WindowClass.Style := CS_SAVEBITS;
end;
end;
procedure TPopupDateTimePicker.CreateWnd;
begin
inherited CreateWnd;
Windows.SetParent(Handle, 0);
CallWindowProc(DefWndProc, Handle, wm_SetFocus, 0, 0);
end;
procedure TPopupDateTimePicker.MouseUp(Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
inherited MouseUp(Button, Shift, X, Y);
if y>35 then
TInplaceEditList(Owner).CloseUp((X >= 0) and (Y >= 0) and (X < Width) and (Y < Height));
end;
При активизации определенной ячейки рисуем в ней кнопку и при нажатии на ней выкидываем(показываем) данный компонент следующей функцией:
SetWindowPos(Handle, HWND_TOP, P.X, Y, 0, 0,
SWP_NOSIZE or SWP_NOACTIVATE or SWP_SHOWWINDOW);
Вопросов собственно два:
Как узнать что пользователь окончательно выбрал дату, а не перелистнул месяц или год, а то проверка на MOUSEUP условия if y>35 then выглядит уж больно некрасиво
В выпадающем компоненте не может активизироваться редактор года, т.е. UPDOWN для изменения года.В чем может быть проблема.