如何使图象变化(50分)

  • 主题发起人 主题发起人 树熊130
  • 开始时间 开始时间

树熊130

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用AnimateWindow(Handle,1000,AW_center);时,我的form在变化过程中,其背景没有了
只有灰色的原始背景,如何在其变化时使其本身的背景不变。
 
AnimateWindow是针对窗体的动画效果,一般是在窗体创建时产生,你一边创建窗体,一边显示背景,
这是不可能的;只有在创建完成以后才可以显示各种控件以及背景。

AnimateWindow(Handle,1000,AW_center);
Invalidate;
 
没用呀,他在从小到大变化的时候我加入的image图片还是没有,直到放大以后才显示出来。
 
不是高手很多的吗?怎么都不会吗
 
这是我在http://www.delphibbs.com/delphibbs/dispq.asp?lid=705915这个帖子中的回答,
完全符合你的要求

由于AnimateWindow在不同的操作系统中效果不一样,所以尽量不要用。
我给你一段代码,拿来就可以用,起作用的就是一个过程,你可以建立一个公用的单元文件,
然后想让哪个窗口实现动画效果,就在哪个单元调用一下,非常不错的!


unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

procedure AnimateForm(Form: TForm);
var
Form1: TForm1;

implementation

{$R *.DFM}


procedure AnimateForm(Form: TForm);
var
FDesktopCanvas: TCanvas;
FDesktopHandle: Hwnd;
FDesktopBitmap: TPicture;
SRect: TRect;
aPos1,aPos2,
N,FLeft,FTop: Integer;
KLeft,KTop,KRight,KBottom,
FStep: Double;
begin
FDesktopHandle := 0;
FDesktopBitmap := TPicture.Create;
FDesktopCanvas := TCanvas.Create;
FDesktopBitmap.Bitmap.Width := Screen.Width;
FDesktopBitmap.Bitmap.Height := Screen.Height;

FLeft := Form.Left;
FTop := Form.Top;
if Form.Position = poScreenCenter then
begin
if Form.FormStyle = fsMDIChild then
begin
FLeft := (Application.MainForm.ClientWidth - Form.Width) div 2;
FTop := (Application.MainForm.ClientHeight - Form.Height) div 2;
end else
begin
FLeft := (Screen.Width - Form.Width) div 2;
FTop := (Screen.Height - Form.Height) div 2;
end;
if FLeft < 0 then FLeft := 0;
if FTop < 0 then FTop := 0;
end
else if Form.Position = poDesktopCenter then
begin
if Form.FormStyle = fsMDIChild then
begin
FLeft := (Application.MainForm.ClientWidth - Form.Width) div 2;
FTop := (Application.MainForm.ClientHeight - Form.Height) div 2;
end else
begin
FLeft := (Screen.DesktopWidth - Form.Width) div 2;
FTop := (Screen.DesktopHeight - Form.Height) div 2;
end;
if FLeft < 0 then FLeft := 0;
if FTop < 0 then FTop := 0;
end;

FDesktopCanvas.Handle := GetWindowDC(FDesktopHandle);
SendMessage(FDesktopHandle, WM_PAINT, FDesktopCanvas.Handle, 0);
SRect := Rect(0, 0, Screen.Width, Screen.Height);
FDesktopBitmap.Bitmap.Canvas.CopyRect(SRect,FDesktopCanvas,SRect);

FDesktopCanvas.Brush.Color := clBtnFace;
FDesktopCanvas.Brush.Style := bsClear;
FDesktopCanvas.Pen.Color := clBlack;
FDesktopCanvas.Pen.Width := 1;
//FDesktopCanvas.Pen.Style := psDot;

N := Form.Width div 32;
if N<=0 then
N := 4;

aPos1 := (Form.Width div 2)+FLeft;
aPos2 := (Form.Height div 2)+FTop;
KTop := aPos2; KLeft := aPos1;
KRight := aPos1; KBottom := aPos2;

FStep := Form.Height / Form.Width;
while KLeft>FLeft do
begin
KLeft := KLeft - N;
KTop := KTop - FStep*N;
KRight := KRight + N;
KBottom := KBottom + FStep*N;
if (KLeft<FLeft) or (KTop<FTop+1) then Break;
Sleep(2);
FDesktopCanvas.Rectangle(Trunc(KLeft),Trunc(KTop),Trunc(KRight),Trunc(KBottom));
BitBlt(FDesktopCanvas.Handle,Trunc(KLeft)+2,Trunc(KTop)+2,
Trunc(KRight-KLeft)-4,Trunc(KBottom-KTop)-4,
FDesktopBitmap.Bitmap.Canvas.Handle,Trunc(KLeft)+2,Trunc(KTop)+2,SRCCOPY);

end;
{BitBlt(FDesktopCanvas.Handle,FLeft,FTop,Width,Height,
FDesktopBitmap.Canvas.Handle,FLeft,FTop,SRCCOPY);}
ReleaseDC(0, FDesktopCanvas.Handle);
FDesktopBitmap.Free;
FDesktopCanvas.Free;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
AnimateForm(Self);
end;

end.
 
wjiachun曾经这样教育我们:"对于这种多帐号的说话还是那种口气的人最好的办法就是不要理他"
参考文献: http://www.delphibbs.com/delphibbs/dispq.asp?lid=723884
 
不对呀,还是不行呀,我的form是在变化,但我的form上的image的图片一点没变。
各位大哥快帮忙呀
 
接受答案了.
 
后退
顶部