新普京网站-澳门新普京 > 前端 > Delphi实现进制转化,Web格式与TColor类型的转换函数

Delphi实现进制转化,Web格式与TColor类型的转换函数

2020/01/04 22:38

支持#RRGGBB样式的Web字符串颜色格式的颜色值和TColor之间进行相互转换,从Web颜色格式转换为TColor类型的值时,支持省略前面的#号。

delphi中有直接把10进制转换成16进制的函数:

type
TRGBAColor = record
 case Integer of
 0:
 (Red, Green, Blue, Alpha: Byte,',',');
 1:
 (Color: TColor,',',');
 end;
//从TColor到Web颜色格式
function FormatWebColor(AColor: TColor): String;
var
  ARef: TRGBAColor absolute AColor;
begin
Result := '#' + IntToHex(ARef.Red, 2) + IntToHex(ARef.Green, 2) +
  IntToHex(ARef.Blue, 2,',',');
end;
 
//从Web颜色格式转换为TColor
function FromWebColor(const S: String): TColor;
var
  p: PWideChar;
  R, G, B: Integer;
澳门新普京 ,begin
p := PWideChar(S,',',');
if p^ = '#' then
  Inc(p,',',');
Result := clNone;
if TryStrToInt('$' + Copy(p, 0, 2), R) then
  begin
  Inc(p, 2,',',');
  if TryStrToInt('$' + Copy(p, 0, 2), G) then
    begin
    Inc(p, 2,',',');
新普京网站 ,    if TryStrToInt('$' + Copy(p, 0, 2), B) then
      Result := RGB(R, G, B,',',');
    end;
  end;
end;
用法当然足够简单,如 FromWebColor(‘#FF0000′)直接就是红色,FormatWebColor(clRed)得到的结果就是字符串#FF0000。

  function   IntToHex(Value:   Integer;   Digits:   Integer):   string;   overload; 
  function   IntToHex(Value:   Int64;   Digits:   Integer):   string;   overload;

 

unit uConversion;

interface
uses
SysUtils,Math;
type
TConversion = class
public
    //10 进制 to 2,8,16 进制
    function inttoBitStr(intstr: string): string;
    function IntToHexStr(intStr: string): String;//10 = 2
    function IntToOStr(intstr : string): string;

    //2进制 to 10,8,16 进制
    function BittoInt(BitStr:   String):   LongInt;// 2 = 10
    function BitStrToHextStr(const   BitStr   :   String)   :   String;//2 = 16
    function BitStrToOStr(const   BitStr   :   String)   :   String;//2 = 8

    //16 > 10 2   8 进制
    function HextoIntStr(HexStr: String): string;
    function HexToBitStr(HexStr:   string): string;
    function HexToOStr(HexStr:   string): string;
 
    //八进制转换成二进制字符串
    function OtoBitStr(O : string):string;
    function OtoIntStr(O : string):string;
    function OtoHexStr(O : string):string;
end;
var
TC :TConversion;

implementation

{ TConversion }
//2 进制 to 10 进制

function TConversion.BittoInt(BitStr: String): LongInt;
var
      i,Size:   Integer;
begin
      Result:=0;
      Size:=Length(BitStr);
      for   i:=Size   downto   1   do
      begin
        //例如 1010
          if Copy(BitStr,i,1)='1'   then
            Result:=Result+(1   shl   (Size-i));
      end;
//第二种方法
//二进制转换为十进制 start
{
VAR
str : String;
Int : Integer;
i : integer;

Str := UpperCase(Edit1.Text);
Int := 0;
FOR i := 1 TO Length(str) DO
    Int := Int * 2 + ORD(str[i]) - 48;
Edit2.Text:=IntToStr(int);
}
//二进制转换为十进制 end;
//第三中方法
{
function hextoint(s: string): Double;
begin
while Length(s) <>0 do
begin              //2^(长度-1)次方
    if s[1]='1' then Result:=Result+power(2,Length(s)-1);
    s:=Copy(s,2,Length(s));
end
end;
}
end;

function TConversion.BitStrToHextStr(const BitStr: String): String;
var
vD : Byte;
I : Integer;
vHextStr : String;
vP : PChar;
vLen : Integer;
begin
vLen := Length(BitStr);
if vLen mod 4 > 0 then
begin
    SetLength(vHextStr,   vLen   div   4   +   1);
    vLen := vlen div 4 + 1;
end
else
begin
    SetLength(vHextStr,   vLen   div   4);
    vLen := vlen div 4 ;
end;

//初始化
vD := 0;
vP := PChar(BitStr)+length(BitStr)-1;
I := 0;   //开始计数

while vP^ <> #0 do
begin
    if vp^ = '1' then
    begin
      case i of
      0:      vD :=vd+1;
      1:      vD :=vd+2;
      2:      vD :=vd+4;
      3:      vD :=vd+8;
      end;
    end;

    Dec(vP);
    Inc(I);
    if I = 4 then
    begin
      case vD of
        0..9 : vHextStr[vLen] := Chr(vD + $30);
        10..15 : vHextStr[vLen] := Chr(vD - 10 + $41);
      end;
      Dec(vLen);
      I   :=   0;
      vD   :=   0;
    end;
end;

if I > 0then
begin
    case   vD   of
      0..9 : vHextStr[vLen] := Chr(vD + $30);
      10..15 : vHextStr[vLen] := Chr(vD + $41);
    end;
end;

Result := vHextStr;
end;

上一篇:MSGPACK序列和还原TFDParams【澳门新普京】,在Delphi中基于内容检测图片格式 下一篇:没有了