⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 screen.cpp

📁 关于书籍《Borland c++Builder工程实践》的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------
#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->Canvas->CopyRect(Rect(0,0,x,x*3/4),
                    Bit2->Canvas,
                    Rect(0,0,x,x*3/4));
               Canvas->Draw(Lft,Tp,Bit1);
               x+=2;
          }
          else  ChangePic=true;
          break;
     case 0:     // 从右上角平铺
          if (x<=BmpW)
          {
               Bit1->Canvas->CopyRect(Rect(BmpW-x,0,BmpW,x*3/4),
                    Bit2->Canvas,
                    Rect(BmpW-x,0,BmpW,x*3/4));
               Canvas->Draw(Lft,Tp,Bit1);
               x+=2;
          }
          else  ChangePic=true;
          break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -