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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? poscontrol.pas

?? 小票樣式打印模板設(shè)計(jì),和管家婆的pos收銀系統(tǒng)小票樣式設(shè)計(jì)差不多
?? PAS
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
unit PosControl;

interface

uses
  SysUtils,windows,Graphics,Dialogs,Classes,Controls,stdCtrls,DB,DBGrideh,ytxStringGridEh,strUtils,
  Printers,PosPrintFunction,ExtCtrls;

const
  FileVersion=$AB71;
type
  TDriveMode=(DMNone,DMWindows);
  TDataType=(DtNone,DtTitleFields,DtBodyFields,DtSysFields);
  TBodyType=(btGrid,btDataSet);

  TReportVar=Class;
  TReportVars=Class;
  {表報(bào)主體}
  TPosReport = class(TComponent)
  private
    { Private declarations }
        {Private}
    FDriveMode:TDriveMode;        //驅(qū)動(dòng)模式
    FComName:String;              //端口名稱
    FComByte:Integer;             //波特率
    FOpenBoxCode:String;          //開錢箱指令
    FAutoOpenBox:Boolean;         //打印后自動(dòng)開錢箱
    FFootSpaceRow:integer;        //走紙行數(shù)
    FPageWidth:Integer;           //頁(yè)寬
    FPageHeight:integer;          //頁(yè)高
    FTitleRowCount:integer;       //頁(yè)頭行數(shù),用于換頁(yè)加表頭
    FQuantityDiciaLength: integer;  //數(shù)量小數(shù)點(diǎn)長(zhǎng)度
    FMoneyDiciaLength:integer;    //金額小數(shù)點(diǎn)長(zhǎng)度

    FSysVars:TReportVars;         //系統(tǒng)變量
    FTitleVars:TReportVars;       //表頭字段

    FPageNo:integer;                //頁(yè)碼
    FPageCount:integer;             //頁(yè)數(shù)
    FDetailRowCount:integer;        //行數(shù)
    FFont:TFont;
    FFontSize:integer;
    FBodyStartRow:integer;          //表體開始行數(shù)
    FBodyEndRow:integer;            //表體結(jié)束行數(shù)
    FStepRow:integer;               //表體占用行數(shù)

    FBodyType:TBodyType;           //表體類型

    FGrid:TYTXStringGridEh;
    FDataSet:TDataSet;
    FOpenFlag:Boolean;   //模板打開標(biāo)示
    FFilePathName:String; //械板文件位置

    FReportLines:TStringList;

    procedure CreateSysValues;
    procedure InitSysValues;
    Procedure SetTitleVars(TitleVars:TReportVars);
    Function GetTitleVars:TReportVars;
    Function GetVarValue(VarType:char;VarName:String):String;
    function FilterVar(S: String;out OutS: String): Boolean;
    function FilterFields(S: String;Row:integer; out OutS: String): Boolean;
    Procedure SetFont(Value:TFont);
    Function GetFont:TFont;
    function GetPrintData: TStringList;

  protected
    { Protected declarations }
  public
    { Public declarations }
     Constructor Create(AOwner:TComponent);Override;
     Destructor Destroy;override;
     Procedure ShowVarList(VarType:TDataType;Out ListFields:TListBox);
     Procedure SetBodyFields(AValue:TYTXStringGridEh);overload;
     Procedure SetBodyFields(AValue:TDataSet);Overload;
     Procedure SaveToFile(FileName:String);
     Procedure LoadFromFile(FileName:String);
     function PrintReport(OutMemo:TMemo):Boolean;overload;
     function PrintReport(OutMemo:TImage):boolean;overload;
     Function UpcaseCurrency(Value:extended):string;
     Function PrintNoDrive(Source:TStringList):Boolean;   //硬字庫(kù)打印
     Function PrintWithDrive(Source:TStringList):boolean;overload; //windows驅(qū)動(dòng)打印
     Function PrintWithDrive(Source:TStringList;AImage:TImage):Boolean;overload;
     procedure InitReportFile;
     Function Print:boolean;
     procedure ShowDesign;
     procedure PrintPreview;
    { Procedure ShowDesign;
     Procedure Print;
     Procedure PrintPreview; }
  published
    { Published declarations }
    Property ReportVars:TReportVars Read GetTitleVars Write SetTitleVars;
    Property AutoOpenBox:boolean Read FAutoOpenBox Write FAutoOpenBox;
    Property OpenBoxCode:String Read FOpenBoxCode Write FOpenBoxCode;
    Property DriveMode:TDriveMode Read FDriveMode Write FDriveMode;
    Property ComName:String Read FComName Write FComName;
    Property ComByte:Integer Read FComByte Write FComByte;
    Property FootSpaceRow:Integer Read FFootSpaceRow Write FFootSpaceRow;
    Property PageWidth:integer Read FPageWidth Write FPageWidth;
    Property PageHeight:integer Read FPageHeight Write FPageHeight;
    Property TitleRowCount:Integer Read FTitleRowCount Write FTitleRowCount;
    Property QuantityDicial:integer Read FQuantityDiciaLength Write FQuantityDiciaLength;
    Property MoneyDicial:integer Read FMoneyDiciaLength Write FMoneyDiciaLength;
    Property ReportLines:TStringList Read FReportLines Write FReportLines;
    Property BodyType:TBodyType Read FBodyType Write FBodyType;
    Property Grid:TytxStringGridEh Read FGrid;
    Property DataSet:TDataSet Read FDataSet;
    Property Font:TFont Read GetFont Write SetFont;

  end;

    {報(bào)表變量}
  TReportVar=Class(TCollectionItem)
  Private
    {Private}
    FVarName:String;
    FVarCaption:String;
    FVarValue:Variant;
    Procedure SetVarName(Value:String);
    Function GetVarName:String;
    Procedure SetVarCaption(Value:String);
    Function GetVarCaption:String;
    Procedure SetVarValue(Value:Variant);
    Function GetVarValue:Variant;
  Protected
    {Protected}
    procedure Assign(Source:TPersistent);override;
    function GetDisplayName: string; override;
    Function Index:integer;
  Public
    {Public}
    Constructor Create(ReportVars:TCollection);
  Published
    {Published}
    Property Name:String Read GetVarName Write SetVarName;
    Property Caption:String Read GetVarCaption Write SetVarCaption;
    Property Value:Variant Read GetVarValue Write SetVarValue;
  end;
    TReportVarClass=class of TReportVar;

  {報(bào)表變量集合}
  TReportVars=Class(TCollection)
  Private
    {Private}
    FPosReport:TPosReport;
    Function GetCount:integer;
    Function GetReportVar(Index:integer):TReportVar;
    Procedure SetReportVar(Index:integer;Value:TReportVar);
  protected
    {Protected}
    function GetOwner: TPersistent; override;
  Public
    {Public}
    Constructor Create(Report:TPosReport;ReportVarClass:TReportVarClass);
    Function Add:TReportVar;
    Procedure AddVar(ACaption,AName:String;Value:Variant);
    Procedure Clear;
    Function GetValueByName(VarName:String):Variant;
    Function GetValueByCaption(VarCaption:String):Variant;
    Function GetNameByCaption(Caption:String):String;
    Procedure SetValueByName(varName:String;Value:Variant);
    Procedure SetValueByCaption(varCaption:String;Value:Variant);
    Property Items[Index:integer]:TReportVar Read GetReportVar Write SetReportVar;default;
    Property PosReport:TPosReport Read FPosReport;
  Published
    {Published}
    Property ItemCount:integer Read GetCount;
  end;

