?? uappstringutilts.pas
字號:
{==========================================================================
字符串相關的公用函數單元
===========================================================================}
unit uAppStringUtilts;
interface
uses Windows, Messages, SysUtils, classes, stdctrls, comctrls;
type
TFillStringMode = (fsmLeft, fsmRight, fsmBoth);
function GetCodeFromString_Bracket(AString: string; ADefault: string=''): string;
{ 功 能:獲得包含在括號中的編號
入 參:AString:必須,包含編號和括號的字符串
ADefault: 可無,當找不到結點中包含的編號時返回的默認值
返回結果:代表編號的字符串,如“(12)ABC”返回“12”
}
function GetCodeFromTreeNode(ANode: TTreeNode; ADefault: string=''): string;
{ 功 能:根據樹形節點文本內容截取其中包含的編號,編號應包含在括號中
入 參:ANode:必須,樹形列表控件當前的結點
ADefault: 可無,當找不到結點中包含的編號時返回的默認值
返回結果:代表編號的字符串,如節點文本為“(12)ABC”返回“12”
}
function GetCodeFromString_Dot(AString: string; ADefault: string=''): string;
{ 功 能:獲得字符串中第一個小數點前的編號
入 參:AString:必須,包含編號和小數點的字符串
ADefault: 可無,當找不到結點中包含的編號時返回的默認值
返回結果:代表編號的字符串,如“12.ABD類別”返回“12”
}
function GetCodeFromComboItem(AComboBox: TComboBox; ADefault: string=''): string;
{ 功 能:根據下拉組合框文本內容截取其中包含的編號,編號應在最前,后跟點號
入 參:AComboBox:必須,下拉組合框控件
ADefault: 可無,當找不到文本中包含的編號時返回的默認值
返回結果:代表編號的字符串,如當前項為“12.ABC”返回“12”
}
function IsKeyAlpha(Key: Word; Shift: TShiftState): Boolean;
{ 功 能:檢查按鍵值是否為字母(A..Z或a..z)
入 參:Key: 必須,按鍵的鍵值
Shift:必須,shift鍵的狀態
返回結果:字母返回True,否則返回False
}
function IsKeyNumberic(Key: Word; Shift: TShiftState): Boolean;
{ 功 能:檢查按鍵值是否為數字(0..9)
入 參:Key: 必須,按鍵的鍵值
Shift:必須,shift鍵的狀態
返回結果:數字返回True,否則返回False
}
function FillString(ASrcStr: string; AAddStr: string; AWholeLength: Integer;
AFillMode: TFillStringMode; AForceLength: Boolean=True): string;
{ 功 能:用指定的字符填充字符串
入 參:srcStr:必須,目標字符串
AddStr: 必須,指定字符
WholeLength: 必須,填充后字符串應該達到的長度
FillMode: 必須,填充模式
0:左側填充
1:右側側填充
2:兩端填充
ForceLength: 可無,源字符串超過指定長度時,是否強制截取為指定長度,默認為是
返回結果:目標字符串填充指定字符后的字符串
}
function InsertEnter(sStr: WideString; iCharNumPerLine: Integer): string;
{ 功能:在一個字符串中指定位置插入換行符
參數:sStr: 原字符串
iCharNumPerLine:每行字符串字符個數
返回:插入換行符后的字符串
}
procedure SplitStringToList(AStr, ASeperator: string; AList: TStrings; AClear: Boolean=True);
{ 功能:將一個由指定的字符分隔的字符串拆分到字符串列表中
參數:AStr: 原字符串
ASeprator: 分隔符
AList: 字符列表
AClear: 是否清空原列表
}
function ContractListToString(AList: TStrings; ASeprator: string): string;
{ 功能:將一個字符串列表合并到由指定的字符分隔的字符串中
參數:AList: 字符列表
ASeprator: 分隔符
返回值:合并后的字符串
}
procedure AssignStringList(const ASrcStrList: TStringList; var ADestStrList: TStringList);
{ 功能:將一個字符串列表復制到一個字符串列表
參數:ASrcStrList: 源字符串列表
ADestStrList: 目標字符串列表
}
function ReplaceString(AStr, ASrcStr, ADestStr: string; ASensitive: Boolean = False;
AStartPos: Integer = 0; ACount: Integer = 0): string;
{ 功能:將一個字符串中的子串替換為另外子串
參數:AStr: 源字符串列表
ASrcStr: 被替換的子串
ADestStr: 替換后的子串
ASensitive: 是否區分大小寫
AStartPos: 查找的起始位置
ACount: 替換個數,0為替換所有
返回值:被替換后的字符串
}
function GetHzPy(const AHzStr: string): string;
function GetHzBiHua(chnstr:string):integer;
function NumberToChinese(ANumber: string; AHideZeros: Boolean = False): string;
{ 功能:將一個數字轉換成中文大寫
參數:ANumber: 代表原數字的字符串
AHideZeros: 當數字是零是是否返回空
返回值:代表中文大寫數字的字符串
}
function MoneyToWord(ANumber: string): String;
{功能:將一個數字轉換成中文大寫的貨幣數
參數:ANumber: 代表原數字的字符串
返回值:代表中文大寫數字貨幣數的字符串
}
implementation
function NumberToChinese(ANumber: string; AHideZeros: Boolean = False): string;
const
cWords: WideString = '零壹貳叁肆伍陸柒捌玖';
cUnits1: WideString = '個拾佰仟';
cUnits2: WideString = '億萬';
var
sResult: string;
sNumber, stNumber, siNumber, sfNumber, sTemp: string;
I, J, iNumLen, iDotPos: Integer;
function ToChinese(sNumber: string): WideString;
var
iaDigits: array[1..4] of Integer;
sResult: WideString;
I, iTemp: Integer;
begin
try
iTemp := StrToInt(sNumber);
except
Result := '';
Exit;
end;
iTemp := Abs(iTemp mod 10000);
iaDigits[1] := iTemp mod 10;
iTemp := iTemp div 10;
iaDigits[2] := iTemp mod 10;
iTemp := iTemp div 10;
iaDigits[3] := iTemp mod 10;
iTemp := iTemp div 10;
iaDigits[4] := iTemp mod 10;
iTemp := iTemp div 10;
if iaDigits[1] <> 0 then
sResult := cWords[iaDigits[1] + 1]
else
sResult := '';
if iaDigits[2] <> 0 then
begin
sResult := cUnits1[2] + sResult;
sResult := cWords[iaDigits[2] + 1] + sResult;
end
else if (iaDigits[3] <> 0) and (sResult <> '') then
sResult := cWords[1] + sResult;
if iaDigits[3] <> 0 then
begin
sResult := cUnits1[3] + sResult;
sResult := cWords[iaDigits[3] + 1] + sResult;
end
else if (iaDigits[4] <> 0) and (sResult <> '') then
sResult := cWords[1] + sResult;
if iaDigits[4] <> 0 then
begin
sResult := cUnits1[4] + sResult;
sResult := cWords[iaDigits[4] + 1] + sResult;
end
else if (sResult <> '') then
sResult := cWords[1] + sResult;
Result := sResult;
end;
begin
if (ANumber = '') then
begin
if AHideZeros then
Result := ''
else
Result := '零';
Exit;
end
else
begin
if Length(ANumber) > 30 then
begin
Result := '超大無比的數';
Exit;
end;
try
if (StrToFloat(ANumber) = 0) then
begin
if AHideZeros then
Result := ''
else
Result := '零';
Exit;
end;
except
if AHideZeros then
Result := ''
else
Result := '零';
Exit;
end;
end;
if ANumber[1] = '-' then
begin
I := 2;
iNumLen := Length(ANumber) - 1;
end
else
begin
I := 1;
iNumLen := Length(ANumber);
end;
//去掉字符中的逗號(千位符,例如123,456.00)
sNumber := '';
for I := 1 to Length(ANumber) do
begin
if ANumber[I] in ['0','1','2','3','4','5','6','7','8','9','.'] then
sNumber := sNumber + ANumber[I];
end;
iDotPos := Pos('.', sNumber);
if iDotPos > 0 then
begin
siNumber := Copy(sNumber, 1, iDotPos - 1);
sfNumber := Copy(sNumber, iDotPos + 1, iNumLen - iDotPos);
end
else
begin
siNumber := sNumber;
sfNumber := '';
end;
sResult := '';
I := Length(siNumber);
J := 0;
while I > 0 do
begin
if I > 4 then
stNumber := Copy(siNumber, I - 4 + 1, 4)
else
stNumber := Copy(siNumber, 1, I);
sTemp := ToChinese(stNumber);
if sTemp <> '' then
begin
if J > 0 then
sResult := sTemp + cUnits2[J mod 2 + 1] + sResult
else
sResult := sTemp + sResult;
end;
I := I - 4;
Inc(J);
end;
if Copy(sResult, 1, 2) = cWords[1] then
sResult := Copy(sResult, 3, Length(sResult));
if sfNumber <> '' then
begin
if sResult = '' then
sResult := cWords[1];
sResult := sResult + '點';
for I := 1 to Length(sfNumber) do
begin
sResult := sResult + cWords[StrToInt(sfNumber[I]) + 1];
end;
end;
if ANumber[1] = '-' then
sResult := '負' + sResult;
Result := sResult;
end;
function MoneyToWord(ANumber: string): String;
var
Words: array[0..9] of string;
Units: array[0..9] of string;
iMoney, fMoney, Jiao, Fen: integer;
i: integer;
Digits: array[0..9] of integer;
rTemp: real;
Money: Real;
sNumber: string;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -