亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? scalcunit.pas

?? AlphaControls是一個Delphi標準控件的集合
?? PAS
字號:
unit sCalcUnit;
{$I sDefs.inc}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  sCustomButton, ExtCtrls, sPanel, ActnList, sStyleUtil, Menus, StdCtrls, sUtils,
  Clipbrd, mask, sButtonControl, sEditorsManager, sControlsManager;

type
  TsCalcState = (csFirst, csValid, csError);

  TsCalcForm = class(TForm)
    OK1: TMenuItem;
    Cancel1: TMenuItem;
    FMainPanel: TsPanel;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    FCalculatorPanel: TsPanel;
    FCalcPanel: TsPanel;
    sSpeedButton1: TsSpeedButton;
    sSpeedButton2: TsSpeedButton;
    sSpeedButton3: TsSpeedButton;
    sSpeedButton4: TsSpeedButton;
    sSpeedButton5: TsSpeedButton;
    sSpeedButton6: TsSpeedButton;
    sSpeedButton7: TsSpeedButton;
    sSpeedButton8: TsSpeedButton;
    sSpeedButton9: TsSpeedButton;
    sSpeedButton10: TsSpeedButton;
    sSpeedButton11: TsSpeedButton;
    sSpeedButton12: TsSpeedButton;
    sSpeedButton13: TsSpeedButton;
    sSpeedButton14: TsSpeedButton;
    sSpeedButton15: TsSpeedButton;
    sSpeedButton16: TsSpeedButton;
    sSpeedButton17: TsSpeedButton;
    sSpeedButton18: TsSpeedButton;
    sSpeedButton19: TsSpeedButton;
    sSpeedButton20: TsSpeedButton;
    sSpeedButton21: TsSpeedButton;
    sSpeedButton22: TsSpeedButton;
    sSpeedButton23: TsSpeedButton;
    sSpeedButton24: TsSpeedButton;
    sSpeedButton25: TsSpeedButton;
    sSpeedButton26: TsSpeedButton;
    FDisplayPanel: TsPanel;
    sDragBar1: TsDragBar;
    sToolButton3: TsSpeedButton;
    sToolButton1: TsSpeedButton;
    sControlsManager1: TsControlsManager;
    procedure sSpeedButton22Click(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure PopupMenu1Popup(Sender: TObject);
    procedure sSpeedButton24Click(Sender: TObject);
    procedure sSpeedButton23Click(Sender: TObject);
    procedure sSpeedButton25Click(Sender: TObject);
    procedure sSpeedButton26Click(Sender: TObject);
    procedure sSpeedButton19Click(Sender: TObject);
    procedure sSpeedButton13Click(Sender: TObject);
    procedure sSpeedButton7Click(Sender: TObject);
    procedure sSpeedButton21Click(Sender: TObject);
    procedure sSpeedButton15Click(Sender: TObject);
    procedure sSpeedButton9Click(Sender: TObject);
    procedure sSpeedButton3Click(Sender: TObject);
    procedure OK1Click(Sender: TObject);
    procedure Cancel1Click(Sender: TObject);
    procedure sSpeedButton2Click(Sender: TObject);
    procedure sSpeedButton14Click(Sender: TObject);
    procedure sSpeedButton8Click(Sender: TObject);
    procedure sSpeedButton20Click(Sender: TObject);
    procedure sSpeedButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure sToolButton3Click(Sender: TObject);
    procedure sToolButton1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormDeactivate(Sender: TObject);
  protected
    FOperand: Double;

    FOnError: TNotifyEvent;
    FOnOk: TNotifyEvent;
    FOnCancel: TNotifyEvent;
    FOnResult: TNotifyEvent;
    FOnTextChange: TNotifyEvent;
    FOnCalcKey: TKeyPressEvent;
    FOnDisplayChange: TNotifyEvent;

  private
    procedure TextChanged; virtual;
  public
    FText: string;
    FMemory: Double;
    FPrecision: Byte;
    FBeepOnError: Boolean;
    FStatus: TsCalcState;
    FOperator: Char;
    FEditor: TCustomMaskEdit;
    function GetValue: Variant;
    procedure SetValue(const Value: Variant);

    procedure SetText(const Value: string);
    procedure CheckFirst;
    procedure CalcKey(Key: Char);
    procedure Clear;
    procedure Error;
    procedure SetDisplay(R: Double);
    function GetDisplay: Double;
    procedure UpdateMemoryLabel;
    procedure Copy;
    procedure Paste;
    property DisplayValue: Double read GetDisplay write SetDisplay;
    property Text: string read FText;

    property OnResultClick: TNotifyEvent read FOnResult write FOnResult;
    property OnError: TNotifyEvent read FOnError write FOnError;
    property OnTextChange: TNotifyEvent read FOnTextChange write FOnTextChange;
    property OnCalcKey: TKeyPressEvent read FOnCalcKey write FOnCalcKey;
    property OnDisplayChange: TNotifyEvent read FOnDisplayChange write FOnDisplayChange;
  end;

const
  ResultKeys = [#13, '=', '%'];

implementation

uses sCurrEdit, sCustomComboEdit;

{$R *.dfm}

procedure TsCalcForm.CalcKey(Key: Char);
var
  R: Double;
begin
  Key := UpCase(Key);
  if (FStatus = csError) and (Key <> 'C') then Key := #0;

  if Assigned(FOnCalcKey) then FOnCalcKey(Self, Key);

  case Key of
    '.', ',': begin
      CheckFirst;
      if Pos(DecimalSeparator, FText) = 0 then SetText(FText + DecimalSeparator);
      Exit;
    end;
    'R': if FStatus in [csValid, csFirst] then begin
      FStatus := csFirst;
      if GetDisplay = 0 then Error else SetDisplay(1.0 / GetDisplay);
    end;
    'Q': if FStatus in [csValid, csFirst] then begin
      FStatus := csFirst;
      if GetDisplay < 0 then Error else SetDisplay(Sqrt(GetDisplay));
    end;
    '0'..'9': begin
      CheckFirst;
      if FText = '0' then SetText('');
      if Pos('E', FText) = 0 then begin
        if Length(FText) < Maxi(2, FPrecision) + Ord(Boolean(Pos('-', FText)))
          then SetText(FText + Key)
          else if FBeepOnError then MessageBeep(0);
      end;
    end;
    #8: begin
      CheckFirst;
      if (Length(FText) = 1) or ((Length(FText) = 2) and (FText[1] = '-'))
        then SetText('0')
        else SetText(System.Copy(FText, 1, Length(FText) - 1));
    end;
    '_': SetDisplay(-GetDisplay);
    '+', '-', '*', '/', '=', '%', #13: begin
      if (Key = #13) and (FStatus = csFirst) then begin
        if FEditor <> nil then begin
          TsCalcEdit(FEditor).Value := StrToFloat(FText);
          FEditor.SetFocus;
          if TsCustomComboEdit(FEditor).AutoSelect then TsCustomComboEdit(FEditor).SelectAll;
          Close;
        end;
      end
      else begin
        if FStatus = csValid then begin
          FStatus := csFirst;
          R := GetDisplay;
          if Key = '%' then
            case FOperator of
              '+', '-': R := FOperand * R / 100.0;
              '*', '/': R := R / 100.0;
            end;
          case FOperator of
            '+': SetDisplay(FOperand + R);
            '-': SetDisplay(FOperand - R);
            '*': SetDisplay(FOperand * R);
            '/': if R = 0 then Error else SetDisplay(FOperand / R);
          end;
        end;
        FOperator := Key;
        FOperand := GetDisplay;
        if Key in ResultKeys then if Assigned(FOnResult) then FOnResult(Self);
      end;
    end;
    #27: if FText = '0' then begin
      if Assigned(FEditor) then FEditor.SetFocus;
      Close;
    end
    else CLear;
    'C': Clear;
    ^C: Clipboard.AsText := FText;
    ^V: Paste;
  end;
end;

procedure TsCalcForm.CheckFirst;
begin
  if FStatus = csFirst then begin
    FStatus := csValid;
    SetText('0');
  end;
end;

procedure TsCalcForm.Clear;
begin
  FStatus := csFirst;
  SetDisplay(0.0);
  FOperator := '=';
end;

procedure TsCalcForm.Error;
begin
  FStatus := csError;
  SetText('Error');
  if FBeepOnError then MessageBeep(0);
  if Assigned(FOnError) then FOnError(Self);
end;

procedure TsCalcForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
  CalcKey(Key);
end;

function TsCalcForm.GetDisplay: Double;
begin
  if FStatus = csError
    then Result := 0.0
    else Result := StrToFloat(Trim(FText));
end;

procedure TsCalcForm.N1Click(Sender: TObject);
begin
  Copy;
end;

procedure TsCalcForm.N2Click(Sender: TObject);
begin
  Paste;
end;

procedure TsCalcForm.PopupMenu1Popup(Sender: TObject);
begin
  N2.Enabled := Clipboard.HasFormat(CF_TEXT);
end;

procedure TsCalcForm.SetDisplay(R: Double);
var
  S: string;
begin
  S := FloatToStrF(R, ffGeneral, Maxi(2, FPrecision), 0);
  if FText <> S then begin
    SetText(S);
    if Assigned(FOnDisplayChange) then FOnDisplayChange(Self);
  end;
end;

procedure TsCalcForm.SetText(const Value: string);
begin
  if FText <> Value then begin
    FText := Value;
    TextChanged;
  end;
end;

procedure TsCalcForm.TextChanged;
begin
  FDisplayPanel.Caption := FText;
  FDisplayPanel.sStyle.BGChanged := True;
  if Assigned(FOnTextChange) then FOnTextChange(Self);
end;

procedure TsCalcForm.UpdateMemoryLabel;
begin
  if FMemory <> 0.0
    then FCalcPanel.Caption := 'M'
    else FCalcPanel.Caption := '';
end;

procedure TsCalcForm.sSpeedButton22Click(Sender: TObject);
begin
  CalcKey(Char(TComponent(Sender).Tag + Ord('0'))); // Digits
end;

procedure TsCalcForm.sSpeedButton24Click(Sender: TObject);
begin
  CalcKey('.');
end;

procedure TsCalcForm.sSpeedButton23Click(Sender: TObject);
begin
  CalcKey('_');
end;

procedure TsCalcForm.sSpeedButton25Click(Sender: TObject);
begin
  CalcKey('+');
end;

procedure TsCalcForm.sSpeedButton26Click(Sender: TObject);
begin
  CalcKey('=');
end;

procedure TsCalcForm.sSpeedButton19Click(Sender: TObject);
begin
  CalcKey('-');
end;

procedure TsCalcForm.sSpeedButton13Click(Sender: TObject);
begin
  CalcKey('*');
end;

procedure TsCalcForm.sSpeedButton7Click(Sender: TObject);
begin
  CalcKey('/');
end;

procedure TsCalcForm.sSpeedButton21Click(Sender: TObject);
begin
  if FStatus in [csValid, csFirst] then begin
    FStatus := csFirst;
    FMemory := FMemory + GetDisplay;
    UpdateMemoryLabel;
  end;
end;

procedure TsCalcForm.sSpeedButton15Click(Sender: TObject);
begin
  if FStatus in [csValid, csFirst] then begin
    FStatus := csFirst;
    FMemory := GetDisplay;
    UpdateMemoryLabel;
  end;
end;

procedure TsCalcForm.sSpeedButton9Click(Sender: TObject);
begin
  if FStatus in [csValid, csFirst] then begin
    FStatus := csFirst;
    CheckFirst;
    SetDisplay(FMemory);
  end;
end;

procedure TsCalcForm.sSpeedButton3Click(Sender: TObject);
begin
  FMemory := 0.0;
  UpdateMemoryLabel;
end;

procedure TsCalcForm.OK1Click(Sender: TObject);
begin
  if FStatus <> csError then begin
    DisplayValue := DisplayValue;
    if Assigned(FOnOk) then FOnOk(Self);
  end
  else if FBeepOnError then MessageBeep(0);
end;

procedure TsCalcForm.Cancel1Click(Sender: TObject);
begin
  if Assigned(FOnCancel) then FOnCancel(Self);
end;

procedure TsCalcForm.sSpeedButton2Click(Sender: TObject);
begin
  CalcKey('C');
end;

procedure TsCalcForm.Paste;
begin
  if Clipboard.HasFormat(CF_TEXT) then begin
    try
      SetDisplay(StrToFloat(Trim(ReplaceStr(Clipboard.AsText, CurrencyString, ''))));
    except
      SetText('0');
    end;
  end;
end;

procedure TsCalcForm.sSpeedButton14Click(Sender: TObject);
begin
  CalcKey('%');
end;

procedure TsCalcForm.sSpeedButton8Click(Sender: TObject);
begin
  CalcKey('Q');
end;

procedure TsCalcForm.sSpeedButton20Click(Sender: TObject);
begin
  CalcKey('R');
end;

procedure TsCalcForm.sSpeedButton1Click(Sender: TObject);
begin
  CalcKey(#8);
end;

procedure TsCalcForm.Copy;
begin
  Clipboard.AsText := FText;
end;

procedure TsCalcForm.FormCreate(Sender: TObject);
begin
  FText := '0';
end;

procedure TsCalcForm.sToolButton3Click(Sender: TObject);
begin
  Application.Minimize;
end;

procedure TsCalcForm.sToolButton1Click(Sender: TObject);
begin
  Close;
end;

function TsCalcForm.GetValue: Variant;
begin
  Result := 0;
end;

procedure TsCalcForm.SetValue(const Value: Variant);
begin
  DisplayValue := 0;
end;

procedure TsCalcForm.FormShow(Sender: TObject);
begin
  if FEditor <> nil then SetDisplay(TsCustomNumEdit(FEditor).Value);
  if (FEditor <> nil) and (TsCustomNumEdit(FEditor).sStyle.sC <> nil) then begin
//    sEditorsManager.Assign(TsCustomNumEdit(FEditor).sStyle.sC)!
  end;
end;

procedure TsCalcForm.FormDeactivate(Sender: TObject);
begin
  if FEditor <> nil then Close;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡在线视频中文字幕| 国产欧美日韩激情| 中文字幕一区二区三区不卡在线| 亚洲成人第一页| 播五月开心婷婷综合| 欧美日韩视频不卡| 国产精品久久久久久久久果冻传媒 | av中文字幕亚洲| 欧美一级二级三级蜜桃| 亚洲一区二区三区视频在线播放| 成人丝袜高跟foot| 久久综合色婷婷| 日韩国产在线一| 欧美亚洲动漫另类| 亚洲视频网在线直播| 国产成人精品免费在线| 欧美一区二区视频在线观看| 亚洲精品久久嫩草网站秘色| www.亚洲色图.com| 亚洲国产成人自拍| 国产福利一区在线观看| 久久综合久久综合久久| 美国毛片一区二区| 日韩美女一区二区三区| 免费高清不卡av| 日韩片之四级片| 麻豆视频观看网址久久| 欧美一级高清大全免费观看| 男男视频亚洲欧美| 91麻豆精品久久久久蜜臀| 日韩av高清在线观看| 在线成人免费观看| 日韩电影一区二区三区| 91精品国产综合久久久久久漫画 | 欧美日韩精品一区二区| 一区二区高清在线| 欧美日韩一级片网站| 视频一区二区欧美| 日韩欧美在线综合网| 久久99深爱久久99精品| 久久精品视频在线免费观看| 懂色中文一区二区在线播放| 国产精品免费视频一区| 91小视频免费观看| 午夜精品福利视频网站| 欧美一区二区精美| 久久99精品国产麻豆不卡| 精品免费日韩av| av中文字幕一区| 天堂成人免费av电影一区| 精品久久免费看| 成人激情午夜影院| 亚洲一二三专区| 久久夜色精品国产欧美乱极品| 岛国一区二区在线观看| 一区二区三区加勒比av| 日韩精品中文字幕在线一区| 国产成人精品一区二区三区网站观看| 中文在线免费一区三区高中清不卡| 99久久99久久精品免费看蜜桃| 亚洲国产成人高清精品| 久久综合色之久久综合| 在线观看精品一区| 韩日欧美一区二区三区| 亚洲免费观看高清完整版在线| 91精品国产色综合久久ai换脸| 激情六月婷婷久久| 一区二区三区视频在线观看| 日韩欧美国产综合在线一区二区三区| 成人18视频在线播放| 日本最新不卡在线| 成人免费一区二区三区在线观看| 欧美日韩国产精品成人| 成人永久aaa| 蜜臀av国产精品久久久久| 亚洲欧美激情插| 久久综合久久综合久久综合| 欧美性生交片4| 国产成人无遮挡在线视频| 亚洲图片欧美综合| 中文字幕在线一区二区三区| 精品久久一区二区| 在线不卡的av| 91视视频在线直接观看在线看网页在线看| 日韩av在线发布| 一区二区视频免费在线观看| 欧美高清在线视频| 欧美www视频| 91精品国产综合久久国产大片| 在线观看一区日韩| 99久久精品久久久久久清纯| 国产精品主播直播| 麻豆精品在线视频| 日韩精品乱码av一区二区| 亚洲精选在线视频| 最新国产精品久久精品| 国产丝袜欧美中文另类| 欧美大肚乱孕交hd孕妇| 欧美日韩大陆一区二区| 色网站国产精品| 91影院在线免费观看| 99视频精品全部免费在线| 国产成人午夜视频| 国产乱码精品一品二品| 国产美女一区二区| 韩国v欧美v日本v亚洲v| 国产综合色产在线精品| 久久国产精品99久久久久久老狼 | 成人sese在线| 成人综合婷婷国产精品久久免费| 国产资源在线一区| 国产乱码精品一区二区三区忘忧草| 久久99精品一区二区三区三区| 蜜臀国产一区二区三区在线播放| 午夜久久久久久久久| 青娱乐精品视频| 久久国产视频网| 国产精品综合二区| 成人一区二区视频| av电影在线观看一区| 91亚洲大成网污www| 色美美综合视频| 欧美日韩精品欧美日韩精品 | 国产精品免费视频网站| 国产精品萝li| 樱花影视一区二区| 日韩1区2区日韩1区2区| 美腿丝袜一区二区三区| 国产在线精品一区二区不卡了| 国产麻豆成人精品| 国产91精品一区二区麻豆网站| 99热国产精品| 欧美色图激情小说| 欧美成人三级电影在线| 国产亚洲精久久久久久| 亚洲欧美另类小说视频| 亚洲成人精品一区二区| 国产真实乱子伦精品视频| 成人综合婷婷国产精品久久| 欧美在线999| 精品国精品国产尤物美女| 欧美国产精品一区| 亚洲综合男人的天堂| 捆绑调教一区二区三区| 成人国产精品免费观看动漫| 欧美亚一区二区| 久久综合一区二区| 玉足女爽爽91| 国产一区二区视频在线| 日本国产一区二区| 久久伊人中文字幕| 亚洲18色成人| 成人精品高清在线| 欧美乱熟臀69xxxxxx| 国产精品拍天天在线| 亚洲成人三级小说| www.亚洲色图.com| 精品免费日韩av| 亚洲大片免费看| www.成人网.com| 精品久久久网站| 午夜av电影一区| 99久久精品国产一区| 精品国产乱码久久久久久图片| 亚洲精品视频在线看| 国产999精品久久久久久绿帽| 欧美私人免费视频| 国产精品理论片| 国产一区二区网址| 日韩一区二区三区视频在线| 亚洲猫色日本管| 成人国产精品免费观看动漫| 精品99一区二区三区| 五月天视频一区| 99国产精品视频免费观看| 国产亚洲午夜高清国产拍精品| 亚洲国产一区在线观看| 91麻豆产精品久久久久久| 国产视频一区二区三区在线观看| 日日嗨av一区二区三区四区| 色婷婷亚洲婷婷| 亚洲三级小视频| 丁香桃色午夜亚洲一区二区三区| 日韩欧美一区电影| 美女视频黄久久| 欧美一区日本一区韩国一区| 亚洲高清免费在线| 欧洲精品在线观看| 一区二区三区免费网站| 一本到不卡精品视频在线观看| 国产精品乱码久久久久久| 国产精品99久久不卡二区| 久久精品欧美日韩| 国产九色精品成人porny| 久久久久久影视| 国产1区2区3区精品美女| 国产三级一区二区三区| 国产电影一区二区三区| 中文字幕乱码久久午夜不卡 | 国产成人啪免费观看软件 |