diff --git a/components/rx/pickdate.pas b/components/rx/pickdate.pas index 34cdad513..d083224c9 100644 --- a/components/rx/pickdate.pas +++ b/components/rx/pickdate.pas @@ -162,12 +162,14 @@ type procedure MonthMenuClick(Sender: TObject); procedure CalendarDblClick(Sender: TObject); protected + FControlPanel:TPanel; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyPress(var Key: Char); override; procedure Paint;override; procedure Deactivate; override; public constructor Create(AOwner: TComponent); override; + procedure AutoSizeForm; property Date:TDateTime read GetDate write SetDate; property OnCloseUp: TCloseUpEvent read FCloseUp write FCloseUp; end; @@ -795,7 +797,7 @@ constructor TPopupCalendar.Create(AOwner: TComponent); const BtnSide = 14; var - Control, BackPanel: TWinControl; + BackPanel: TWinControl; MI:TMenuItem; i:integer; begin @@ -824,8 +826,8 @@ begin ControlStyle := ControlStyle + [csReplicatable]; end; - Control := TPanel.Create(Self); - with Control as TPanel do + FControlPanel := TPanel.Create(Self); + with FControlPanel do begin Parent := BackPanel; Align := alTop; @@ -849,7 +851,7 @@ begin FBtns[0] := TRxTimerSpeedButton.Create(Self); with FBtns[0] do begin - Parent := Control; + Parent := FControlPanel; SetBounds(-1, -1, BtnSide, BtnSide); Glyph := LoadBitmapFromLazarusResource('prev2'); OnClick := @PrevYearBtnClick; @@ -860,7 +862,7 @@ begin FBtns[1] := TRxTimerSpeedButton.Create(Self); with FBtns[1] do begin - Parent := Control; + Parent := FControlPanel; SetBounds(BtnSide - 2, -1, BtnSide, BtnSide); Glyph:=LoadBitmapFromLazarusResource('prev1'); OnClick := @PrevMonthBtnClick; @@ -871,8 +873,8 @@ begin FBtns[2] := TRxTimerSpeedButton.Create(Self); with FBtns[2] do begin - Parent := Control; - SetBounds(Control.Width - 2 * BtnSide + 2, -1, BtnSide, BtnSide); + Parent := FControlPanel; + SetBounds(FControlPanel.Width - 2 * BtnSide + 2, -1, BtnSide, BtnSide); Glyph:=LoadBitmapFromLazarusResource('next1'); OnClick := @NextMonthBtnClick; Hint := sNextMonth; @@ -882,8 +884,8 @@ begin FBtns[3] := TRxTimerSpeedButton.Create(Self); with FBtns[3] do begin - Parent := Control; - SetBounds(Control.Width - BtnSide + 1, -1, BtnSide, BtnSide); + Parent := FControlPanel; + SetBounds(FControlPanel.Width - BtnSide + 1, -1, BtnSide, BtnSide); Glyph:=LoadBitmapFromLazarusResource('next2'); OnClick := @NextYearBtnClick; Hint := sNextYear; @@ -893,10 +895,10 @@ begin FTitleLabel := TLabel.Create(Self); with FTitleLabel do begin - Parent := Control; + Parent := FControlPanel; AutoSize := False; Alignment := taCenter; - SetBounds(BtnSide * 2 + 1, 1, Control.Width - 4 * BtnSide - 2, 14); + SetBounds(BtnSide * 2 + 1, 1, FControlPanel.Width - 4 * BtnSide - 2, 14); Transparent := True; OnDblClick := @TopPanelDblClick; ControlStyle := ControlStyle + [csReplicatable]; @@ -910,6 +912,14 @@ begin CalendarChange(nil); end; +procedure TPopupCalendar.AutoSizeForm; +begin + FControlPanel.Height:=FCalendar.Canvas.TextHeight('Wg')+4; + Height:=(FCalendar.Canvas.TextHeight('Wg')+4)*7+FControlPanel.Height; + Width:=FCalendar.Canvas.TextWidth('WWW')*7; + FCalendar.AutoFillColumns:=true; +end; + procedure TPopupCalendar.CalendarMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var @@ -1030,7 +1040,8 @@ begin FCalendar.CalendarDate:=AValue; end; - + { TSelectDateDlg } + constructor TSelectDateDlg.Create(AOwner: TComponent); var Control: TWinControl; diff --git a/components/rx/tooledit.pas b/components/rx/tooledit.pas index 6865a67f3..2485d4355 100644 --- a/components/rx/tooledit.pas +++ b/components/rx/tooledit.pas @@ -497,6 +497,20 @@ procedure TCustomRxDateEdit.PopupDropDown(DisableEdit: Boolean); var P: TPoint; Y: Integer; + +procedure DoTrySetDate; +var + D:TDateTime; +begin + try + D:=StrToDate(Text); + FPopup.Date:=D; + except + if FDefaultToday then + FPopup.Date:=sysutils.Date; + end; +end; + begin if (FPopup <> nil) and not (ReadOnly {or FPopupVisible}) then begin @@ -520,11 +534,8 @@ begin else if P.X + FPopup.Width > Screen.Width then P.X := Screen.Width - FPopup.Width; - if Text <> '' then - FPopup.Date:=StrToDateDef(Text, Date) - else - FPopup.Date:=Date; - + DoTrySetDate; + ShowPopup(Point(P.X, Y)); // FPopupVisible := True; { if DisableEdit then @@ -581,6 +592,7 @@ var begin FPopup.Left:=AOrigin.X; FPopup.Top:=AOrigin.Y; + FPopup.AutoSizeForm; FAccept:=FPopup.ShowModal = mrOk; if CanFocus then SetFocus;