interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, Buttons, DdeMan, StdCtrls
type
TTitleBtnForm = class(TForm)
Button1: TButton
procedure FormResize(Sender: TObject)
private
TitleButton : TRect
procedure DrawTitleButton
{Paint-related messages}
procedure WMSetText(var Msg : TWMSetText) message WM_SETTEXT
procedure WMNCPaint(var Msg : TWMNCPaint) message WM_NCPAINT
procedure WMNCActivate(var Msg : TWMNCActivate) message WM_NCACTIVATE
{Mouse down-related messages}
procedure WMNCHitTest(var Msg : TWMNCHitTest) message WM_NCHITTEST
procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown) message WM_NCLBUTTONDOWN
function GetVerInfo : DWORD
end
var
TitleBtnForm: TTitleBtnForm
const
htTitleBtn = htSizeLast + 1
implementation
{$R *.DFM}
procedure TTitleBtnForm.DrawTitleButton
var
bmap : TBitmap {Bitmap to be drawn - 16 X 16 : 16 Colors}
XFrame, {X and Y size of Sizeable area of Frame}
YFrame,
XTtlBit, {X and Y size of Bitmaps in caption}
YTtlBit : Integer
begin
{Get size of form frame and bitmaps in title bar}
XFrame := GetSystemMetrics(SM_CXFRAME)
YFrame := GetSystemMetrics(SM_CYFRAME)
XTtlBit := GetSystemMetrics(SM_CXSIZE)
YTtlBit := GetSystemMetrics(SM_CYSIZE)
{$IFNDEF WIN32}
TitleButton := Bounds(Width - (3 * XTtlBit) - ((XTtlBit div 2) - 2),
YFrame - 1,
XTtlBit + 2,
YTtlBit + 2)
{$ELSE} {Delphi 2.0 positioning}
if (GetVerInfo = VER_PLATFORM_WIN32_NT) then
TitleButton := Bounds(Width - (3 * XTtlBit) - ((XTtlBit div 2) - 2),
YFrame - 1,
XTtlBit + 2,
YTtlBit + 2)
else
TitleButton := Bounds(Width - XFrame - 4*XTtlBit + 2,
XFrame + 2,
XTtlBit + 2,
YTtlBit + 2)
{$ENDIF}
Canvas.Handle := GetWindowDC(Self.Handle) {Get Device context for drawing}
try
{Draw a button face on the TRect}
DrawButtonFace(Canvas, TitleButton, 1, bsAutoDetect, False, False, False)
bmap := TBitmap.Create
bmap.LoadFromFile('c:\windows\desktop\aaa.bmp')
with TitleButton do
{$IFNDEF WIN32}
Canvas.Draw(Left + 2, Top + 2, bmap)
{$ELSE}
if (GetVerInfo = VER_PLATFORM_WIN32_NT) then
Canvas.Draw(Left + 2, Top + 2, bmap)
else
Canvas.StretchDraw(TitleButton, bmap)
{$ENDIF}
finally
ReleaseDC(Self.Handle, Canvas.Handle)
bmap.Free
Canvas.Handle := 0
end
end
{Paint triggering events}
procedure TTitleBtnForm.WMNCActivate(var Msg : TWMNCActivate)
begin
Inherited
DrawTitleButton
end
procedure TTitleBtnForm.FormResize(Sender: TObject)
begin
Perform(WM_NCACTIVATE, Word(Active), 0)
end
{Painting events}
procedure TTitleBtnForm.WMNCPaint(var Msg : TWMNCPaint)
begin
Inherited
DrawTitleButton
end
procedure TTitleBtnForm.WMSetText(var Msg : TWMSetText)
begin
Inherited
DrawTitleButton
end
{Mouse-related procedures}
procedure TTitleBtnForm.WMNCHitTest(var Msg : TWMNCHitTest)
begin
Inherited
{Check to see if the mouse was clicked in the area of the button}
with Msg do
if PtInRect(TitleButton, Point(XPos - Left, YPos - Top)) then
Result := htTitleBtn
end
procedure TTitleBtnForm.WMNCLButtonDown(var Msg : TWMNCLButtonDown)
begin
inherited
if (Msg.HitTest = htTitleBtn) then
ShowMessage('You pressed the new button')
end
function TTitleBtnForm.GetVerInfo : DWORD
var
verInfo : TOSVERSIONINFO
begin
result:=0
verInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo)
if GetVersionEx(verInfo) then
Result := verInfo.dwPlatformID
{Returns:
VER_PLATFORM_WIN32s Win32s on Windows 3.1
VER_PLATFORM_WIN32_WINDOWS Win32 on Windows 95
VER_PLATFORM_WIN32_NT Windows NT }
end
end.
在delphi中拖放RvProject、RvSystem组件,并且把RvProject的Engine属性连接为RvSystem1。RvProject1的ProjectFile属性,选择为我们刚才保存的.rav文件。再在form1上放置一个Button,添加click 事件,代码如下:procedure TForm1.Button1Click(Sender: TObject)beginRvProject1.Execute //或者 RvProject1.ExecuteReport('Report1')end运行程序,点击按钮,就可以看到我们想要的报表了,您可能注意到,打印设置,报表预览的窗体都是英文的,如何使它显示中文我们在以后会介绍,不过我们刚才在窗体中放入了RvSystem组件,有TitlePreview、TitleSetup、TitleStatus三个属性,更改后可以看到我们窗体的标题栏显示的是您所希望显示的中文标题。RvSystem组件有很多我们需要的属性,将SystemPrinter的Orientation属性设置为poLandScape,则报表显示为横向的。将SystemPreview 的FormStatus属性设置为wsMaximized则报表预览的窗体最大化显示。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)