如何在Panel上平铺背景图??(200分)

  • 主题发起人 主题发起人 acaia
  • 开始时间 开始时间
A

acaia

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在Panel上平铺背景图??
我的意思不是需要一个透明的Panel,而是保留Panel的边缘,同时又在上面平铺一个背景??
 
var
mBitmap:Tbitmap;
begin
mBitmap:=Tbitmap.create;
mBitmap.loadfromfile('bmpfile.bmp');
self.brush.bitmap:=Tbitmap;
end;
 
以下是我写的 TXhFlatPanel 的部分代码:

procedure TCustomXhFlatPanel.Paint;
const
Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
var
Rect: TRect;
FontHeight: Integer;
Flags: Longint;
begin
Rect := GetClientRect;
DrawFrame(Canvas, Rect, BorderColor, BorderWidth);

with Canvas do
begin
Brush.Color := Color;
Brush.Style := bsSolid;
FillRect(Rect);
if not Assigned(FPicture.Graphic) or (FPicture.Graphic.Empty) then
begin
//nothing
end else
begin
if Stretch then
StretchDraw(Rect, FPicture.Graphic) // 拉伸作图!!!!
else
begin
//Brush.Bitmap := FPicture.Bitmap;
//FillRect(Rect);
Draw(0, 0, FPicture.Graphic); // 原始大小作图。
end;
end;
Brush.Style := bsClear;
Font := Self.Font;
FontHeight := TextHeight('W');
with Rect do
begin
Top := ((Bottom + Top) - FontHeight) div 2;
Bottom := Top + FontHeight;
end;
Flags := DT_EXPANDTABS or DT_VCENTER or Alignments[FAlignment];
Flags := DrawTextBiDiModeFlags(Flags);
DrawText(Handle, PChar(Caption), -1, Rect, Flags);
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
C:TCanvas;
x1,x2,y1,y2:longint;
bmp : TBitmap;
begin
try
Bmp := TBitmap.Create;
Bmp.LoadFromFile('d:/bmp/149.bmp');
c:=TControlCanvas.Create;
TControlCanvas(c).Control:=Panel1;

x1 :=0;

while x1<=Panel1.Width do
begin
y1 :=0;
while y1 <=Panel1.Height do
begin
c.Draw(x1,y1,bmp);
inc(y1,bmp.Height);
end;
inc(x1,bmp.width);
end;

finally
C.free;
Bmp.Free;
end;
end;
 
www.torry.net上有类似的控件
 

将一个image放在panel上怎样?
 
天真兄的方法可行,不过无法解决重绘的问题,而且在Form的create或者activate或show
里进行绘图,不知如何解决??
 
打错,应为:

……不过无法解决重绘的问题,而且在Form的create或者activate或show
里无法进行绘图,不知如何解决??
 
可以在FROM中的
OnPAINT
中重绘
 
在OnPaint里面也不行啊,
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1301244
 
后退
顶部