货币符号,一个被大家忽视了多年的问题!有人知道吗?50分求解(100分)

  • 主题发起人 主题发起人 kingkong
  • 开始时间 开始时间
K

kingkong

Unregistered / Unconfirmed
GUEST, unregistred user!
我是一个专业会计,最近在用Delphi编程序遇到一个问题,就是
怎么在编辑或打印时使用人民币符号,不要告诉我用¥,我查过财
政部有关会计规范资料,只有一根横线的羊字头符号表示的是“日
元“,不是人民币,人民币就该有两根横线.如果用ASCII码157则
屏幕不会显示,打印也不会打印,因为ASCII码157在很多打印是控
制码。记得在Dos下编程时我用一个“Y“和一个“=“号重叠打印来
实现,不知道在Windows中有什么好办法?请各位高人指点.
 
我想最简单的解决方法是
造字一个像人民币符号的,
在程序中把原来的¥替换掉。
这样只能在造有造字一个像人民币符号的电脑中正常显示和打印
 
造一个符号不难,但是我们把程序发放出去后,最终用户的计算机
上可没有您造的新字符,这个办法行不通,有没有更好的办法
 
为什么没人回答,太难了吗?没有高手吗?
 
人民币符号作图形打印
 
把字体文件一起安装到客户的机器上。
这样做很正常,M$的很多软件都这么干。
 
同意ht99,这样最简单!
 
为了一个符号附带一个字体文件不必要,还是ht99的方法可行.
 
用¥再加一条短线如何?
 
可以用¥代替¥,能够写¥来,就可以打出来呀,用字符打印,跟你用¥一样的道理。
 
“¥” ASCII值为 0165
 
>“¥” ASCII值为 0165
在 delphi 环境里面打出来还是 ¥样的啊,在记事本里可以打出来,但一存盘关闭在打
开就变成¥了!
 
用图象要么就用 一个过客 的方法
 
我自己解决了这个问题,所以,不能给大家分了,对不起,不过还是谢谢大家
我将其做成了一个控件,该控件可以将字符间距自动均匀排列并可以加上正确
的人民币符号.
---------------重庆 柯岗 2001.10.13
//该控件主要属性说明如下
1)是否使用自动间距: AutoInterval;
2)是否加上人民币符号: RmbUseing;
3)最大字符数量: TextNumber;
unit ELable;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TELable = class(TGraphicControl)
private
FAutoMark: Boolean;
//自动间距
FAutoInterval: Boolean;
//是否加上人民币符号
FRmbUseing: Boolean;
FFont : TFont;
FCaption : String;
FTextTop : Integer;
FTextLeft: Integer;
//字符数量
FTextNumber: Integer;
//字符居中/左/右
FTextAlign: Integer;
//是否透明
FTransparent: Boolean;
{ Procedures for setting property values }
procedure SetAutoMark(Value: Boolean);
procedure SetAutoInterval(Value: Boolean);
procedure SetRmbUseing(Value: Boolean);
procedure SetFont(AFont: TFont);
procedure SetCaption(Value: String);
procedure SetTextTop(Value: Integer);
procedure SetTextLeft(Value: Integer);
procedure SetTextNumber(Value: Integer);
procedure SetTextAlign(Value: Integer);
procedure SetTransparent(Value: Boolean);
{ Fill procedure }
procedure GradientFill;
protected
procedure Paint;
override;
public
constructor Create(AOwner: TComponent);
override;
published
{ Repaint when autosized }
property AutoMark: Boolean read FAutoMark write SetAutoMark default True;
property AutoInterval: Boolean read FAutoInterval write SetAutoInterval default True;
property RmbUseing: Boolean read FRmbUseing write SetRmbUseing default True;
{ Starting color of fill }
property Font: TFont read FFont write SetFont;
property Caption: String read FCaption write SetCaption;
property TextTop: Integer read FTextTop write SetTextTop;
property TextLeft: Integer read FTextLeft write SetTextLeft;
property TextNumber: Integer read FTextNumber write SetTextNumber;
property TextAlign: Integer read FTextAlign write SetTextAlign;
property Transparent: Boolean read FTransparent write SetTransparent default True;
property Align;
property DragCursor;
property DragMode;
property Enabled;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property Visible;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
end;

procedure Register;
implementation

