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

📄 un_utl.pas

📁 库房管理系统
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  STOSD		      {CPUID[1]}
  MOV     EAX,EBX
  STOSD               {CPUID[2]}
  MOV     EAX,ECX
  STOSD               {CPUID[3]}
  MOV     EAX,EDX
  STOSD               {CPUID[4]}
  POP     EDI	      {Restore registers}
  POP     EBX
END;

FUNCTION GetCPUVendor : TVendor; assembler; register;
asm
  PUSH    EBX	      {Save affected register}
  PUSH    EDI
  MOV     EDI,EAX     {@Result (TVendor)}
  MOV     EAX,0
  DW      $A20F	      {CPUID Command}
  MOV     EAX,EBX
  XCHG	  EBX,ECX     {save ECX result}
  MOV	  ECX,4
@1:
  STOSB
  SHR     EAX,8
  LOOP    @1
  MOV     EAX,EDX
  MOV	  ECX,4
@2:
  STOSB
  SHR     EAX,8
  LOOP    @2
  MOV     EAX,EBX
  MOV	  ECX,4
@3:
  STOSB
  SHR     EAX,8
  LOOP    @3
  POP     EDI	     {Restore registers}
  POP     EBX
END;



FUNCTION EAN13_ENCODE(T_STR:STRING):STRING;
VAR S : ARRAY [2..13] OF INTEGER;
    ANSWER : STRING;
BEGIN
  T_STR := TRIM(T_STR);
  RESULT := '';

  //空白跳出
  IF LENGTH(T_STR) < 12 THEN EXIT;
  S[13] := STRTOINTDEF( T_STR[ 1] ,-1);
  S[12] := STRTOINTDEF( T_STR[ 2] ,-1);
  S[11] := STRTOINTDEF( T_STR[ 3] ,-1);
  S[10] := STRTOINTDEF( T_STR[ 4] ,-1);
  S[ 9] := STRTOINTDEF( T_STR[ 5] ,-1);
  S[ 8] := STRTOINTDEF( T_STR[ 6] ,-1);
  S[ 7] := STRTOINTDEF( T_STR[ 7] ,-1);
  S[ 6] := STRTOINTDEF( T_STR[ 8] ,-1);
  S[ 5] := STRTOINTDEF( T_STR[ 9] ,-1);
  S[ 4] := STRTOINTDEF( T_STR[10] ,-1);
  S[ 3] := STRTOINTDEF( T_STR[11] ,-1);
  S[ 2] := STRTOINTDEF( T_STR[12] ,-1);
  
  IF S[13] < 0 THEN EXIT;
  IF S[12] < 0 THEN EXIT;
  IF S[11] < 0 THEN EXIT;
  IF S[10] < 0 THEN EXIT;
  IF S[ 9] < 0 THEN EXIT;
  IF S[ 8] < 0 THEN EXIT;
  IF S[ 7] < 0 THEN EXIT;
  IF S[ 6] < 0 THEN EXIT;
  IF S[ 5] < 0 THEN EXIT;
  IF S[ 4] < 0 THEN EXIT;
  IF S[ 3] < 0 THEN EXIT;
  IF S[ 2] < 0 THEN EXIT;
  
  ANSWER := INTTOSTR( (S[2] + S[4] + S[6] + S[8] + S[10] + S[12])*3 +
                      S[3] + S[5] + S[7] + S[9] + S[11] + S[13] );
  ANSWER := INTTOSTR(10 - (STRTOINT(ANSWER)MOD 10) );
  
  RESULT := T_STR+COPY_R(ANSWER,1,1);
END;

FUNCTION EAN13_AUTOADD(T_STR:STRING):STRING;
BEGIN
  IF LENGTH(T_STR) < 13 THEN
     BEGIN
     T_STR := REPLICATE('0',12 - LENGTH(T_STR) ) + T_STR;
     T_STR := EAN13_ENCODE(T_STR);
     END;
  RESULT := T_STR;
END;




//发票类 =======================================================================
FUNCTION INVOICE_NO_CHECK(T_STR:STRING):BOOLEAN;
BEGIN
  RESULT  := FALSE;
  IF T_STR <> '' THEN
     BEGIN
     IF (LENGTH(T_STR)=10 ) THEN IF STRTOINTDEF(COPY(T_STR,3,8),-1) >= 0 THEN RESULT := TRUE;
     IF (LENGTH(T_STR)= 8 ) THEN IF STRTOINTDEF(T_STR,-1) >= 0           THEN RESULT := TRUE;
     END;
END;
//发票类 =======================================================================




