请给出一个倾斜Label的例子 (10月20日之前答出给300分)(300分)

  • 主题发起人 主题发起人 hylwy
  • 开始时间 开始时间
H

hylwy

Unregistered / Unconfirmed
GUEST, unregistred user!
必须包含源程序!请不要让我安装诸如Lmd等大型的第三方控件!
文字的倾斜角度及属性可以任意设定,并可响应鼠标事件!
 
我有一个,请到http://shrw.chn.net去找控件,带源程序。
也可以点<a href="http://personal.xfol.com/~srw/zips/XzLabel.zip">这里</a>直接下载.
 
我有一个,请到http://shrw.chn.net去找一个可以旋转字体的Label控件
,带源程序。

也可以点<a href="http://personal.xfol.com/~srw/zips/XzLabel.zip">这里</a>直接下载.

加分吧!
 
斜着其实比较简单, 如果是flip就困难多了:-(
 
to www:
你的控件不行,它继承于TGraphicControl,无窗口句柄,不能响应鼠标事件,
应把它改一下,从tcustomstatictext继承才行。
 
to www:
sorry,i do not see the source in detail .Now i found it can respond
to mouse event . bu hao yi si!!!
 
这么大方!我试一下。
 
www提供的控件版本太老了,仅适用于Delphi 1.0与2.0 ,跟不上时代潮流!
 
自己做不是太难。不用做成控件,改改lable的字体就行了。
 
是抄来的,好像满足要求.
unit SideTxtF;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Label1: TLabel;
procedure FormPaint(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Label1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.TextOut (200, 200, 'Hello');
end;

procedure TForm1.FormCreate(Sender: TObject);
var
ALogFont: TLogFont;
hFont: THandle;
begin
ALogFont.lfHeight := Font.Height;
ALogFont.lfWidth := 0;
ALogFont.lfEscapement := -450;
ALogFont.lfOrientation := -450;
ALogFont.lfWeight := fw_DemiBold;
ALogFont.lfItalic := 0; // false
ALogFont.lfUnderline := 0; // false
ALogFont.lfStrikeOut := 0; // false
ALogFont.lfCharSet := Ansi_CharSet;
ALogFont.lfOutPrecision := Out_Default_Precis;
ALogFont.lfClipPrecision := Clip_Default_Precis;
ALogFont.lfQuality := Default_Quality;
ALogFont.lfPitchAndFamily := Default_Pitch;
StrCopy (ALogFont.lfFaceName, PChar (Font.Name));
hFont := CreateFontIndirect (ALogFont);
Font.Handle := hFont;
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
showmessage('hi!');
end;

end.
 
其实关键是建立旋转字体
以当前字体为起点,可使用windows的getobject()函数,检查当前字体的Tlogfont
结构,并通过对该结构进行适当的修改来创建新的字体。

见下例:
procedure TForm1.Button1Click(Sender: TObject);
var lf:tlogfont;
tf:tfont;
begin
tf:=tfont.Create;
tf.Assign(button1.font);
getobject(tf.handle,sizeof(lf),@lf);
lf.lfEscapement:=450;
lf.lfOrientation:=450;
tf.Handle:=createfontindirect(lf);
button1.parentfont:=false;
button1.Font.Assign(tf);
tf.free;
end;

该例创建了一个新的Font,并把按钮的当前字体赋给Tfont,这将把按钮的字体所有属
性复制到这个新的Font,然后调用Windows的Getobject()函数来检索该Tfont的逻辑
字体结构,之后改变该逻辑字体结构的间隔和方向成员以使字体旋转45度,这可通过
1/10度为单位来说明角度。而后利用windows的GDI命令CreateFontIndirect()创建
一个新字体,最后释放Tfont。
并非所有的字体都可以旋转。(TrueType 字体都可旋转)。
有了这个,自己做个倾斜Label的控件还不是毛毛雨????

可以加分了吧???
 
多人接受答案了。
 
后退
顶部