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

📄 unit1.cpp

📁 关于书籍《Borland c++Builder工程实践》的源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#define MIN(A,B) (A<B)?A:B
#define MAX(A,B) (A>B)?A:B

#include "Unit1.h"
#include "About.h"
#include <printers.hpp>
#include <Clipbrd.hpp>
#include "bmpdlg.h"
#include "bmpdlg2.h"
#include "fontdlg.h"
#include "color.h"
#include <stdlib.h>
#include <math.h>
#include <jpeg.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CGRID"
#pragma link "CSPIN"
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::ColorGrid1Change(TObject *Sender)
{
    FGShape->Brush->Color = ColorGrid1->ForegroundColor;
    if (FGShape->Brush->Color == TColor(clBlack))
        FGShape->Pen->Color = TColor(clWhite);
    else
        FGShape->Pen->Color = TColor(clBlack);
    BGShape->Brush->Color = ColorGrid1->BackgroundColor;
    if (BGShape->Brush->Color == TColor(clBlack))
        BGShape->Pen->Color = TColor(clWhite);
    else
        BGShape->Pen->Color = TColor(clBlack);
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
        Screen->Cursors[crFill] = LoadCursorFromFile("FILL.cur");
        Screen->Cursors[crPlus] = LoadCursorFromFile("PLUS.cur");
        Screen->Cursors[crDraw] = LoadCursorFromFile("DRAW.cur");
        Screen->Cursors[crErase] = LoadCursorFromFile("ERASE.cur");
        Screen->Cursors[crText] = LoadCursorFromFile("TEXT.cur");
        Screen->Cursors[crZoom] = LoadCursorFromFile("ZOOM.cur");
        Image->Cursor=TCursor(crPlus);
        Image->Canvas->MoveTo(0,0);
        ToolState=dtSelect;
        randomize();
        Image->Canvas->Pen->Width=PenWidth->Value;
        Image->Canvas->Pen->Style=psSolid;
        Image->Canvas->Brush->Style=bsSolid;
        isSelect=false;
        OpenDialog1->Filter = GraphicFilter(__classid(TGraphic));
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::O1Click(TObject *Sender)
{
    if (OpenDialog1->Execute())
    {
        CurrentFile = OpenDialog1->FileName;
        if (ExtractFileExt(OpenDialog1->FileName)==".jpg")
        {
         TJPEGImage *JpegImage1=new TJPEGImage();
         Graphics::TBitmap *Bit=new Graphics::TBitmap();
         JpegImage1->LoadFromFile(CurrentFile);
         Bit->Width = JpegImage1->Width ;
         // 使 位 图 与JPEG 图 像 尺 寸 相 等
         Bit->Height = JpegImage1->Height ;
         Bit->Canvas->StretchDraw(Rect
              (0,0,Bit->Width,Bit->Height),JpegImage1);
         Image->Picture->Graphic=Bit;
         delete JpegImage1;
         delete Bit;
        }
        else
            Image->Picture->LoadFromFile(CurrentFile);
    }
}
//---------------------------------------------------------------------------



void __fastcall TMainForm::ImageMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
     TVarRec tempvar[2] = {X, Y};
     StatusBar1->Panels->Items[1]->Text
          = Format("当前位置: (%d, %d)", tempvar, 2);
     if (!Shift.Contains(ssLeft))
          return;
     switch (ToolState){
     case dtPencil:
          Image->Canvas->LineTo(X,Y);
          break;
     case dtBrush:
          Image->Canvas->LineTo(X,Y);
          break;
     case dtErase:
          Image->Canvas->LineTo(X,Y);
          break;
     case dtLine:
     case dtRectangle:
     case dtEllipse:
     case dtRoundRect:
     case dtSolidRect:
     case dtSolidEllipse:
     case dtSolidRndRect:
          DrawShape(Origin, MovePt,pmNotXor);
          MovePt = Point(X, Y);
          DrawShape(Origin, MovePt,pmNotXor);
          break;
     case dtSelect:
          DrawShape(Origin, MovePt,pmNotXor);
          MovePt = Point(X, Y);
          DrawShape(Origin, MovePt,pmNotXor);
          break;
     }
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::T1Click(TObject *Sender)
{
        EraseSelect();
        C1Click(Sender);
        Image->Canvas->CopyMode = cmWhiteness;
        Image->Canvas->CopyRect(SelectRect, Image->Canvas, SelectRect);
        Image->Canvas->CopyMode = cmSrcCopy;
        T1->Enabled=false;
        C1->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::C1Click(TObject *Sender)
{
        EraseSelect();
        Graphics::TBitmap *tmpBitmap;
        tmpBitmap = new Graphics::TBitmap();
        tmpBitmap->Width=SelectRect.Right-SelectRect.Left;
        tmpBitmap->Height=SelectRect.Bottom-SelectRect.Top;
        tmpBitmap->Canvas->CopyRect(
        TRect(0,0,tmpBitmap->Width,tmpBitmap->Height),
        Image->Canvas,SelectRect);
        Clipboard()->Assign(tmpBitmap);
        delete tmpBitmap;
        T1->Enabled=false;
        C1->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::N3Click(TObject *Sender)
{
        Graphics::TBitmap *tmpBitmap;

        if (Clipboard()->HasFormat(CF_BITMAP)){
                tmpBitmap = new Graphics::TBitmap();
                try{
                tmpBitmap->Assign(Clipboard());
                Image->Canvas->Draw(0, 0, tmpBitmap);
                delete tmpBitmap;
                }
                catch(...){
                delete tmpBitmap;
                }
        }
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::T2Click(TObject *Sender)
{
        if (T2->Checked){
                T2->Checked=false;
                CoolBar1->Width=0;
        }
        else {
                T2->Checked=true;
                CoolBar1->Width=53;
        }
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::C2Click(TObject *Sender)
{
        if (C2->Checked){
                C2->Checked=false;
                Panel1->Visible=false;
        }
        else {
                C2->Checked=true;
                Panel1->Visible=true;
        }
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::N4Click(TObject *Sender)
{
        if (N4->Checked)
                N4->Checked=false;
        else
                N4->Checked=true;
        StatusBar1->Visible=N4->Checked;
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::BCBA1Click(TObject *Sender)
{
        AboutBox->Show();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::X1Click(TObject *Sender)
{
        this->Close();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::ImageMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
     TVarRec tempvar[2] = {X, Y};
     Graphics::TBitmap *tmpBitmap;
     if (ToolState==dtFill)
     {
          if (Button == mbLeft)
               Image->Canvas->Brush->Color
                    = FGShape->Brush->Color;
          else
               Image->Canvas->Brush->Color
                    = BGShape->Brush->Color;
          Image->Canvas->FloodFill(X, Y, Image1->Canvas->Pixels[X][Y], fsSurface);
          return;
     }
     //只有填充需要处理鼠标右键,右键用于使用被景色填充。
     if (Button != mbLeft)
          return;
     switch (ToolState){
     case dtPencil:
          Image->Canvas->Pen->Width=1;
          Image->Canvas->Pen->Color = FGShape->Brush->Color;
          Image->Canvas->Brush->Color = BGShape->Brush->Color;
          Image->Canvas->MoveTo(X,Y);
          break;
     case dtBrush:
          Image->Canvas->Pen->Color = FGShape->Brush->Color;
          Image->Canvas->Brush->Color = BGShape->Brush->Color;
          Image->Canvas->MoveTo(X,Y);
          break;
     case dtErase:
          Image->Canvas->Pen->Color = BGShape->Brush->Color;
          Image->Canvas->Brush->Color = BGShape->Brush->Color;
          Image->Canvas->Pen->Width = 13;
          Image->Canvas->MoveTo(X,Y);
          break;
     case dtText:
          if (FontForm->ShowModal() == IDOK){
               Image->Canvas->Font
                    =FontForm->FontDialog1->Font;
               Image->Canvas->TextOut(X,Y,FontForm->Edit1->Text);
          }
          break;
     case dtFog:
          for (int i=0;i<FogSize*FogSize/8;i++){
               Image->Canvas->
                    Pixels[X+random(FogSize)][Y+random(FogSize)]
                    =FGShape->Brush->Color;
          }
          break;
     case dtSolidRect:
     case dtSolidEllipse:
     case dtSolidRndRect:
          Image->Canvas->Brush->Color = FGShape->Brush->Color;
          Image->Canvas->Pen->Color = FGShape->Brush->Color;
          Image->Canvas->Brush->Style=bsSolid;
               Origin = Point(X, Y);
          StatusBar1->Panels->Items[0]->Text =
               Format("起点位置: (%d, %d)", tempvar, 2);
          MovePt = Origin;
          break;
     case dtLine:
     case dtRectangle:
     case dtEllipse:
     case dtRoundRect:
          Image->Canvas->Brush->Style=bsClear;
          Image->Canvas->Pen->Color = FGShape->Brush->Color;
          Origin = Point(X, Y);
          StatusBar1->Panels->Items[0]->Text =
               Format("起点位置: (%d, %d)", tempvar, 2);
          MovePt = Origin;
          break;
     case dtZoomOut:
          tmpBitmap = new Graphics::TBitmap();
          tmpBitmap->Width = Image->Picture->Width*ZoomSize;
          tmpBitmap->Height = Image->Picture->Height*ZoomSize;
          tmpBitmap->Canvas->StretchDraw
               (TRect(0,0,tmpBitmap->Width,tmpBitmap->Height),
          Image->Picture->Graphic);
          Image->Picture->Graphic = tmpBitmap;
          delete tmpBitmap;
          break;
     case dtZoomIn:
          tmpBitmap = new Graphics::TBitmap();
          tmpBitmap->Width = Image->Picture->Width/ZoomSize;
          tmpBitmap->Height = Image->Picture->Height/ZoomSize;
          tmpBitmap->Canvas->StretchDraw
               (TRect(0,0,tmpBitmap->Width,tmpBitmap->Height),
               Image->Picture->Graphic);
          Image->Picture->Graphic = tmpBitmap;
          delete tmpBitmap;
          break;
     case dtSelect:
          EraseSelect();
          Image->Canvas->Brush->Style=bsClear;
          Image->Canvas->Pen->Style = psDot;
          Image->Canvas->Pen->Width = 1;
          Origin = Point(X, Y);
          MovePt = Origin;
          break;
     }
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::ImageMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
     if (Button != mbLeft)
          return;
     switch (ToolState){
     case dtPencil:
          Image->Canvas->Pen->Width=PenWidth->Value;
          break;
     case dtErase:
          Image->Canvas->Pen->Width=PenWidth->Value;
          break;
     case dtLine:
     case dtRectangle:
     case dtEllipse:
     case dtRoundRect:
     case dtSolidRect:
     case dtSolidEllipse:
     case dtSolidRndRect:
          DrawShape(Origin, Point(X, Y), pmCopy);
          Image->Canvas->Brush->Style=bsSolid;
          Image->Canvas->Brush->Color=
               BGShape->Brush->Color;
          break;
     case dtSelect:
          Image->Canvas->Brush->Style=bsSolid;
          Image->Canvas->Pen->Width=PenWidth->Value;
          Image->Canvas->Pen->Style = psSolid;
          MovePt=Point(X,Y);
          isSelect=true;
          SelectRect=(TRect(Origin, MovePt));
          T1->Enabled=true;
          C1->Enabled=true;
          break;
     }
}
//---------------------------------------------------------------------------
//选取铅笔
void __fastcall TMainForm::SpeedButton1Click(TObject *Sender)
{
        EraseSelect();
        ToolState=dtPencil;
        Image->Cursor=TCursor(crDraw);
}
//---------------------------------------------------------------------------
// 区域选取
void __fastcall TMainForm::SpeedButton4Click(TObject *Sender)
{
        ToolState=dtSelect;
        Image->Cursor=TCursor(crPlus);
        isSelect=false;
}
//---------------------------------------------------------------------------
//图形放大
void __fastcall TMainForm::SpeedButton2Click(TObject *Sender)
{
        EraseSelect();
        ToolState=dtZoomOut;
        Image->Cursor=TCursor(crZoom);
}
//---------------------------------------------------------------------------
//图形缩小
void __fastcall TMainForm::SpeedButton3Click(TObject *Sender)
{
        EraseSelect();
        ToolState=dtZoomIn;
        Image->Cursor=TCursor(crZoom);

}
//---------------------------------------------------------------------------
//画刷选取

⌨️ 快捷键说明

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