📄 un_utl.pas
字号:
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 + -