📄 drawform.cpp
字号:
}
//---------------------------------------------------------------------------
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 + -