constructor TELable.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Height := 25;
Width := 40;
AutoMark :=True;
AutoInterval :=True;
RmbUseing:=False;
Transparent:=True;
FTextLeft:=0;
FTextTop:= 5;
FTextNumber:=12;
FTextAlign:=1;
FFont:= TFont.Create;
// FFOnt.Style:= [fsbold];
FCaption:= 'TELable';
end;

procedure TELable.SetAutoMark(Value: Boolean);
begin
FAutoMark := Value;
Invalidate;
Refresh;
end;

procedure TELable.SetAutoInterval(Value: Boolean);
begin
FAutoInterval := Value;
Invalidate;
Refresh;
end;

procedure TELable.SetRmbUseing(Value: Boolean);
begin
FRmbUseing := Value;
Invalidate;
Refresh;
end;

procedure TELable.SetFont(AFont: TFont);
begin
if AFont <> FFont then
begin
FFont.Assign(AFont);
GradientFill;
Refresh;
end;
end;

procedure TELable.SetCaption(Value: String);
begin
FCaption:= Value;
GradientFill;
Refresh;
end;

procedure TELable.SetTextTop(Value: Integer);
begin
FTextTop:= Value;
GradientFill;
Refresh;
end;

procedure TELable.SetTextLeft(Value: Integer);
begin
FTextLeft:= Value;
GradientFill;
Refresh;
end;

procedure TELable.SetTextNumber(Value: Integer);
begin
FTextNumber:= Value;
GradientFill;
Refresh;
end;

procedure TELable.SetTextAlign(Value: Integer);
begin
FTextAlign:= Value;
GradientFill;
Refresh;
end;

procedure TELable.SetTransparent(Value: Boolean);
begin
FTransparent := Value;
Invalidate;
Refresh;
end;

procedure TELable.Paint;
begin
GradientFill;
end;

procedure TELable.GradientFill;
var
a,b,c,w,e,f:integer;
d:string;
SourRun:integer;
SourText:string;
begin
if FTransparent=False then
begin
Canvas.Brush.Color:=Color;
Canvas.Pen.Color:=Color;
Canvas.Rectangle(0,0,Width,Height);
end;

if FAutoInterval then
begin
if RmbUseing=False then
begin
SourText:=FCaption;
end
else
begin
SourText:='Y'+FCaption;
SourText:=copy(SourText,Length(SourText)-FTextNumber+1,FTextNumber);
for SourRun:=1 to FTextNumber-Length(SourText)do
begin
SourText:=' '+SourText;
end;
end;
Canvas.Brush.Style:= bsClear;
Canvas.Font.Assign(FFont);
c:=length(SourText);
a:=FFont.Size*6 div 10;
//尾部剩余点阵
f:=0;
if FAutoMark then
f:=a;
e:=1;
d:=copy(SourText,c,1);
if d>chr(128) then
begin
a:=FFont.Size*12 div 10;
e:=2;
end;
b:=1;w:=width-FTextLeft-a-f;
while b<=(c-e)do
begin
if copy(SourText,b,1)>chr(128) then
begin
//hanzi
Canvas.Textout(FTextLeft+(b-1)*w div (c-e),FTextTop,copy(SourText,b,2));
b:=b+2;
end
else
begin
//asc
Canvas.Textout(FTextLeft+(b-1)*w div (c-e),FTextTop,copy(SourText,b,1));
b:=b+1;
end;
if (copy(SourText,b,1)='Y') and (RmbUseing=True) then
begin
Canvas.Textout((FTextLeft+(b-1)*w div (c-e))+1,FTextTop+2,'=');
end;
end;
Canvas.Textout(width-a-f,FTextTop,copy(SourText,c-e+1,e));
end
else
begin
if RmbUseing=False then
begin
SourText:=FCaption;
end
else
begin
SourText:='Y'+FCaption;
end;

Canvas.Brush.Style:= bsClear;
Canvas.Font.Assign(FFont);
Canvas.Textout(0,FTextTop,SourText);
if (copy(SourText,1,1)='Y') and (RmbUseing=True) then
begin
Canvas.Textout(0,FTextTop+2,'=');
end;

end;
end;

procedure Register;
begin
RegisterComponents('Samples', [TELable]);
end;

end.
 
to kingkong:
谢谢!
to others:
[:(]
>>来自:kingkong, 时间:2001-10-19 20:10:00, ID:681991 | 编辑
>>我自己解决了这个问题,所以,不能给大家分了,对不起,不过还是谢谢大家!
[:D]


 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部