//检查信用卡号
FUNCTION ValidateCreditCardNo(value: STRING; WARNING:BOOLEAN): BOOLEAN;
VAR idx, Sum, leng, Weight: INTEGER;
    Digital: array of INTEGER;
    DigitalNumberIsOdd: BOOLEAN;
BEGIN
  Result := FALSE;
  leng := length(value);
  IF leng=0 then EXIT;
  SetLength(Digital, leng);
  Sum := 0;

  IF Odd(leng) then DigitalNumberIsOdd := TRUE
               else DigitalNumberIsOdd := FALSE;

  for idx := 1 to leng do
  BEGIN
    Digital[idx - 1] := Ord(Value[idx]) - Ord('0');
    IF (Digital[idx - 1] > 9) or (Digital[idx - 1] < 0) then EXIT;
    IF (DigitalNumberIsOdd) then
      IF odd(idx) then Weight := 1
                  else Weight := 2
    else
      IF odd(idx) then Weight := 2
                  else Weight := 1;
    Digital[idx - 1] := Digital[idx - 1] * Weight;
    IF (Digital[idx - 1] > 9) then Digital[idx - 1] := Digital[idx - 1] - 9;
    Sum := Sum + Digital[idx - 1];
  END;

  IF (Sum mod 10 = 0) then Result := TRUE
                      else Result := FALSE;

  IF (WARNING = TRUE) AND (RESULT = FALSE) THEN SHOWMESSAGE('信用卡号码错误!');
END;


















//对象 储存相关信息值 INI FILE  ================================================
FUNCTION INI_SAVE_OBJECT(INIFILENAME, OBJECT_NAME :STRING; T_LEFT, T_TOP :INTEGER; T_TEXT:STRING):BOOLEAN;
VAR T : TINIFILE; //暂存对象
BEGIN
  TRY
    T := TINIFILE.Create(INIFILENAME);
    T.WriteINTEGER(OBJECT_NAME,'LEFT', T_LEFT);
    T.WriteINTEGER(OBJECT_NAME,'TOP' , T_TOP );
    T.WriteSTRING (OBJECT_NAME,'TEXT', T_TEXT);
    RESULT := TRUE;
  FINALLY   T.FREE;  END;
END;

//对象 储存相关信息值 INI FILE  ================================================
FUNCTION INI_SAVE_INT(INIFILENAME, OBJECT_NAME :STRING; T_INTEGER :INTEGER):BOOLEAN;
VAR T : TINIFILE; //暂存对象
BEGIN
  TRY
    T := TINIFILE.Create(INIFILENAME);
    T.WriteINTEGER(OBJECT_NAME,'INTEGER', T_INTEGER);
    RESULT := TRUE;
  FINALLY   T.FREE;  END;
END;

//对象 储存相关信息值 INI FILE  ================================================
FUNCTION INI_SAVE_STR(INIFILENAME, OBJECT_NAME :STRING; T_STR :STRING):BOOLEAN;
VAR T : TINIFILE; //暂存对象
BEGIN
  TRY
    T := TINIFILE.Create(INIFILENAME);
    T.WriteSTRING(OBJECT_NAME,'STRING', T_STR);
    RESULT := TRUE;
  FINALLY   T.FREE;  END;
END;

//对象 储存相关信息值 INI FILE  ================================================
FUNCTION INI_SAVE_STR2(INIFILENAME, OBJECT_NAME, OBJECT_KIND :STRING; T_STR :STRING):BOOLEAN;
VAR T : TINIFILE; //暂存对象
BEGIN
  TRY
    T := TINIFILE.Create(INIFILENAME);
    T.WriteSTRING(OBJECT_NAME,OBJECT_KIND, T_STR);
    RESULT := TRUE;
  FINALLY   T.FREE;  END;
END;

//对象 储存相关信息值 INI FILE  ================================================
FUNCTION INI_SAVE_BOOL(INIFILENAME, OBJECT_NAME :STRING; T_BOOL :BOOLEAN):BOOLEAN;
VAR T : TINIFILE; //暂存对象
BEGIN
  TRY
    T := TINIFILE.Create(INIFILENAME);
    T.WriteBool(OBJECT_NAME,'BOOL', T_BOOL);
    RESULT := TRUE;
  FINALLY   T.FREE;  END;
END;

//对象 取回相关信息值 INI FILE  ================================================
FUNCTION INI_LOAD_OBJECT(INIFILENAME, OBJECT_NAME, OBJECT_KIND, T_DEFAULT :STRING):STRING;
VAR T : TINIFILE; //暂存对象
BEGIN
  TRY
    T := TINIFILE.Create(INIFILENAME);
    RESULT := T.ReadSTRING(OBJECT_NAME,OBJECT_KIND, T_DEFAULT);
  FINALLY   T.FREE;  END;
END;

//对象 取回相关信息值 INI FILE  ================================================
FUNCTION INI_LOAD_INT(INIFILENAME, OBJECT_NAME :STRING; T_DEFAULT:INTEGER ):INTEGER;
VAR T : TINIFILE; //暂存对象
BEGIN
  TRY
    T := TINIFILE.Create(INIFILENAME);
    RESULT := T.ReadINTEGER(OBJECT_NAME,'INTEGER', T_DEFAULT);
  FINALLY   T.FREE;  END;
END;

//对象 取回相关信息值 INI FILE  ================================================
FUNCTION INI_LOAD_STR(INIFILENAME, OBJECT_NAME :STRING; T_DEFAULT:STRING  ):STRING;
VAR T : TINIFILE; //暂存对象
BEGIN
  TRY
    T := TINIFILE.Create(INIFILENAME);
    RESULT := T.ReadSTRING(OBJECT_NAME,'STRING', T_DEFAULT);
  FINALLY   T.FREE;  END;
END;

//对象 取回相关信息值 INI FILE  ================================================
FUNCTION INI_LOAD_STR2(INIFILENAME, OBJECT_NAME , OBJECT_KIND:STRING; T_DEFAULT:STRING  ):STRING;
VAR T : TINIFILE; //暂存对象
BEGIN
  TRY
    T := TINIFILE.Create(INIFILENAME);
    RESULT := T.ReadSTRING(OBJECT_NAME,OBJECT_KIND, T_DEFAULT);
  FINALLY   T.FREE;  END;
END;

//对象 取回相关信息值 INI FILE  ================================================
FUNCTION INI_LOAD_BOOL(INIFILENAME, OBJECT_NAME :STRING; T_DEFAULT:BOOLEAN  ):BOOLEAN;
VAR T : TINIFILE; //暂存对象
BEGIN
  TRY
    T := TINIFILE.Create(INIFILENAME);
    RESULT := T.ReadBool(OBJECT_NAME,'BOOL', T_DEFAULT);
  FINALLY   T.FREE;  END;
END;
// =============================================================================









FUNCTION GetAveCharSize(Canvas: TCanvas): TPoint;
var
  I: INTEGER;
  Buffer: array[0..51] of Char;
BEGIN
  for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
  for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
  GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
  Result.X := Result.X div 52;
END;




