⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsdatetimeeditor.pas

📁 企业进销存管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{*******************************************************}
{                                                       }
{       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 + -