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

📄 drawform.cpp

📁 C++Builder程序员编程手记《配书光盘》
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}
//---------------------------------------------------------------------------

void __fastcall Tmainform::BrushColorClick(TObject *Sender)
{
    if(ColorDialog->Execute())
    {
        BrushColor->Color=ColorDialog->Color;
        Image1->Canvas->Brush->Color=ColorDialog->Color;
    }
}
//---------------------------------------------------------------------------

void __fastcall Tmainform::PenWidthChange(TObject *Sender)
{
    if(DrawingTool!=dtText)
        Image1->Canvas->Pen->Width=UpDown1->Position;
    else
    {
        Edit->Font->Size=UpDown1->Position;
        Image1->Canvas->Font->Size=UpDown1->Position;
    }
}
//字符集对象构造函数----------------------------------------------
__fastcall TCharsetObject::TCharsetObject(int FCharset)
  : TObject()
{
     Charset = FCharset;
}
//枚举字体的方法-------------------------------------------------------
int __stdcall EnumFontsProc(TLogFontA &LogFont, TTextMetricA &/*TextMetric*/,
                                int /*FontType*/, Pointer Data)
{
     TCharsetObject *FontCharset;
     FontCharset = new TCharsetObject((int)LogFont.lfCharSet);
     ((TStrings *)Data)->AddObject((AnsiString)LogFont.lfFaceName,FontCharset);
     return 1;
}
//取得系统字体名的方法--------------------------------------------------
void __fastcall Tmainform::GetFontNames(void)
{
     HDC hDC = GetDC(0);
     void * cTmp = (void *)FontBox->Items;
     EnumFonts(hDC, NULL, (FONTENUMPROC)EnumFontsProc, (long) cTmp );
     ReleaseDC(0,hDC);
     mainform->FontBox->Sorted = True;
}
//---------------------------------------------------------------------------//---------------------------------------------------------------------------
void __fastcall Tmainform::FontBoxChange(TObject *Sender)
{

    if(DrawingTool==dtText)
    {
        Edit->Font->Name = FontBox->Items->Strings[FontBox->ItemIndex];
        Image1->Canvas->Font->Name=FontBox->Items->Strings[FontBox->ItemIndex];
    }
}
//在状态栏显示提示信息的方法-----------------------------------------------------
void __fastcall Tmainform::ShowHint(TObject *)
{
   StatusBar1->Panels->Items[0]->Text = Application->Hint;
}
//得到一个矩形区域的方法------------------------------------------------------//取得矩形区域的函数---------------------------------------------------------------------------
TRect __fastcall Tmainform::GetRect(TPoint First, TPoint Second)
{
    TRect r;

    if(First.x<=Second.x&&First.y<=Second.y)          //由左上角向右下角拉
    {
      r.Left=First.x;
      r.Top=First.y;
      r.Right=Second.x;
      r.Bottom=Second.y;
    }
    if(First.x<=Second.x&&First.y>=Second.y)           //由左下角向右上角拉
    {
      r.Left=First.x;
      r.Top=Second.y;
      r.Right=Second.x;
      r.Bottom=First.y;
    }
    if(First.x>=Second.x&&First.y<=Second.y)           //由右上角向左下角拉
    {
      r.Left=Second.x;
      r.Top=First.y;
      r.Right=First.x;
      r.Bottom=Second.y;
    }
    if(First.x>=Second.x&&First.y>=Second.y)      //由右下角向左上角拉
    {
      r.Left=Second.x;
      r.Top=Second.y;
      r.Right=First.x;
      r.Bottom=First.y;
    }
    return r;
}
//---------------------------------------------------------------------------
void __fastcall Tmainform::EditClearClick(TObject *Sender)
{
    TRect ClearRect;
    Image1->Canvas->CopyMode=cmWhiteness;
    ClearRect=Rect(0,0,Image1->Width,Image1->Height);
    Image1->Canvas->CopyRect(ClearRect,Image1->Canvas,ClearRect);
    Image1->Canvas->CopyMode=cmSrcCopy;
    Selected=false;
}
//得到选择的图形的方法-----------------------------------------------------
void __fastcall Tmainform::GetSelImage(TRect ARect)
{
  TRect r;
  SelectImage->Width=(ARect.Width());
  SelectImage->Height=(ARect.Height());
  r=Rect(0,0,SelectImage->Width,SelectImage->Height);
  SelectImage->Canvas->CopyRect(r,Image1->Canvas,ARect);
}
//---------------------------------------------------------------------------
void __fastcall Tmainform::EditCopyClick(TObject *Sender)
{
    Clipboard()->Assign(SelectImage);
}
//---------------------------------------------------------------------------

void __fastcall Tmainform::EditPasteClick(TObject *Sender)
{
    Graphics::TBitmap *Bitmap;
    if(Clipboard()->HasFormat(CF_BITMAP))
    {
        Bitmap=new Graphics::TBitmap();
        try
        {
            Bitmap->Assign(Clipboard());
            Image1->Canvas->Draw(0,0,Bitmap);
            delete Bitmap;
        }
        catch(...)
        {
            delete Bitmap;
        }
    }
}

//---------------------------------------------------------------------------

void __fastcall Tmainform::HelpAboutClick(TObject *Sender)
{
  aboutform->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall Tmainform::FileNewClick(TObject *Sender)
{
  int msg;

  if(Image1->Picture->Bitmap->Modified)
  {
    msg=Application->MessageBox(("保存"+ExtractFileName(CurrentFile)+"吗?").c_str()
                                ,"保存",MB_ICONQUESTION+MB_YESNOCANCEL);
    switch(msg)
    {
      case IDYES:
        FileSaveClick(Sender);
        NewAFile();
        break;
      case IDNO:
        NewAFile();
        break;
      default:
        break;
    }
  }
  else
    NewAFile();
}
//---------------------------------------------------------------------------
void __fastcall Tmainform::FileOpenClick(TObject *Sender)
{
  int msg;

  if(Image1->Picture->Bitmap->Modified)
  {
    msg=Application->MessageBox(("保存"+ExtractFileName(CurrentFile)+"吗?").c_str()
                                ,"保存",MB_ICONQUESTION+MB_YESNOCANCEL);
    switch(msg)
    {
      case IDYES:
        FileSaveClick(Sender);
        if(OpenAFile())
          mainform->Caption=ExtractFileName(CurrentFile);
        break;
      case IDNO:
        if(OpenAFile())
          mainform->Caption=ExtractFileName(CurrentFile);
        break;
      default:
        break;
    }
  }
  else if(OpenAFile())
    mainform->Caption=ExtractFileName(CurrentFile);
}
//---------------------------------------------------------------------------
void __fastcall Tmainform::FileSaveClick(TObject *Sender)
{
  if(Selected)
  {
    Image1->Canvas->DrawFocusRect(SelectRect);
    Selected=false;
  }
  if(CurrentFile!="未命名.BMP")
  {
    if(SaveAFile(CurrentFile))
      mainform->Caption=ExtractFileName(CurrentFile);
    else
      CurrentFile=mainform->Caption;
  }
  else
    FileSaveAsClick(Sender);
}
//---------------------------------------------------------------------------

void __fastcall Tmainform::FileSaveAsClick(TObject *Sender)
{
  if(Selected)
  {
    Image1->Canvas->DrawFocusRect(SelectRect);
    Selected=false;
  }
  if(SavePictureDialog1->Execute())
  {
    CurrentFile=SavePictureDialog1->FileName;
    FileSaveClick(Sender);
  }
}
//打开文件的方法------------------------------------------------
bool __fastcall Tmainform::OpenAFile()
{
  Graphics::TBitmap *Bitmap;
  Graphics::TIcon *Icon;
  Graphics::TMetafile *Metafile;
  TJPEGImage *JpegFile;
  AnsiString FileExtent;

  try
  {
    if(OpenPictureDialog1->Execute())
    {
      CurrentFile=OpenPictureDialog1->FileName;
      Bitmap=new Graphics::TBitmap();
      FileExtent=CurrentFile.UpperCase();
      if (FileExtent.Pos(".BMP"))
        Image1->Picture->LoadFromFile(CurrentFile);
      else if(ExtractFileExt(FileExtent)==".ICO")
      {
        Icon=new Graphics::TIcon();
        Icon->LoadFromFile(CurrentFile);
        Bitmap->Width=Icon->Width;
        Bitmap->Height=Icon->Height;
        Bitmap->Canvas->Draw(0,0,Icon);
        Image1->Picture->Bitmap=Bitmap;
        delete Icon;
      }
      else if(ExtractFileExt(FileExtent)==".WMF"||ExtractFileExt(FileExtent)==".EMF")
      {
        Metafile=new Graphics::TMetafile;
        Metafile->LoadFromFile(CurrentFile);
        Bitmap->Width=Metafile->Width;
        Bitmap->Height=Metafile->Height;
        Bitmap->Canvas->Draw(0,0,Metafile);
        Image1->Picture->Bitmap=Bitmap;
        delete Metafile;
      }
      else if(ExtractFileExt(FileExtent)==".JPG"||ExtractFileExt(FileExtent)==".JPEG")
      {
        JpegFile=new TJPEGImage;
        Image1->Picture->LoadFromFile(CurrentFile);
        Bitmap->Width=Image1->Picture->Width;
        Bitmap->Height=Image1->Picture->Height;
        Bitmap->Canvas->Draw(0,0,Image1->Picture->Graphic);
        Image1->Picture->Bitmap=Bitmap;
        delete JpegFile;
      }
      Image1->Picture->Graphic->Modified=false;
      delete Bitmap;
    }
  }
  catch (...){
    Application->MessageBox("无法装入图像文件","装入错误",MB_ICONWARNING+MB_OK);
    return false;
  }
  return true;
}
//新建文件的方法------------------------------------------------------------------
void __fastcall Tmainform::NewAFile()
{
  Graphics::TBitmap *Bitmap;
  newimageform->ActiveControl=newimageform->ImageWidth;
  newimageform->WidthJustfy->Position=(short)Image1->Picture->Graphic->Width;
  newimageform->HeighJustfy->Position=(short)Image1->Picture->Graphic->Height;

  if(newimageform->ShowModal()!=IDCANCEL)
  {
    Bitmap=new Graphics::TBitmap();
    Bitmap->Width=newimageform->WidthJustfy->Position;
    Bitmap->Height=newimageform->HeighJustfy->Position;
    Image1->Picture->Graphic=Bitmap;
    Image1->Picture->Graphic->Modified=false;
    CurrentFile="未命名";
    Caption=CurrentFile;
  }
  delete Bitmap;
}
//-------------------------------------------------------
void __fastcall Tmainform::EditCutClick(TObject *Sender)
{
  TRect r;

  r=Rect(SelectRect.Left,SelectRect.Top,
          SelectRect.Right,SelectRect.Bottom);
  Clipboard()->Assign(SelectImage);
  Image1->Canvas->CopyMode=cmWhiteness;
  Image1->Canvas->CopyRect(r, Image1->Canvas, r);
  Image1->Canvas->CopyMode=cmSrcCopy;
  Selected=false;
}
//---------------------------------------------------------------------------

void __fastcall Tmainform::FilePrintSetupClick(TObject *Sender)
{
  PrinterSetupDialog1->Execute();
}
//---------------------------------------------------------------------------

void __fastcall Tmainform::FilePrintClick(TObject *Sender)
{
  if(Selected)
  {
    Image1->Canvas->DrawFocusRect(SelectRect);
    Selected=false;
  }
  Printer()->BeginDoc();
  Printer()->Canvas->CopyRect(Image1->ClientRect,Image1->Canvas,Image1->ClientRect);
  Printer()->EndDoc();
}
//---------------------------------------------------------------------------


void Tmainform::RubberFill(int X, int Y,int Intend,int CurSize)
{
  TRect TempRect;

  TempRect.Top=Y+Intend;
  TempRect.Left=X+Intend;
  TempRect.Bottom=TempRect.Top+CurSize;
  TempRect.Right=TempRect.Left+CurSize;
  Image1->Canvas->FillRect(TempRect);
}

bool __fastcall Tmainform::SaveAFile(AnsiString SaveFileName)
{
  Graphics::TBitmap *Bitmap;
  Graphics::TIcon *Icon;
  Graphics::TMetafile *Metafile;
  TJPEGImage *JpegFile;
  AnsiString FileExtent;

  try
  {
      FileExtent=SaveFileName.UpperCase();
      if (ExtractFileExt(FileExtent)==".BMP")
      {
        Image1->Picture->Bitmap->SaveToFile(SaveFileName);
        delete Bitmap;
      }
      else if(ExtractFileExt(FileExtent)==".EMF")
      {
        Metafile=new Graphics::TMetafile;
        Metafile->Assign(dynamic_cast<Graphics::TMetafile *>(Image1->Picture->Graphic));
        Metafile->SaveToFile(SaveFileName);
        delete Metafile;
      }
      else if(ExtractFileExt(FileExtent)==".JPG"||ExtractFileExt(FileExtent)==".JPEG")
      {
        JpegFile=new TJPEGImage;
        JpegFile->Assign(Image1->Picture->Bitmap);
        JpegFile->SaveToFile(SaveFileName);
        delete JpegFile;
      }
      else
      {
        Application->MessageBox("无法保存该文件","错误的文件类型",MB_ICONWARNING+MB_OK);
        return false;
      }
  }
  catch (...){
    Application->MessageBox("无法保存图像文件","保存错误",MB_ICONWARNING+MB_OK);
    return false;
  }
  return true;
}

⌨️ 快捷键说明

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