//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "screen.h"
#include <stdlib.h>
#include <jpeg.hpp>
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TScreenForm *ScreenForm;
//---------------------------------------------------------------------------
__fastcall TScreenForm::TScreenForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TScreenForm::WMEraseBkgnd(TWMEraseBkgnd & Msg)
{
Msg.Result = false; //禁止重画时擦除背景
}
//---------------------------------------------------------------------------
void __fastcall TScreenForm::WMActivate(TWMActivate & Msg)
{
if (Msg.Active==false) Close(); //失去激活时退出
}
//---------------------------------------------------------------------------
void __fastcall TScreenForm::WMSysCommand(TWMSysCommand & Msg)
{
if(Msg.CmdType==SC_SCREENSAVE) //若有屏幕保护程序运行,则不再运行
Msg.Result=true;
else
ScreenForm->Dispatch(&Msg);
}
//---------------------------------------------------------------------------
void __fastcall TScreenForm::FormDestroy(TObject *Sender)
{
Timer1->Enabled=false;
delete Bit1;
delete Bit2;
delete tmp;
delete PicList;
delete SndList;
delete Reg;
}
//---------------------------------------------------------------------------
void __fastcall TScreenForm::FormKeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TScreenForm::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TScreenForm::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
int xDistance=X-aPoint.x;
int yDistance=Y-aPoint.y;
if ((xDistance<-MouseMoveDistance)||(xDistance>MouseMoveDistance))
Close();
else if ((yDistance<-MouseMoveDistance)||(yDistance>MouseMoveDistance))
Close();
}
//---------------------------------------------------------------------------
void __fastcall TScreenForm::FormPaint(TObject *Sender)
{
Canvas->Draw(0,0,tmp);
}
//---------------------------------------------------------------------------
void __fastcall TScreenForm::PlayPic()
{
switch (flag){
case 1: // 从上方推出
if (x<BmpH){
Bit1->Canvas->CopyRect(Rect(0,0,BmpW,x),
Bit2->Canvas,
Rect(0,BmpH-x,BmpW,BmpH));
Canvas->Draw(Lft,Tp,Bit1);
x+=2;
}
else ChangePic=true;
break;/**/
case 5: // 从下方推出
if (x<BmpH){
Bit1->Canvas->CopyRect(Rect(0,BmpH-x,BmpW,BmpH),
Bit2->Canvas,
Rect(0,0,BmpW,x));
Canvas->Draw(Lft,Tp,Bit1);
x+=2;
}
else ChangePic=true;
break;
case 10: // 从左边推出
if (x<=BmpW){
Bit1->Canvas->CopyRect(Rect(0,0,x,BmpH),
Bit2->Canvas,
Rect(BmpW-x,0,BmpW,BmpH));
Canvas->Draw(Lft,Tp,Bit1);
x+=2;
}
else ChangePic=true;
break;
case 14: // 从右边推出
if (x<=BmpW){
Bit1->Canvas->CopyRect(Rect(BmpW-x,0,BmpW,BmpH),
Bit2->Canvas,
Rect(0,0,x,BmpH));
Canvas->Draw(Lft,Tp,Bit1);
x+=2;
}
else ChangePic=true;
break;
case 6: // 垂直交错
if (x<=BmpH){
y=x;
while (y >0){
Bit1->Canvas->CopyRect(Rect(0,y-1,BmpW,y),
Bit2->Canvas,
Rect(0,BmpH-x+y-1,BmpW,BmpH-x+y));
Bit1->Canvas->CopyRect(Rect(0,BmpH-y,BmpW,BmpH-y+1),
Bit2->Canvas,
Rect(0,x-y,BmpW,x-y+1));
y-=2;
}
Canvas->Draw(Lft,Tp,Bit1);
x+=2;
}
else ChangePic=true;
break;
case 11: // 水平交错
if (x<=BmpW){
y=x;
while (y >0){
Bit1->Canvas->CopyRect(Rect(y-1,0,y,BmpH),
Bit2->Canvas,
Rect(BmpW-x+y-1,0,BmpW-x+y,BmpH));
Bit1->Canvas->CopyRect(Rect(BmpW-y,0,BmpW-y+1,BmpH),
Bit2->Canvas,
Rect(x-y,0,x-y+1,BmpH));
y-=2;
}
Canvas->Draw(Lft,Tp,Bit1);
x+=2;
}
else ChangePic=true;
break;
case 2: // 从中心向四周展开
if (x<=BmpW/2){
Bit1->Canvas->CopyRect(Rect(BmpW/2-x,BmpH/2-x*3/4,BmpW/2+x,BmpH/2+x*3/4),
Bit2->Canvas,
Rect(BmpW/2-x,BmpH/2-x*3/4,BmpW/2+x,BmpH/2+x*3/4));
Canvas->Draw(Lft,Tp,Bit1);
x++;
}
else ChangePic=true;
break;
case 7: // 从中心向上下
if (x<=BmpH/2){
Bit1->Canvas->CopyRect(Rect(0,BmpH/2-x,BmpW,BmpH/2+x),
Bit2->Canvas,
Rect(0,BmpH/2-x,BmpW,BmpH/2+x));
Canvas->Draw(Lft,Tp,Bit1);
/*BitBlt(Canvas->Handle,Lft,Height/2-x,BmpW,2*x,
Bit2->Canvas->Handle,0,BmpH/2-x,SRCCOPY);*/
x++;
}
else
{
/*//使用BitBlt时要用此语句避免屏幕闪烁
Bit1->Canvas->CopyRect(Rect(0,0,BmpW,BmpH),
Bit2->Canvas, Rect(0,0,BmpW,BmpH));
Canvas->Draw(Lft,Tp,Bit1); */
ChangePic=true;
}
break;
case 13: // 从中心向左右
if (x<=BmpW/2){
Bit1->Canvas->CopyRect(Rect(BmpW/2-x,0,BmpW/2+x,BmpH),
Bit2->Canvas,
Rect(BmpW/2-x,0,BmpW/2+x,BmpH));
Canvas->Draw(Lft,Tp,Bit1);
x++;
}
else ChangePic=true;
break;
case 8: // 从右下角平铺
if (x<=BmpW){
Bit1->Canvas->CopyRect(Rect(BmpW-x,BmpH-x*3/4,BmpW,BmpH),
Bit2->Canvas,
Rect(BmpW-x,BmpH-x*3/4,BmpW,BmpH));
Canvas->Draw(Lft,Tp,Bit1);
x+=2;
}
else ChangePic=true;
break;
case 4: // 从左下角平铺
if (x<=BmpW)
{
Bit1->Canvas->CopyRect(Rect(0,BmpH-x*3/4,x,BmpH),
Bit2->Canvas,
Rect(0,BmpH-x*3/4,x,BmpH));
Canvas->Draw(Lft,Tp,Bit1);
x+=2;
}
else ChangePic=true;
break;
case 15:
HRGN MyRgn;
if (x<=sqrt(BmpW*BmpW+BmpH*BmpH)/2+2)
{
Bit1->Canvas->CopyRect(Rect(0,0,BmpW,BmpH),
Bit2->Canvas,
Rect(0,0,BmpW,BmpH));
MyRgn=CreateEllipticRgn(Width/2-x,Height/2-x,
Width/2+x,Height/2+x);
SelectObject(Canvas->Handle,MyRgn);
Canvas->Draw(Lft,Tp,Bit1);
DeleteObject(MyRgn);
x+=2;
}
else ChangePic=true;/**/
break;
case 12: // 从左上角平铺
if (x<=BmpW)
{
Bit1->