要求
可以随着主窗体放大而自动拉伸或平铺
当然也要能够随着主窗体缩小而缩小
可以随着主窗体放大而自动拉伸或平铺
当然也要能够随着主窗体缩小而缩小
解决方案 »
- 关于DevExpress和 ExpressBar的问题。
- (50)分急急急!!!chart的打印问题!
- 什么是Virtual-key code?
- SQLSERVER中字段的备注值用DELPHI怎么取出来啊
- 如何读取字符串中的中文字符???
- 那位前輩能給我發一份三層的例子嗎,
- 谁帮我写一下随机数抽奖的一个程序
- 好例子讲解的教材,推荐一下!
- 哪位有底层IP或者网卡的编程资料?我想实现ipconfig /release ipconfig/renew这样的功能
- 还WORD里的标尺控件问题!(高分求就)
- 2000分(因为不能一次送出,我会分20次送完,食言是小狗),求解屏幕取汉字问题!
- 这样的存储过程怎么不行啊?
procedure Tile(c:TCanvas;b:TBitMap);
var
x,y,h,w,i,j:integer;
begin
with b do begin
h:=b.height;
w:=b.width;
end;
y:=0;
with c.Cliprect do begin
i:=bottom-top-1; //height
j:=right-left-1; //width
end;
while y<i do begin
x:=0;
while x<j do begin
c.draw(x,y,b);
inc(x,w);
end;
inc(y,h);
end;
end;
begin
if Sender is TForm then
Tile(TForm(Sender).Canvas,fTileWith);
end;
刚好,手头有点代码,你看看吧。
fTileWith怎么赋值呢?
还有procedure Tile(c:TCanvas;b:TBitMap);声明时出错
var
g:TBitmap;
begin
g:=TBitmap.Create;
g.LoadFromFile('e:\1.bmp');
Form1.Canvas.Draw(0,0,g);
end;
我用这个是可以编译的,问题是不知道该怎么拉伸平铺等
procedure TForm1.FormPaint(Sender: TObject);
var
x, y: Integer;
g:TBitmap;
begin
g:=TBitmap.Create;
g.LoadFromFile('e:\1.bmp');
y := 0;
while y < Height do
begin
x := 0;
while x < Width do
begin
Canvas.Draw(x, y, g);
x := x + g.Width;
end;
y := y + g.Height;
end;
end;这种方法只能平铺,而且拉大缩小窗体时闪烁得太厉害了
怎么才能避免闪烁
并且可以进行居中、拉伸方法
begin
Windows.SetParent(Panel1.Handle,ClientHandle);
end;procedure TForm1.FormResize(Sender: TObject);
begin
Panel1.Top:=0;
Panel1.Left:=0;
Panel1.Width :=Self.ClientWidth-4;
Panel1.Height :=Self.ClientHeight-4;
end;
FClientInstance : TFarProc;
FPrevClientProc : TFarProc;
{ MDI的背景代码 }
procedure TMainForm.ClientWndProc(var Message: TMessage);
var
Dc : hDC;
Row : Integer;
Col : Integer;
begin
with Message do
case Msg of
WM_ERASEBKGND:
begin
Dc := TWMEraseBkGnd(Message).Dc;
// 在DC上平铺图象
for Row := 0 to ClientHeight div Image1.Picture.Height do
for Col := 0 to ClientWidth div Image1.Picture.Width do
BitBlt(Dc,
Col * Image1.Picture.Width,
Row * Image1.Picture.Height,
Image1.Picture.Width,
Image1.Picture.Height,
Image1.Picture.Bitmap.Canvas.Handle,
0,
0,
SRCCOPY);
Result := 1;
end;
else // 传递其他消息
Result := CallWindowProc(FPrevClientProc,
ClientHandle,
Msg,
wParam,
lParam);
end;
end; - 在你的主窗体的OnShow事件中加入以下代码: // MDI背景平铺代码,与WndProc链接
FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(ClientHandle,GWL_WNDPROC));
SetWindowLong(ClientHandle,GWL_WNDPROC,LongInt(FClientInstance)); - 现在你有一个背景了!
wiaTile1: TwiaTile
如果不是MDi再用以上画窗体的方法,就是比较费事!