procedure Register;
Function CurrencyToStr(Value:Extended):string;
function GetMoneySwitch(AMoney: string): string;

function com_init(com:Integer; baud:Dword):Boolean;stdcall;external 'api_com.dll';
function com_rest:Boolean;stdcall;external 'api_com.dll';
function com_send(buf:PChar; len:Integer):Boolean;stdcall;external 'api_com.dll';
function StringAlign(mStr: string; mLength:Integer;
      mAlignment: TAlignment; mBackChar: Char= #32):string;
implementation
uses frmPreviewDlg,FrmPrintManUnit;

procedure Register;
begin
  RegisterComponents('ytx工具',[TPosReport]);
end;

const
  NumberArray: array[0..9] of string =
    ('零', '壹','貳','叁','肆','伍','陸','柒','捌','玖');
  XSArray:array[0..2] of string =
    ('角','分','厘');
Function CurrencyToStr(Value:Extended):string;
var
  sMoney:string;
  sMoneyLen:integer;
  DiciaLen:integer;
  I,J:integer;
begin
  J:=0;
  sMoney:=GetMoneySwitch(FloatToStr(Value));
  sMoneyLen:=length(sMoney);
  DiciaLen:=0;
  Result:='';
  For I:=1 to sMoneyLen do
  begin
    if midStr(sMoney,I,1)<>'.' then
    begin
      Result:=Result + MidStr(sMoney,I,1);
      DiciaLen:=I;
    end else
    begin
      DiciaLen:=I;
      Break;
    end;
  end;
  if DiciaLen=sMoneyLen then
    Result:=Result+'元整'
  else
    Result:=Result + '元';
  
  For I:=DiciaLen+1 to sMoneyLen do
  begin
     if J<2 then
     begin
        Result:=Result + midStr(sMoney,I,1) + XSArray[J];
        Inc(J);
     end else
     begin
        Result:=Result + midStr(sMoney,I,1);
        Inc(J);
     end;
  end;
end;

// 數(shù)字轉(zhuǎn)成大寫
function GetMoneySwitch(AMoney: string): string;

  // 去除所有分隔符
  procedure ClearComma(var AValue: string);
  begin
    while Pos(',', AValue) > 0 do
      Delete(AValue, Pos(',', AValue), 1);
  end;

  // 測(cè)試如果為零將不返回值
  function FiltrateValue(const AValue, AStr: string): string;
  var
    IntValue: Integer;
  begin
    IntValue:= StrToIntDef(AValue, 0);
    if IntValue > 0 then Result:= AStr; 
  end;

  // 直接將數(shù)字翻譯成大寫
  function Direct(const AValue: string): string;
  var
    ResultStr: string;
    iCount: Integer;
  begin
    for iCount:= 1 to Length(AValue) do
      ResultStr:= ResultStr + NumberArray[StrToInt(AValue[iCount])];
    Result:= ResultStr;
  end;

  // 將四位長(zhǎng)度的數(shù)字翻譯與大寫
  function FourBit(const AValue: string): string;
  var
    i, x, j: Integer;
    IntValue: Integer;
    ResultStr: string;
  begin

    IntValue:= StrToIntDef(AValue, 0);
    x:= IntValue;

    i := x div 1000;
    j := x mod 1000;
    if i <> 0 then ResultStr:= NumberArray[i] + '仟'
    else begin
      if Length(AValue) > 3 then ResultStr:= '零';
    end;

    i := j div 100;
    j := j mod 100;
    if i <> 0 then  ResultStr:= ResultStr + NumberArray[i] + '佰'
    else begin
      if (ResultStr <> '') and (Length(AValue) > 2) and
        (Copy(ResultStr, Length(ResultStr)-1, 2) <> '零') then
        ResultStr:= ResultStr + '零';
    end;

    i := j div 10;
    j := j mod 10;
    if i <> 0 then ResultStr := ResultStr + NumberArray[i] + '拾'
    else begin
      if (ResultStr <> '') and (Length(AValue) > 1) and
        (Copy(ResultStr, Length(ResultStr)-1, 2) <> '零') then
        ResultStr:= ResultStr + '零';
    end;

    ResultStr := ResultStr + NumberArray[j];

    while Copy(ResultStr, Length(ResultStr)-1, 2) = '零' do
      Delete(ResultStr, Length(ResultStr)-1, 2);

    Result := ResultStr;
  end; 

var
  IntegerValue: string;   // 整數(shù)部分的值
  KilomegaValue: string;  // 存儲(chǔ)大于千兆的數(shù)字
  AccountValue: string;   // 在千兆以內(nèi)的整數(shù)部分
  DecimalValue: string;   // 存在小數(shù)點(diǎn)后的值

  ResultKilomega: string; // 大于千兆并翻譯后的大寫字符
  ResultAccount: string;  // 在千兆以內(nèi)的整數(shù)部分并翻譯后的大寫字符
  ResultDecimal: string;  // 小數(shù)點(diǎn)后的值并翻譯后的大寫字符

  FourBitStr: string;     // 最大四位值的字符
begin

  // 清除分隔符
  ClearComma(AMoney);

  // 驗(yàn)證字符串是否合法
  try
    AMoney:= FloatToStr(StrToFloat(AMoney));
  except
    raise Exception.Create('無(wú)效的數(shù)值字符串');
  end;

  // 取到小數(shù)據(jù)點(diǎn)后的值
  // 取出整數(shù)部分的值
  if Pos('.', AMoney) > 0 then
  begin
    DecimalValue:= Copy(AMoney, Pos('.', AMoney) + 1, Length(AMoney));
    IntegerValue:= Copy(AMoney, 0, Pos('.', AMoney)-1);
    ResultDecimal:= '.' + Direct(DecimalValue);
  end
  else IntegerValue:= AMoney;

  // 取到大于千兆的數(shù)字
  // 取到在千兆以內(nèi)的整數(shù)部分
  if Length(IntegerValue) > 16 then
  begin
    KilomegaValue:= Copy(IntegerValue, 0, Length(IntegerValue) - 12);
    AccountValue:= Copy(IntegerValue,
      Length(IntegerValue) - 11, Length(IntegerValue));
    ResultKilomega:= Direct(KilomegaValue) + '兆';
  end
  else AccountValue:= IntegerValue;

  { 翻譯在千兆以內(nèi)的整數(shù)部分 }

  // 翻譯在兆與仟兆之間的部份
  if Length(AccountValue) > 12 then
  begin
    FourBitStr:= Copy(AccountValue, 0, Length(AccountValue) - 12);
    ResultAccount:= ResultAccount +
      FourBit(FourBitStr) + FiltrateValue(FourBitStr, '兆');
    Delete(AccountValue, 1, Length(AccountValue) - 12);
  end;
  // 翻譯在億與仟億之間的部份
  if Length(AccountValue) >= 8 then
  begin
    FourBitStr:= Copy(AccountValue, 0, Length(AccountValue) - 8);
    ResultAccount:= ResultAccount +
      FourBit(FourBitStr) + FiltrateValue(FourBitStr, '億');
    Delete(AccountValue, 1, Length(AccountValue) - 8);
  end;
  // 翻譯在萬(wàn)與仟萬(wàn)之間的部份
  if Length(AccountValue) >= 5 then
  begin
    FourBitStr:= Copy(AccountValue, 0, Length(AccountValue) - 4);
    ResultAccount:= ResultAccount +
      FourBit(FourBitStr) + FiltrateValue(FourBitStr, '萬(wàn)');
    Delete(AccountValue, 1, Length(AccountValue) - 4);
  end;
  // 翻譯萬(wàn)以下的部份
  if Length(AccountValue) > 0 then
  begin
    ResultAccount:= ResultAccount +
      FourBit(Copy(AccountValue, 0, Length(AccountValue)));
  end;

  // 組合字符串
  Result:= ResultKilomega + ResultAccount + ResultDecimal;
  
end;


{ TPosReport }

constructor TPosReport.Create(AOwner: TComponent);
begin
  inherited;
  FAutoOpenBox:=false;
  FBodyEndRow:=0;
  FBodyStartRow:=0;
  FBodyType:=BtGrid;
  FComByte:=9600;
  FDataSet:=nil;
  FDetailRowCount:=0;
  FDriveMode:=dmNone;
  FFilePathName:='';
  FFootSpaceRow:=3;
  FGrid:=nil;
  FMoneyDiciaLength:=2;
  FOpenBoxCode:='Chr(27)+''p''+Chr(0)+Chr(60)+Chr(255)';
  FOpenFlag:=False;
  FPageCount:=0;
  FPageWidth:=53;
  FPageHeight:=20;
  FQuantityDiciaLength:=0;
  FStepRow:=0;
  FTitleRowCount:=0;
  FFont:=TFont.Create;
  FFontSize:=9;  
  FTitleVars:=TReportVars.Create(self,TReportVar);
  FSysVars:=TReportVars.Create(self,TReportVar);
  FReportLines:=TStringList.Create;
  CreateSysValues;   //添加系統(tǒng)變
  InitSysValues;
end;

procedure TPosReport.CreateSysValues;
begin
  FSysVars.AddVar('長(zhǎng)日期','[@.長(zhǎng)日期]','');
  FSysVars.AddVar('日期','[@.日期]','');
  FSysVars.AddVar('時(shí)間','[@.時(shí)間]','');
  FSysVars.AddVar('頁(yè)碼','[@.頁(yè)碼]','');
  FSysVars.AddVar('頁(yè)數(shù)','[@.頁(yè)數(shù)]','');

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色大成网站www久久九九| 午夜精品国产更新| 欧美男女性生活在线直播观看| 精品一区二区在线播放| 亚洲自拍偷拍综合| 欧美—级在线免费片| 欧美一区2区视频在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 日本亚洲电影天堂| 一区二区三区日韩在线观看| 国产喂奶挤奶一区二区三区| 5566中文字幕一区二区电影| 91视频精品在这里| 国产精品亚洲视频| 久久99深爱久久99精品| 亚洲在线成人精品| 亚洲欧洲日韩在线| 国产午夜精品久久久久久久 | 欧美极品xxx| 欧美一区二区福利在线| 日本高清视频一区二区| 成人av手机在线观看| 精品一区二区久久久| 免费人成黄页网站在线一区二区| 一区二区三区国产精品| 亚洲日本在线看| 国产精品人成在线观看免费| 国产亚洲一二三区| 精品国产露脸精彩对白| 日韩欧美一区二区免费| 欧美一三区三区四区免费在线看| 91高清视频在线| 在线精品视频小说1| 在线亚洲人成电影网站色www| 99r国产精品| 97精品久久久午夜一区二区三区| 成人免费高清在线| 99久久伊人久久99| 99久久综合精品| 97精品国产露脸对白| 91视频xxxx| 色香蕉久久蜜桃| 一本一道波多野结衣一区二区| 91麻豆自制传媒国产之光| 91污在线观看| 欧美三级电影网站| 91精品国产综合久久精品| 欧美丰满少妇xxxbbb| 91精品婷婷国产综合久久性色| 欧美顶级少妇做爰| 欧美成人精品3d动漫h| 26uuu欧美| 欧美激情在线一区二区| 中文字幕一区二区三区四区不卡 | 久久久久国产成人精品亚洲午夜| 精品国产精品网麻豆系列 | 亚洲高清免费观看高清完整版在线观看 | 久久不见久久见免费视频1| 国产一区二区三区四| 成人午夜精品在线| 日本福利一区二区| 6080日韩午夜伦伦午夜伦| 2020国产精品久久精品美国| 国产日韩影视精品| 一区二区三区欧美在线观看| 亚洲bt欧美bt精品| 精品一区二区久久| av成人免费在线| 717成人午夜免费福利电影| 欧美成人官网二区| 成人免费在线视频| 日韩av在线发布| 国产超碰在线一区| 精品视频在线免费看| 久久品道一品道久久精品| 亚洲图片激情小说| 免费人成黄页网站在线一区二区| 国产高清成人在线| 欧美日韩综合在线免费观看| 日韩欧美一级二级三级久久久| 国产精品丝袜在线| 水野朝阳av一区二区三区| 国产成人精品免费一区二区| 欧美色偷偷大香| 久久久久久免费| 亚洲bt欧美bt精品777| 国产aⅴ综合色| 欧美一区二区三区人| 中文字幕在线不卡国产视频| 日本欧美一区二区三区| 99久久精品免费精品国产| 日韩一区二区在线观看| 亚洲欧美国产高清| 国产一区二区三区综合| 欧美久久久久久久久久| 中文字幕精品三区| 看电影不卡的网站| 欧美亚洲国产bt| 国产精品午夜电影| www.亚洲在线| 日韩视频在线一区二区| 亚洲精品国产无套在线观| 激情综合色综合久久综合| 色又黄又爽网站www久久| 国产欧美日韩三级| 激情av综合网| 欧美电影一区二区| 有码一区二区三区| 成人av电影在线播放| 精品国产乱子伦一区| 亚洲成在线观看| 91在线免费视频观看| 国产欧美精品一区aⅴ影院| 久久99精品久久久| 欧美精品色一区二区三区| 亚洲精品va在线观看| 99久久伊人久久99| 国产精品日日摸夜夜摸av| 国内精品第一页| 日韩精品自拍偷拍| 奇米精品一区二区三区四区| 欧美日韩激情一区二区| 亚洲一区二区三区美女| 91麻豆精品秘密| 国产精品美女久久福利网站| 国产电影精品久久禁18| 久久亚洲私人国产精品va媚药| 日韩精品成人一区二区三区| 在线观看视频一区| 一区二区三区日韩| 在线观看中文字幕不卡| 亚洲精品网站在线观看| 色综合久久99| 一片黄亚洲嫩模| 在线观看免费一区| 亚洲成人手机在线| 欧美另类videos死尸| 天堂成人免费av电影一区| 欧美日韩一区高清| 日本不卡一区二区三区高清视频| 正在播放亚洲一区| 九九视频精品免费| 久久影院视频免费| 成人福利视频在线看| 综合av第一页| 色婷婷综合激情| 亚洲风情在线资源站| 欧美精品黑人性xxxx| 另类小说综合欧美亚洲| 精品国产制服丝袜高跟| 国产乱对白刺激视频不卡| 国产精品久久夜| 91色综合久久久久婷婷| 午夜精品成人在线| 精品国产乱码久久久久久闺蜜 | 狠狠色丁香久久婷婷综合_中| 精品国产乱码久久久久久图片| 国产精品一区二区久久不卡| 中文字幕在线观看不卡视频| 欧美在线影院一区二区| 人禽交欧美网站| 久久久久久久久久久久电影| 丁香网亚洲国际| 一二三区精品视频| 欧美电影免费观看完整版| 国产在线精品免费| 亚洲精品国产无天堂网2021| 69久久夜色精品国产69蝌蚪网| 经典一区二区三区| 国产精品二三区| 欧美日韩国产综合一区二区三区| 韩国av一区二区三区在线观看| 国产精品国产自产拍高清av| 欧美精品v国产精品v日韩精品 | 午夜亚洲国产au精品一区二区| 欧美电影免费提供在线观看| 波多野结衣精品在线| 天天色 色综合| 国产午夜精品久久久久久久| 欧美午夜一区二区三区免费大片| 精品在线免费观看| 亚洲品质自拍视频| 欧美大片拔萝卜| 色偷偷久久一区二区三区| 久久99国产精品久久| 亚洲黄色小视频| 久久久久久久精| 欧美色综合天天久久综合精品| 国产美女视频一区| 亚洲午夜一区二区| 国产精品久久久久国产精品日日| 91精品国产福利在线观看| 99精品在线免费| 国产一区中文字幕| 日韩电影一区二区三区| 亚洲欧美电影一区二区| 久久综合色8888| 7777精品伊人久久久大香线蕉经典版下载 | 欧美哺乳videos| 欧美日韩一区二区在线观看|