字体旋转任意角度的问题(怎么解决显示不完全)(100分)

  • 主题发起人 主题发起人 xiongw
  • 开始时间 开始时间
X

xiongw

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是两个方案,大家可以直接在本机测试,我调label的height与weith都没用,都有一部分不会显示出来,大家看看怎么解决,应该只是一点就通的,
一、
procedure TForm1.FormCreate(Sender: TObject);
var tf : TFont;
lf : LOGFONT;
begin
with label2 do begin
Font.Name := 'Arial';
Font.Size := 12;

tf := TFont.Create;
try
tf.Assign(label2.Font);
GetObject(tf.Handle,SizeOf(LOGFONT),@lf);
lf.lfEscapement := 100;
lf.lfOrientation := 100;
tf.Handle := CreateFontIndirect(lf);
width:=100;
height:=200;
Font.Assign(tf);
finally
tf.Free;
end;
end;
end;

二、
h:=CreateFont(100,20,180,180,0,0,0,1,1,1,0,0,0,'華康彩帶體');
if(h=0)then
RaiseLastWin32Error();
label1.Font.Handle:=h;
//createfont參數說明如下:
http://www.leftworld.net/online/apivb/CreateFont.htm
 
由于旋转时宽、高会比平常占用的多
所以label2的宽,高要重新计算,

Bounds
 
Tlabel会自动调整宽度, Rz控件也是这样的效果,不能旋转

楼主上兄弟,Bounds不是和Rect效果一样吗
 
Label应該可以自动调整,不过如果你把字体设成斜体,就有一部分显示不完,这也应該是自动调整没有调整对的,只能说是Label哪个自动调整有问题,需要自已重新调整
 
自己继承个Label,重载Paint就行了。
TMyLabel = class(TLabel)
protected
procedure Paint; override;
end;

procedure TMyLabel.Paint;
begin
with Canvas do
begin
if not Transparent then
begin
Brush.Color := Self.Color;
Brush.Style := bsSolid;
FillRect(ClientRect);
end;
//Brush.Style := bsClear;
{ 从中心开始画,360度任意旋转都能显示。 }
{ 其实最好是在这里写个事件,可以在程序中自由控制 }
//if Assigned(FOnPaint) then FOnPaint(Self);
TextOut(ClientRect.Right div 2, ClientRect.Bottom div 2, Caption);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
tf : TFont;
lf : LOGFONT;
begin
with TMyLabel.Create(Self) do
begin
Font.Name := 'Arial';
Font.Size := 12;

tf := TFont.Create;
try
tf.Assign(Font);
GetObject(tf.Handle,SizeOf(LOGFONT),@lf);
lf.lfEscapement := 100;
lf.lfOrientation := 100;
tf.Handle := CreateFontIndirect(lf);
Font.Assign(tf);
finally
tf.Free;
end;

Parent := Self;
Name := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
Width := Canvas.TextWidth(Caption) * 2;
Height := Width;
end;
end;
 
多谢ANiDelphi兄,我待会试一下
 
請ANiDelphi兄給出完整代碼,我怎麼只能旋轉不能調整字體寬度
 
呵呵,不好意思,我临时写的,没什么完整代码,自己扩展一下功能啦
 
現在方案一是可以實現任意角度旋轉,但是它的文字寬度不可以任意變化,下面這種可以旋轉,亮度也可以任意變化,只是旋轉時會顯示不完全,請幫忙想想辦法,
 
算了,結賬吧,
 
后退
顶部