📄 tsdatetimeeditor.pas
字号:
{*******************************************************}
{ }
{ Top Support Visual Components }
{ TopGrid TtsDateTime component editor }
{ }
{ Copyright (c) 1999, Top Support }
{ }
{*******************************************************}
unit TSDateTimeEditor;
{$INCLUDE TSCmpVer}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
TSDateTimeDef, TSDateTime, StdCtrls, TsDesign, Grids_ts, TSGrid, TSCommon, ExtCtrls,
{$IFDEF TSVER_V6} DesignIntf, DesignEditors, VCLEditors, {$ELSE} DsgnIntf, {$ENDIF}
TypInfo, ComCtrls {$IFDEF TSVER_V3}, Toolwin {$ELSE}, TSD3EditorControls {$ENDIF};
const
MaxDisplayModeIndex = 1;
type
TtsDateTimeEditor = class(TComponentEditor)
public
procedure Edit; override;
function GetVerbCount: Integer; override;
function GetVerb(Index: integer): string; override;
procedure ExecuteVerb(Index: integer); override;
end;
{$IFDEF TSVER_V3}
TtsDateTimeDateProperty = class(TDateProperty)
{$ELSE}
TtsDateTimeDateProperty = class(TPropertyEditor)
{$ENDIF}
function GetValue: string; override;
procedure SetValue(const Value: string); override;
end;
TfrmCalEditor = class(TForm)
pnlInspectorGrid: TPanel;
Panel10: TPanel;
grdHeading: TtsGrid;
grdInspector: TtsGridInspector;
tsComponentEditor: TtsComponentEditor;
Splitter1: TSplitter;
pnlDateTime: TPanel;
scrDateTime: TScrollBox;
ToolBar1: TToolBar;
ToolButton2: TToolButton;
sepSizer: TToolButton;
butOK: TButton;
ToolButton3: TToolButton;
butCancel: TButton;
datExample: TtsDateTimeDef;
procedure Button1Click(Sender: TObject);
procedure tsComponentEditorGetComponentId(Sender: TObject;
Component: TPersistent; var ComponentId: String);
procedure tsComponentEditorGetComponentSelection(Sender: TObject;
var ComponentSelection: Pointer; var ComponentCount: Integer);
procedure tsComponentEditorGetComponentSelectionChanged(
Sender: TObject; CurSelection: Pointer; var Changed: Boolean);
procedure tsComponentEditorGetComponentWithId(Sender: TObject;
ComponentId: String; var Component: TPersistent);
procedure tsComponentEditorGetFirstSelectedComponent(Sender: TObject;
var Component: TPersistent);
procedure RegisterPropEditors;
procedure InitgrdHeading;
procedure grdHeadingComboInit(Sender: TObject; Combo: TtsComboGrid;
DataCol, DataRow: Longint);
procedure grdHeadingComboCellLoaded(Sender: TObject;
Combo: TtsComboGrid; DataCol, DataRow: Longint; var Value: Variant);
procedure grdHeadingComboRollUp(Sender: TObject; Combo: TtsComboGrid;
DataCol, DataRow: Longint);
procedure grdHeadingCellLoaded(Sender: TObject; DataCol,
DataRow: Longint; var Value: Variant);
procedure grdHeadingColResized(Sender: TObject; RowColnr: Longint);
procedure FormActivate(Sender: TObject);
procedure grdInspectorColResized(Sender: TObject; RowColnr: Longint);
procedure SetDisplayModes;
procedure FormResize(Sender: TObject);
procedure Splitter1Moved(Sender: TObject);
procedure grdInspectorResize(Sender: TObject);
procedure tsComponentEditorGetComponentInfo(Sender: TObject;
DisplayMode: TtsGroupElement);
procedure tsComponentEditorSetValues(Sender: TObject;
State: tsScanObjectsState; Component: TPersistent;
PropertyElement: TtsPropertyElement; strValue: String;
Value: Variant; ValueSource: tsValueSource; ValueSet: Boolean;
var Cancel: Boolean);
procedure grdInspectorKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
function GetHelpKey: string;
procedure butOKClick(Sender: TObject);
procedure butCancelClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
protected
FComponentName: string;
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmCalEditor: TfrmCalEditor;
DateTimeDefExample: TtsDateTimeDef;
CurDateTimeDef: TtsDateTimeDef = nil;
CurDateTimeDefName: string;
implementation
{$R *.DFM}
var
grdInspectorFirstColShare: Single = -1;
pnlInspectorGridAutoWidthMax: integer = -1;
FirstActivate: Boolean = True;
DisplayModeNames: array[0..MaxDisplayModeIndex] of string;
CurDisplayModeIndex: integer = 1;
PrevDisplayModeIndex: integer;
sepSizerWidthDif: integer = -1;
DesignActivatesFirstTime: Boolean = True;
PrevLeft: Integer = 0;
PrevTop: integer = 0;
ButtonedExit: Boolean = False;
SaveResult: Boolean = False;
{TtsDateTimeEditor}
procedure TtsDateTimeEditor.Edit;
begin
FirstActivate := True;
TsDesign.Designer := Designer;
Screen.Cursor := crHourglass;
try
frmCalEditor := TfrmCalEditor.Create(Application);
except
Screen.Cursor := crDefault;
frmCalEditor.Free;
frmCalEditor := nil;
raise;
end;
try
frmCalEditor.FComponentName := Component.Name;
{$IFDEF TSVER_V6}
frmCalEditor.Caption := Designer.Root.Name + '.' + Component.Name + ' - TsDateTime Editor';
{$ELSE}
frmCalEditor.Caption := Designer.Form.Name + '.' + Component.Name + ' - TsDateTime Editor';
{$ENDIF}
if DesignActivatesFirstTime then
begin
frmCalEditor.Left := Trunc((Screen.Width - frmCalEditor.Width)/2);
frmCalEditor.Top := Trunc((Screen.Height - frmCalEditor.Height)/2);
CurDisplayModeIndex := 1;
DesignActivatesFirstTime := False;
end
else
begin
frmCalEditor.Left := PrevLeft;
frmCalEditor.Top := PrevTop;
CurDisplayModeIndex := PrevDisplayModeIndex;
end;
CurDateTimeDef := TtsDateTimeDef(Component);
CurDateTimeDefName := CurDateTimeDef.Name;
ShowMessage('Open Date Editor');
frmCalEditor.ShowModal;
ShowMessage('Close Date Editor');
PrevLeft := frmCalEditor.Left;
PrevTop := frmCalEditor.Top;
PrevDisplayModeIndex := CurDisplayModeIndex;
if SaveResult then
begin
CurDateTimeDef.Assign(DateTimeDefExample);
CurDateTimeDef.Name := CurDateTimeDefName;
TsDesign.Designer.Modified;
end;
finally
TsDesign.Designer := nil;
FreeNil(TObject(frmCalEditor));
Screen.Cursor := crDefault;
end;
end;
function TtsDateTimeEditor.GetVerbCount: Integer;
begin
result := 1;
end;
function TtsDateTimeEditor.GetVerb(Index: integer): string;
begin
result := '&DateTime Editor'
end;
procedure TtsDateTimeEditor.ExecuteVerb(Index: integer);
begin
Edit;
end;
{TtsDateTimeDateProperty}
function TtsDateTimeDateProperty.GetValue: string;
var
Fmt: string;
DateValue: TDateTime;
begin
DateValue := GetFloatValue;
Fmt := LongYearFormat(ShortDateFormat);
DateTimeToString(Result, Fmt, DateValue);
end;
procedure TtsDateTimeDateProperty.SetValue(const Value: string);
var
DateValue: TDateTime;
begin
if Value = '' then
DateValue := 0.0
else
begin
DateValue := StringToDateTime(Value);
end;
SetFloatValue(DateValue);
end;
{TfrmCalEditor}
procedure TfrmCalEditor.Button1Click(Sender: TObject);
begin
DateTimeDefExample.DateTimeProps.Font.Color := clRed;
end;
procedure TfrmCalEditor.tsComponentEditorGetComponentId(Sender: TObject;
Component: TPersistent; var ComponentId: String);
begin
if Component <> nil then
ComponentId := DateTimeDefExample.Name
else
ComponentId := '';
end;
procedure TfrmCalEditor.tsComponentEditorGetComponentSelection(
Sender: TObject; var ComponentSelection: Pointer;
var ComponentCount: Integer);
begin
ComponentCount := 1;
ComponentSelection := nil;
end;
procedure TfrmCalEditor.tsComponentEditorGetComponentSelectionChanged(
Sender: TObject; CurSelection: Pointer; var Changed: Boolean);
begin
Changed := False;
end;
procedure TfrmCalEditor.tsComponentEditorGetComponentWithId(
Sender: TObject; ComponentId: String; var Component: TPersistent);
begin
Component := DateTimeDefExample.DateTimeProps;
end;
procedure TfrmCalEditor.tsComponentEditorGetFirstSelectedComponent(
Sender: TObject; var Component: TPersistent);
begin
Component := DateTimeDefExample.DateTimeProps;
end;
procedure TfrmCalEditor.RegisterPropEditors;
begin
RegisterPropertyEditor(TypeInfo(TFont), nil, '', TFontProperty);
RegisterPropertyEditor(TypeInfo(TFontName), nil, '', TFontNameProperty);
RegisterPropertyEditor(TypeInfo(TColor), nil, '', TColorProperty);
RegisterPropertyEditor(TypeInfo(TDate), TtsDateTimeDefProps, 'MinDate', TtsDateTimeDateProperty);
RegisterPropertyEditor(TypeInfo(TDate), TtsDateTimeDefProps, 'MaxDate', TtsDateTimeDateProperty);
end;
procedure TfrmCalEditor.FormActivate(Sender: TObject);
var
TextHeight: Integer;
begin
if FirstActivate then
begin
ShowMessage('FirstActivate');
if CurDateTimeDef = nil then
begin
ShowMessage('RegisterPropEditors');
RegisterPropEditors;
CurDateTimeDef := datExample;
FComponentName := datExample.Name;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -