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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(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,GridsEh,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;          //開(kāi)錢箱指令
    FAutoOpenBox:Boolean;         //打印后自動(dòng)開(kāi)錢箱
    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;          //表體開(kāi)始行數(shù)
    FBodyEndRow:integer;            //表體結(jié)束行數(shù)
    FStepRow:integer;               //表體占用行數(shù)

    FBodyType:TBodyType;           //表體類型

    FGrid:TYTXStringGridEh;
    FDataSet:TDataSet;
    FOpenFlag:Boolean;   //模板打開(kāi)標(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ù)]','');

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av电影在线播放| 99久久精品国产毛片| 日韩国产精品久久久| 黑人巨大精品欧美黑白配亚洲| 一区二区三区产品免费精品久久75| 国产精品欧美久久久久一区二区 | 欧美日韩一级二级三级| 欧美色图12p| 日韩一区二区三区视频| 亚洲免费观看高清完整版在线观看| 一区二区三区中文字幕| 久久精品国产亚洲一区二区三区 | 国产偷国产偷亚洲高清人白洁| 国产精品卡一卡二| 亚洲激情自拍偷拍| 一区二区三区精密机械公司| 蜜臀av一级做a爰片久久| 成人深夜视频在线观看| av电影一区二区| 欧美日韩国产a| 精品国产乱码久久久久久夜甘婷婷| 中文字幕日本乱码精品影院| 97精品电影院| 国产视频一区在线播放| 九九国产精品视频| 91精品国产黑色紧身裤美女| 亚洲国产精品精华液网站| 欧洲国内综合视频| 日韩一区二区三区观看| 成人在线综合网站| 久久久精品免费观看| 久久久久国产精品人| 一区二区三区影院| 粉嫩嫩av羞羞动漫久久久| 丝袜诱惑制服诱惑色一区在线观看| 色婷婷久久久久swag精品| 亚洲婷婷在线视频| 国产精品主播直播| 精品嫩草影院久久| 日韩黄色在线观看| 5858s免费视频成人| 亚洲欧美日韩国产手机在线 | 欧美一区二区在线免费播放| 国产精品久久久久影院| 国v精品久久久网| 欧美综合一区二区| 亚洲精品成人少妇| 成人午夜免费电影| 亚洲r级在线视频| 91精品办公室少妇高潮对白| 亚洲另类一区二区| 中国av一区二区三区| 日韩一区中文字幕| 99久久久无码国产精品| 中文字幕中文字幕在线一区| av资源站一区| 亚洲欧美国产毛片在线| 色婷婷激情一区二区三区| 亚洲欧美日韩中文播放| 精品视频在线免费看| 亚洲地区一二三色| 日韩一区国产二区欧美三区| 日本va欧美va欧美va精品| 欧美tk丨vk视频| 国产精品一区在线观看乱码| 亚洲欧美区自拍先锋| 欧美日韩三级在线| 国产一区二区视频在线| 欧美一卡二卡在线| 国产成人精品网址| 三级在线观看一区二区| 国产精品污网站| 精品国免费一区二区三区| 高清在线观看日韩| 亚洲线精品一区二区三区 | aaa亚洲精品| 午夜久久久久久| 国产色产综合色产在线视频| 在线观看国产91| 韩国精品主播一区二区在线观看 | 精品成人佐山爱一区二区| 色视频欧美一区二区三区| 狠狠色丁香婷婷综合| 中文字幕av一区二区三区免费看| 欧美三级中文字幕| 91色.com| 99久久综合色| 成人综合婷婷国产精品久久免费| 日日夜夜精品免费视频| 亚洲男人天堂一区| 一色桃子久久精品亚洲| 国产日韩v精品一区二区| 亚洲欧美日韩精品久久久久| ww亚洲ww在线观看国产| 日韩欧美一区在线| 9191久久久久久久久久久| 94-欧美-setu| 波多野结衣中文字幕一区二区三区| 久久99精品久久只有精品| 天天色天天操综合| 亚欧色一区w666天堂| 青青草原综合久久大伊人精品 | 免费观看一级欧美片| 日韩电影在线免费| 午夜亚洲福利老司机| 视频一区二区三区在线| 日本va欧美va精品发布| 午夜精品影院在线观看| 五月综合激情日本mⅴ| 免费国产亚洲视频| 国产精品456| 色综合咪咪久久| 91麻豆精品国产无毒不卡在线观看 | 久久尤物电影视频在线观看| 久久久国产精品不卡| 国产精品视频你懂的| 一区二区在线观看免费视频播放| 亚洲大尺度视频在线观看| 麻豆91在线观看| 成人免费观看视频| 欧美人与z0zoxxxx视频| 2023国产精品视频| 一区二区成人在线观看| 久久国产精品区| 日本韩国欧美三级| 精品国产乱码久久久久久老虎| 中文字幕乱码久久午夜不卡| 亚洲激情第一区| 国产一区二区女| 91蜜桃传媒精品久久久一区二区| 欧美一级欧美一级在线播放| 国产精品初高中害羞小美女文 | 午夜久久久久久| 不卡电影一区二区三区| 一区二区三区不卡在线观看 | 日韩和欧美一区二区| 色综合久久天天综合网| 国产精品亲子伦对白| 国产91丝袜在线18| 久久综合av免费| 美国毛片一区二区| 欧美成人精精品一区二区频| 日本va欧美va瓶| 91精品国产综合久久福利软件| 一区二区三区四区乱视频| 91丨porny丨国产入口| 国产精品欧美一级免费| www.综合网.com| 中文字幕一区二区三区乱码在线 | 91行情网站电视在线观看高清版| 欧美国产精品一区| 99久久国产综合精品麻豆 | 卡一卡二国产精品 | 国产麻豆精品视频| 国产日韩精品一区二区三区| 国产成人激情av| 最新不卡av在线| jvid福利写真一区二区三区| 国产精品久久久久久久久久免费看| 国产99久久久国产精品免费看| 国产精品久久久久久亚洲毛片| 91影视在线播放| 天堂一区二区在线| 欧美精品一区二区精品网| 国产成人自拍网| 亚洲综合色丁香婷婷六月图片| 欧美日韩二区三区| 国产精品自拍网站| 一区二区三区高清在线| 日韩精品一区二区三区中文不卡| 国产伦精品一区二区三区在线观看| 中文字幕中文乱码欧美一区二区| 在线免费观看视频一区| 国产在线观看免费一区| 亚洲精品日韩综合观看成人91| 欧美一级艳片视频免费观看| av在线一区二区| 美女视频黄频大全不卡视频在线播放| 久久久99久久| 精品久久久久久久人人人人传媒 | 欧美日本一区二区在线观看| 国产精品一区二区在线观看网站| 亚洲综合在线免费观看| 国产精品亲子伦对白| 精品国精品国产| 777午夜精品免费视频| 99久久久久免费精品国产 | 中文子幕无线码一区tr| 欧美一二三区在线| 8x8x8国产精品| 欧美日韩精品一区视频| 91视视频在线观看入口直接观看www | 国产91丝袜在线播放九色| 蜜臀久久久99精品久久久久久| 伊人色综合久久天天人手人婷| 中文字幕制服丝袜成人av | 在线播放国产精品二区一二区四区| 色视频欧美一区二区三区| 99视频国产精品| 99久久精品一区二区|