TRxDateEdit in linux (gtk2)

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@331 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
alexs75
2008-01-29 00:13:44 +00:00
parent b1ecbb3004
commit 53d593d66d
2 changed files with 40 additions and 17 deletions

View File

@ -162,12 +162,14 @@ type
procedure MonthMenuClick(Sender: TObject); procedure MonthMenuClick(Sender: TObject);
procedure CalendarDblClick(Sender: TObject); procedure CalendarDblClick(Sender: TObject);
protected protected
FControlPanel:TPanel;
procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override; procedure KeyPress(var Key: Char); override;
procedure Paint;override; procedure Paint;override;
procedure Deactivate; override; procedure Deactivate; override;
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
procedure AutoSizeForm;
property Date:TDateTime read GetDate write SetDate; property Date:TDateTime read GetDate write SetDate;
property OnCloseUp: TCloseUpEvent read FCloseUp write FCloseUp; property OnCloseUp: TCloseUpEvent read FCloseUp write FCloseUp;
end; end;
@ -795,7 +797,7 @@ constructor TPopupCalendar.Create(AOwner: TComponent);
const const
BtnSide = 14; BtnSide = 14;
var var
Control, BackPanel: TWinControl; BackPanel: TWinControl;
MI:TMenuItem; MI:TMenuItem;
i:integer; i:integer;
begin begin
@ -824,8 +826,8 @@ begin
ControlStyle := ControlStyle + [csReplicatable]; ControlStyle := ControlStyle + [csReplicatable];
end; end;
Control := TPanel.Create(Self); FControlPanel := TPanel.Create(Self);
with Control as TPanel do with FControlPanel do
begin begin
Parent := BackPanel; Parent := BackPanel;
Align := alTop; Align := alTop;
@ -849,7 +851,7 @@ begin
FBtns[0] := TRxTimerSpeedButton.Create(Self); FBtns[0] := TRxTimerSpeedButton.Create(Self);
with FBtns[0] do with FBtns[0] do
begin begin
Parent := Control; Parent := FControlPanel;
SetBounds(-1, -1, BtnSide, BtnSide); SetBounds(-1, -1, BtnSide, BtnSide);
Glyph := LoadBitmapFromLazarusResource('prev2'); Glyph := LoadBitmapFromLazarusResource('prev2');
OnClick := @PrevYearBtnClick; OnClick := @PrevYearBtnClick;
@ -860,7 +862,7 @@ begin
FBtns[1] := TRxTimerSpeedButton.Create(Self); FBtns[1] := TRxTimerSpeedButton.Create(Self);
with FBtns[1] do with FBtns[1] do
begin begin
Parent := Control; Parent := FControlPanel;
SetBounds(BtnSide - 2, -1, BtnSide, BtnSide); SetBounds(BtnSide - 2, -1, BtnSide, BtnSide);
Glyph:=LoadBitmapFromLazarusResource('prev1'); Glyph:=LoadBitmapFromLazarusResource('prev1');
OnClick := @PrevMonthBtnClick; OnClick := @PrevMonthBtnClick;
@ -871,8 +873,8 @@ begin
FBtns[2] := TRxTimerSpeedButton.Create(Self); FBtns[2] := TRxTimerSpeedButton.Create(Self);
with FBtns[2] do with FBtns[2] do
begin begin
Parent := Control; Parent := FControlPanel;
SetBounds(Control.Width - 2 * BtnSide + 2, -1, BtnSide, BtnSide); SetBounds(FControlPanel.Width - 2 * BtnSide + 2, -1, BtnSide, BtnSide);
Glyph:=LoadBitmapFromLazarusResource('next1'); Glyph:=LoadBitmapFromLazarusResource('next1');
OnClick := @NextMonthBtnClick; OnClick := @NextMonthBtnClick;
Hint := sNextMonth; Hint := sNextMonth;
@ -882,8 +884,8 @@ begin
FBtns[3] := TRxTimerSpeedButton.Create(Self); FBtns[3] := TRxTimerSpeedButton.Create(Self);
with FBtns[3] do with FBtns[3] do
begin begin
Parent := Control; Parent := FControlPanel;
SetBounds(Control.Width - BtnSide + 1, -1, BtnSide, BtnSide); SetBounds(FControlPanel.Width - BtnSide + 1, -1, BtnSide, BtnSide);
Glyph:=LoadBitmapFromLazarusResource('next2'); Glyph:=LoadBitmapFromLazarusResource('next2');
OnClick := @NextYearBtnClick; OnClick := @NextYearBtnClick;
Hint := sNextYear; Hint := sNextYear;
@ -893,10 +895,10 @@ begin
FTitleLabel := TLabel.Create(Self); FTitleLabel := TLabel.Create(Self);
with FTitleLabel do with FTitleLabel do
begin begin
Parent := Control; Parent := FControlPanel;
AutoSize := False; AutoSize := False;
Alignment := taCenter; 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; Transparent := True;
OnDblClick := @TopPanelDblClick; OnDblClick := @TopPanelDblClick;
ControlStyle := ControlStyle + [csReplicatable]; ControlStyle := ControlStyle + [csReplicatable];
@ -910,6 +912,14 @@ begin
CalendarChange(nil); CalendarChange(nil);
end; 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; procedure TPopupCalendar.CalendarMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
var var
@ -1030,6 +1040,7 @@ begin
FCalendar.CalendarDate:=AValue; FCalendar.CalendarDate:=AValue;
end; end;
{ TSelectDateDlg }
constructor TSelectDateDlg.Create(AOwner: TComponent); constructor TSelectDateDlg.Create(AOwner: TComponent);
var var

View File

@ -497,6 +497,20 @@ procedure TCustomRxDateEdit.PopupDropDown(DisableEdit: Boolean);
var var
P: TPoint; P: TPoint;
Y: Integer; 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 begin
if (FPopup <> nil) and not (ReadOnly {or FPopupVisible}) then if (FPopup <> nil) and not (ReadOnly {or FPopupVisible}) then
begin begin
@ -520,10 +534,7 @@ begin
else if P.X + FPopup.Width > Screen.Width then else if P.X + FPopup.Width > Screen.Width then
P.X := Screen.Width - FPopup.Width; P.X := Screen.Width - FPopup.Width;
if Text <> '' then DoTrySetDate;
FPopup.Date:=StrToDateDef(Text, Date)
else
FPopup.Date:=Date;
ShowPopup(Point(P.X, Y)); ShowPopup(Point(P.X, Y));
// FPopupVisible := True; // FPopupVisible := True;
@ -581,6 +592,7 @@ var
begin begin
FPopup.Left:=AOrigin.X; FPopup.Left:=AOrigin.X;
FPopup.Top:=AOrigin.Y; FPopup.Top:=AOrigin.Y;
FPopup.AutoSizeForm;
FAccept:=FPopup.ShowModal = mrOk; FAccept:=FPopup.ShowModal = mrOk;
if CanFocus then SetFocus; if CanFocus then SetFocus;