FUNCTION JInputQuery(const ACaption, APrompt: STRING;  VAR Value: STRING): BOOLEAN;
var
  Form: TForm;
  Prompt: TLabel;
  Edit: TEdit;
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: INTEGER;
BEGIN
  Result := FALSE;
  Form := TForm.Create(Application);
  WITH Form do
    try
      Canvas.Font := Font;
      FONT.SIZE   := 20;
      FONT.NAME   := 'Arial';
      DialogUnits := GetAveCharSize(Canvas);
      BorderStyle := bsDialog;
      Caption := ACaption;
      ClientWidth := MulDiv(180, DialogUnits.X, 4);
      ClientHeight := MulDiv(64, DialogUnits.Y, 8);
      Position := poScreenCenter;
      Prompt := TLabel.Create(Form);
      WITH Prompt do
      BEGIN
        Parent := Form;
        FONT.SIZE   := 46;
        AutoSize := TRUE;
        Left := MulDiv(8, DialogUnits.X, 4);
        Top := MulDiv(2, DialogUnits.Y, 72);
        Caption := APrompt;
      END;
      Edit := TEdit.Create(Form);
      WITH Edit do
      BEGIN
        Parent := Form;
        FONT.SIZE   := 46;
        Left := Prompt.Left;
        Top := MulDiv(19, DialogUnits.Y, 8);
        Width := MulDiv(164, DialogUnits.X, 4);
        MaxLength := 255;
        Text := Value;
        SelectAll;
      END;
      ButtonTop := MulDiv(41, DialogUnits.Y, 8);
      ButtonWidth := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
      WITH TButton.Create(Form) do
      BEGIN
        Parent := Form;
        Caption := ' 确定 OK ';
        ModalResult := mrOk;
        Default := TRUE;
        SetBounds(MulDiv(60, DialogUnits.X, 4), ButtonTop, ButtonWidth,  ButtonHeight);
        Top := MulDiv(45, DialogUnits.Y, 8);
      END;
{      WITH TButton.Create(Form) do
      BEGIN
        Parent := Form;
        Caption := 'SMsgDlgCancel;
        ModalResult := mrCancel;
        Cancel := TRUE;
        SetBounds(MulDiv(92, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      END;
}      IF ShowModal = mrOk then
      BEGIN
        Value := Edit.Text;
        Result := TRUE;
      END;
    finally
      Form.FREE;
    END;
END;

FUNCTION JInputBox(const ACaption, APrompt, ADefault: STRING): STRING;
BEGIN
  Result := ADefault;
  JInputQuery(ACaption, APrompt, Result);
END;

FUNCTION JMSGFORM(const ACaption, ADefault: STRING;T_FONTSIZE:INTEGER): BOOLEAN;
var
  Form: TForm;
  MEMO  : TMEMO;
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: INTEGER;
BEGIN
  Result := FALSE;
  Form := TForm.Create(Application);
  WITH Form do
    try
      Canvas.Font := Font;
      FONT.SIZE   := 16;
      FONT.NAME   := 'Arial';
      DialogUnits := GetAveCharSize(Canvas);
      BorderStyle := bsDialog;
      Caption := ACaption;
      ClientWidth  := MulDiv(180, DialogUnits.X, 4);
      ClientHeight := MulDiv(160, DialogUnits.Y, 8);
      Position := poScreenCenter;
      MEMO := TMEMO.Create(Form);
      WITH MEMO do
      BEGIN
        Parent := Form;
        SCROLLBARS := SSBOTH;
        COLOR := CLBLACK;
        FONT.COLOR := CLWHITE;
        FONT.Name  := 'Courier New';
        FONT.SIZE   := T_FONTSIZE;
        Left   := 2;  Top := 2;
        Width  := FORM.Width  -11;
        HEIGHT := FORM.HEIGHT -70;
        Lines.Text := ADefault;
      END;
      ButtonTop    := MulDiv(41, DialogUnits.Y, 8);
      ButtonWidth  := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
      WITH TButton.Create(Form) do
      BEGIN
        Parent := Form;
        Caption := ' 确定 OK ';
        ModalResult := mrOk;
        Default := TRUE;
        Width  := 200;     HEIGHT := 40;
        Top := FORM.Height - HEIGHT - 24;
        LEFT := 50;
      END;
      WITH TButton.Create(Form) do
      BEGIN
        Parent := Form;
        Caption := ' 取消 Cancel ';
        ModalResult := mrCancel;
        Cancel := TRUE;
        Width  := 200;     HEIGHT := 40;
        Top := FORM.Height - HEIGHT - 24;
        LEFT := FORM.WIDTH - 50 - WIDTH;
      END;
    IF ShowModal = mrOk then Result := TRUE;
    finally
      Form.FREE;
    END;

END;



FUNCTION JSHOWMESSAGE(const ACaption, APROMPT: STRING): BOOLEAN;
VAR Form: TForm;
    Prompt: TLabel;
    DialogUnits: TPoint;
    ButtonTop, ButtonWidth, ButtonHeight: INTEGER;
BEGIN
  Result := FALSE;
  Form := TForm.Create(Application);
  WITH Form do
    try
      Canvas.Font := Font;
      FONT.SIZE   := 20;
      FONT.NAME   := 'Arial';
      DialogUnits := GetAveCharSize(Canvas);
      BorderStyle := bsDialog;
      Caption := ACaption;
      ClientWidth := MulDiv(180, DialogUnits.X, 4);
      ClientHeight := MulDiv(32, DialogUnits.Y, 8);
      Position := poScreenCenter;
      Prompt := TLabel.Create(Form);
      WITH Prompt do
      BEGIN
        Parent := Form;
        FONT.SIZE   := 32;
        AutoSize := TRUE;
        Left := MulDiv(6, DialogUnits.X, 4);
        Top := MulDiv(12, DialogUnits.Y, 72);
        Caption := APROMPT;
      END;
      ButtonTop := MulDiv(10, DialogUnits.Y, 8);
      ButtonWidth := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
      WITH TButton.Create(Form) do
      BEGIN
        Parent := Form;
        Caption := ' 确定 OK ';
        ModalResult := mrOk;
        Default := TRUE;
        SetBounds(MulDiv(60, DialogUnits.X, 4), ButtonTop, ButtonWidth,  ButtonHeight);
        Top := MulDiv(16, DialogUnits.Y, 8);
      END;
      IF ShowModal = mrOk then Result := TRUE;
    finally
      Form.FREE;
    END;

END;










end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -