再请xianjun看下,在闪现窗口中的动画不动(100)

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

hying95

Unregistered / Unconfirmed
GUEST, unregistred user!
动态创建TIMAGE,测试动画要动,但是我把它放到闪现窗口中,没反应,不知为什么?procedure TForm1.btn3Click(Sender: TObject);var Img: TImage; TmpGif :TGIFImage;begin TmpGif := TGIFImage.Create; TmpGif.LoadFromFile('./13.gif'); Img:=TImage.Create(Form1); Img.Parent:=Form1; Img.Top:=20; Img.Left:=20; Img.Width:=TmpGif.Width; Img.Height:=TmpGif.Height; Img.Picture.Assign(TmpGif);end;var FrmMove: TForm; TmpGif: TGifImage; TmpJpg: TJPEGImage; img: TImage; i: integer; Lis: TStrings;begin Application.Initialize; //************************************************************* TmpGif := TGIFImage.Create; TmpJpg:=TJPEGImage.Create; TmpGif.LoadFromFile('./13.Gif'); TmpJpg.LoadFromFile('./12.JPG'); FrmMove:=TForm.Create(Application);//Create创建闪现窗口对象 FrmMove.BorderStyle:= bsNone; FrmMove.Height:=TmpJpg.Height; FrmMove.Width:=TmpJpg.Width; FrmMove.Position:=poDesktopCenter; FrmMove.Show; FrmMove.Update; Lis:=tstringlist.Create; Lis.Add('第一行字符串...'); Lis.Add('第二行字符串.....'); Lis.Add('第三行字符串.......'); Lis.Add('第四行字符串.........'); FrmMove.Font.Charset:=GB2312_CHARSET; FrmMove.Font.Name:='宋体'; FrmMove.Font.Size:=14; FrmMove.Font.Style:=[fsBold]; Img:=TImage.Create(FrmMove); Img.Parent:=FrmMove; Img.Top:=212; Img.Left:=112; Img.Width:=TmpGif.Width; Img.Height:=TmpGif.Height; Img.Picture.Assign(TmpGif);//连图片都没有 for i := 0 to lis.Count-1 do begin FrmMove.Canvas.Draw(0,0,TmpJpg); //FrmMove.Canvas.Draw(212,112,img.Picture.Graphic);不注销这段,有图但是不动 frmmove.Canvas.Brush.Style := bsClear;//透明 frmmove.Canvas.Font.Color:=clBlue; frmmove.Canvas.TextOut(36,20,'正在初始化系统,请稍候......'); frmmove.Canvas.TextOut(36,50,lis.Strings); frmmove.Canvas.Refresh; sleep(600); end; img.Free; TmpGif.Free; lis.Free; FrmMove.Close; TmpJpg.Free; FrmMove.Free; //************************************************************* Application.CreateForm(TForm1, Form1); Application.Run;end.end.
 
这个好象跟操作系统有关有些系统下可以,有些系统下不行我也注意到我们的程序有这问题,只是后来也没去理它。
 
操作系统WINXP
 
可以试一下给那个FORM加一个消息循环,把所有与自己相关的消息都处理一下我估计是这个原因。
 
to xianjun能否帮忙看下?
 
把Sleep那一段替换成下面的就可以了: for i := 0 to lis.Count-1 do begin Application.ProcessMessages; //Img.Refresh; FrmMove.Canvas.Draw(0,0,TmpJpg); //FrmMove.Canvas.Draw(212,112,img.Picture.Graphic);不注销这段,有图但是不动 frmmove.Canvas.Brush.Style := bsClear;//透明 frmmove.Canvas.Font.Color:=clBlue; frmmove.Canvas.TextOut(36,20,'正在初始化系统,请稍候......'); frmmove.Canvas.TextOut(36,50,lis.Strings); frmmove.Canvas.Refresh; Img.BringToFront; B := GetTickCount; repeat Application.ProcessMessages; until GetTickCount - B > 600; end;
 
优化了一下:var FrmMove: TForm; TmpGif: TGifImage; TmpJpg: TJPEGImage; I: Integer; Lis: TStrings; B: Cardinal;begin Application.Initialize; //************************************************************* TmpGif := TGIFImage.Create; TmpJpg := TJPEGImage.Create; TmpGif.LoadFromFile('E:/loading2.gif'); TmpJpg.LoadFromFile('E:/cpu.jpg'); FrmMove := TForm.Create(Application); //Create创建闪现窗口对象 FrmMove.BorderStyle := bsNone; FrmMove.Height := TmpJpg.Height; FrmMove.Width := TmpJpg.Width; FrmMove.Position := poDesktopCenter; FrmMove.Show; FrmMove.Update; Lis := TStringList.Create; Lis.Add('第一行字符串...'); Lis.Add('第二行字符串.....'); Lis.Add('第三行字符串.......'); Lis.Add('第四行字符串.........'); //FrmMove.Font.Charset:=GB2312_CHARSET; FrmMove.Font.Name := '宋体'; FrmMove.Font.Size := 14; FrmMove.Font.Style := [fsBold]; for I := 0 to lis.Count - 1 do begin Application.ProcessMessages; FrmMove.Canvas.Draw(0, 0, TmpJpg); frmmove.Canvas.Brush.Style := bsClear; //透明 frmmove.Canvas.Font.Color := clBlue; frmmove.Canvas.TextOut(36, 20, '正在初始化系统,请稍候......'); frmmove.Canvas.TextOut(36, 50, lis.Strings); frmmove.Canvas.Refresh; B := GetTickCount; repeat FrmMove.Canvas.Draw((FrmMove.Width - TmpGif.Width) div 2, (FrmMove.Height - TmpGif.Height) div 2, TmpGif); Application.ProcessMessages; until GetTickCount - B > 600; end; TmpGif.Free; lis.Free; FrmMove.Close; TmpJpg.Free; FrmMove.Free; //************************************************************* Application.CreateForm(TForm1, Form1); Application.Run;end.
 
TO xianjun现在可以了,但是我把它放在资源中和GIF它就不动//读取资源中的GIF图片procedure LoadGifRes(TheGif: string; tImage: TGifImage); stdcall;var ResHandle : THandle; MemHandle : THandle; MemStream : TMemoryStream; ResPtr : PByte; ResSize : Longint; //tImage : TGifImage;begin ResHandle := FindResource(hInstance, PChar(TheGif), 'GIF'); MemHandle := LoadResource(hInstance, ResHandle); ResPtr := LockResource(MemHandle); MemStream := TMemoryStream.Create; //tImage := TGIFImage.Create; ResSize := SizeOfResource(hInstance, ResHandle); MemStream.SetSize(ResSize); MemStream.Write(ResPtr^, ResSize); FreeResource(MemHandle); MemStream.Seek(0, 0); tImage.LoadFromStream(MemStream); //ThePicture.Assign(tImage); //tImage.Free; MemStream.Free;end;
 
LoadFromFile最终其实也是调用LoadFormStream载入的,不行的话你你看看是不是资源加入有问题,你可以把它从资源中保存成文件,看是不是还是同一个GIF文件。另外,你可以直接用tImage.LoadFromResourceName从资源中载入,不用自己写一大堆。
 
谢谢xianjun可以了
 
后退
顶部