?? gb2big.pas
字號:
unit GB2BIG;
interface
uses
Windows, Messages, SysUtils, Classes;
const
GBfirst = $A1A1; // first code of GB */
GBlast = $FEFE; // last code of GB */
GBsize = $5E5E; // GBlast - GBfirst + 1 */
type
TGB2BIG = class(TComponent)
private
{ Private declarations }
Instance: THandle;
GBTAB, DupCode, DupData: TResourceStream;
protected
{ Protected declarations }
public
{ Public declarations }
function GBtoBIG5(S: string): string;
function GetBIGS(S: string): string;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
end;
procedure Register;
implementation
{$R GB2BIG32.res}
procedure Register;
begin
RegisterComponents('Big5', [TGB2BIG]);
end;
constructor TGB2BIG.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if Not(csDesigning in ComponentState) then
begin
GBTAB := TResourceStream.Create(Instance, 'GB2BIG', RT_RCDATA);
DupCode := TResourceStream.Create(Instance, 'DUPCODE', RT_RCDATA);
DupData := TResourceStream.Create(Instance, 'DUPDATA', RT_RCDATA);
end;
end;
destructor TGB2BIG.Destroy;
begin
GBTAB.free;
DupCode.free;
DupData.free;
inherited Destroy;
end;
function TGB2BIG.GetBIGS(S: string): string;
var
C : array[0..5] of Char;
W : PWordArray;
CA : array[0..2] of Char;
I : Integer;
bak: string;
begin
bak := '';
if Byte(S[1]) > $A0 then
begin
W := @(C[0]);
C[2] := S[1];
C[3] := S[2];
C[5] := S[1];
C[4] := S[2];
W[2] := W[2] - GBfirst;
GBTAB.Position := W[2] * 2;
GBTAB.read (CA, 2);
CA[2] := #0;
bak := bak + StrPas(CA);
I := 0;
while I < DupCode.Size do
begin
DupCode.Position := I;
DupCode.read (C, 2);
if W[0] = W[1] then
begin
DupData.Position := I;
DupData.read (CA, 2);
CA[2] := #0;
bak := bak + CA;
end;
inc(I, 2);
end;
end;
Result := bak;
end;
function TGB2BIG.GBtoBIG5(S: string): string;
var
bak: string;
C : array[0..1] of Byte;
I : Integer;
W : PWordArray;
CA : array[0..2] of Char;
begin
bak := '';
W := @(C[0]);
I := 1;
while I <= Length(S) do
begin
C[1] := Byte(S[I]);
if C[1] > $A0 then
begin
inc(I, 1);
C[0] := Byte(S[I]);
inc(I, 1);
W[0] := W[0] - GBfirst;
GBTAB.Position := W[0] * 2;
GBTAB.read (CA, 2);
CA[2] := #0;
bak := bak + StrPas(CA);
end
else
begin
bak := bak + S[I];
inc(I, 1);
end;
end;
Result := bak;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -