home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 9 / CDACTUAL9.iso / progs / CB / DATA.Z / GRAPHWIN.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1996-10-17  |  8.6 KB  |  272 lines

  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4.  
  5. #include "graphwin.h"
  6. #include "bmpdlg.h"
  7. #include <Clipbrd.hpp>
  8. //---------------------------------------------------------------------------
  9. #pragma resource "*.dfm"
  10. TForm1* Form1;
  11. //---------------------------------------------------------------------------
  12. __fastcall TForm1::TForm1(TComponent* Owner)
  13.   : TForm(Owner)
  14. {
  15.  Image->Canvas->MoveTo(0,0);
  16. }
  17. //---------------------------------------------------------------------------
  18. void __fastcall TForm1::LineButtonClick(TObject *Sender)
  19. {
  20.   DrawingTool = dtLine;
  21. }
  22. //---------------------------------------------------------------------
  23. void __fastcall TForm1::RectangleButtonClick(TObject *Sender)
  24. {
  25.   DrawingTool = dtRectangle;
  26. }
  27. //---------------------------------------------------------------------
  28. void __fastcall TForm1::EllipseButtonClick(TObject *Sender)
  29. {
  30.   DrawingTool = dtEllipse;
  31. }
  32. //---------------------------------------------------------------------
  33. void __fastcall TForm1::RoundRectButtonClick(TObject *Sender)
  34. {
  35.   DrawingTool = dtRoundRect;
  36. }
  37. //---------------------------------------------------------------------
  38. void __fastcall TForm1::PenButtonClick(TObject *Sender)
  39. {
  40.   PenBar->Visible = PenButton->Down;
  41. }
  42. //---------------------------------------------------------------------
  43. void __fastcall TForm1::BrushButtonClick(TObject *Sender)
  44. {
  45.   BrushBar->Visible = BrushButton->Down;
  46. }
  47. //---------------------------------------------------------------------
  48. void __fastcall TForm1::SetPenStyle(TObject *Sender)
  49. {
  50.     if (Sender == SolidPen){
  51.        Image->Canvas->Pen->Style = psSolid;
  52.     }
  53.     else if (Sender == DashPen){
  54.             Image->Canvas->Pen->Style = psDash;
  55.     }
  56.     else if (Sender == DotPen){
  57.          Image->Canvas->Pen->Style = psDot;
  58.     }
  59.     else if (Sender == DashDotPen){
  60.          Image->Canvas->Pen->Style = psDashDot;
  61.     }
  62.     else if (Sender == DashDotDotPen){
  63.          Image->Canvas->Pen->Style = psDashDotDot;
  64.     }
  65.     else if (Sender == ClearPen){
  66.          Image->Canvas->Pen->Style = psClear;
  67.     }
  68. }
  69. //---------------------------------------------------------------------
  70. void __fastcall TForm1::PenColorClick(TObject *Sender)
  71. {
  72.   ColorDialog1->Color = Image->Canvas->Pen->Color;
  73.   if (ColorDialog1->Execute()){
  74.     Image->Canvas->Pen->Color = ColorDialog1->Color;
  75.   }
  76. }
  77. //---------------------------------------------------------------------
  78. void __fastcall TForm1::PenSizeChange(TObject *Sender)
  79. {
  80.   Image->Canvas->Pen->Width = PenWidth->Position;
  81. }
  82. //---------------------------------------------------------------------
  83. void __fastcall TForm1::SetBrushStyle(TObject *Sender)
  84. {
  85.     if (Sender == SolidBrush){
  86.        Image->Canvas->Brush->Style = bsSolid;
  87.     }
  88.     else if (Sender == ClearBrush){
  89.          Image->Canvas->Brush->Style = bsClear;
  90.     }
  91.     else if (Sender == HorizontalBrush){
  92.          Image->Canvas->Brush->Style = bsHorizontal;
  93.     }
  94.     else if (Sender == VerticalBrush){
  95.          Image->Canvas->Brush->Style = bsVertical;
  96.     }
  97.     else if (Sender == FDiagonalBrush){
  98.          Image->Canvas->Brush->Style = bsFDiagonal;
  99.     }
  100.     else if (Sender == BDiagonalBrush){
  101.          Image->Canvas->Brush->Style = bsBDiagonal;
  102.     }
  103.     else if (Sender == CrossBrush){
  104.          Image->Canvas->Brush->Style = bsCross;
  105.     }
  106.     else if (Sender == DiagCrossBrush){
  107.          Image->Canvas->Brush->Style = bsDiagCross;
  108.     }
  109. }
  110. //---------------------------------------------------------------------
  111. void __fastcall TForm1::BrushColorClick(TObject *Sender)
  112. {
  113.   ColorDialog1->Color = Image->Canvas->Brush->Color;
  114.   if (ColorDialog1->Execute()){
  115.     Image->Canvas->Brush->Color = ColorDialog1->Color;
  116.   }
  117. }
  118. //---------------------------------------------------------------------
  119. void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
  120.       TShiftState Shift, Integer X, Integer Y)
  121. {
  122.   Drawing = True;
  123.   Image->Canvas->MoveTo(X, Y);
  124.   Origin = Point(X, Y);
  125.   MovePt = Origin;
  126.  
  127.   TVarRec tempvar[2] = {X, Y};
  128.   StatusBar1->Panels->Items[0]->Text = Format("Origin: (%d, %d)", tempvar, 2);
  129. }
  130. //---------------------------------------------------------------------
  131. void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
  132.       Integer X, Integer Y)
  133. {
  134.   if (Drawing){
  135.     DrawShape(Origin, MovePt, pmNotXor);
  136.     MovePt = Point(X, Y);
  137.     DrawShape(Origin, MovePt, pmNotXor);
  138.   }
  139.  
  140.   TVarRec tempvar[2] = {X, Y};
  141.   StatusBar1->Panels->Items[1]->Text = Format("Current: (%d, %d)", tempvar, 2);
  142. }
  143. //---------------------------------------------------------------------
  144. void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
  145.       TShiftState Shift, Integer X, Integer Y)
  146. {
  147.   if (Drawing){
  148.     DrawShape(Origin, Point(X, Y), pmCopy);
  149.     Drawing = False;
  150.   }
  151. }
  152. //---------------------------------------------------------------------
  153. void __fastcall TForm1::New1Click(TObject *Sender)
  154. {
  155.      Graphics::TBitmap *Bitmap;
  156.  
  157.      NewBMPForm->ActiveControl = NewBMPForm->WidthEdit;
  158.      NewBMPForm->WidthEdit->Text = IntToStr(Image->Picture->Graphic->Width);
  159.      NewBMPForm->HeightEdit->Text = IntToStr(Image->Picture->Graphic->Height);
  160. //     if (ShowModal() != idCancel){
  161.      if (NewBMPForm->ShowModal() != IDCANCEL){
  162.         Bitmap = new Graphics::TBitmap();
  163. //        Bitmap->Create();
  164.         Bitmap->Width = StrToInt(NewBMPForm->WidthEdit->Text);
  165.         Bitmap->Height = StrToInt(NewBMPForm->HeightEdit->Text);
  166.         Image->Picture->Graphic = Bitmap;
  167.         CurrentFile = EmptyStr;
  168.      }
  169. }
  170. //---------------------------------------------------------------------
  171. void __fastcall TForm1::Open1Click(TObject *Sender)
  172. {
  173.   if (OpenDialog1->Execute()){
  174.     CurrentFile = OpenDialog1->FileName;
  175.     Image->Picture->LoadFromFile(CurrentFile);
  176.   }
  177. }
  178. //---------------------------------------------------------------------
  179. void __fastcall TForm1::Save1Click(TObject *Sender)
  180. {
  181.   if (CurrentFile != EmptyStr){
  182.     Image->Picture->SaveToFile(CurrentFile);
  183.   }
  184.   else{
  185.    SaveAs1Click(Sender);
  186.   }
  187. }
  188. //---------------------------------------------------------------------
  189. void __fastcall TForm1::SaveAs1Click(TObject *Sender)
  190. {
  191.   if (SaveDialog1->Execute()){
  192.     CurrentFile = SaveDialog1->FileName;
  193.     Save1Click(Sender);
  194.   }
  195. }
  196. //---------------------------------------------------------------------
  197. void __fastcall TForm1::Exit1Click(TObject *Sender)
  198. {
  199.   Close();
  200. }
  201. //---------------------------------------------------------------------
  202. void __fastcall TForm1::Cut1Click(TObject *Sender)
  203. {
  204.  TRect ARect;
  205.  
  206.  Copy1Click(Sender);
  207.  
  208.  Image->Canvas->CopyMode = cmWhiteness;
  209.  ARect = Rect(0, 0, Image->Width, Image->Height);
  210.  Image->Canvas->CopyRect(ARect, Image->Canvas, ARect);
  211.  Image->Canvas->CopyMode = cmSrcCopy;
  212. }
  213.  
  214. //---------------------------------------------------------------------
  215. void __fastcall TForm1::Copy1Click(TObject *Sender)
  216. {
  217.   Clipboard()->Assign(Image->Picture);
  218. }
  219.  
  220. //---------------------------------------------------------------------
  221. void __fastcall TForm1::Paste1Click(TObject *Sender)
  222. {
  223.  
  224.   Graphics::TBitmap *Bitmap;
  225.  
  226.   if (Clipboard()->HasFormat(CF_BITMAP)){
  227.     Bitmap = new Graphics::TBitmap();
  228.     try{
  229.       Bitmap->Assign(Clipboard());
  230.       Image->Canvas->Draw(0, 0, Bitmap);
  231.       Bitmap->Free();
  232.     }
  233.     catch(...){
  234.       Bitmap->Free();
  235.     }
  236.   }
  237. }
  238.  
  239. //---------------------------------------------------------------------
  240. void __fastcall TForm1::Print1Click(TObject *Sender)
  241. {
  242.  
  243. }
  244. //---------------------------------------------------------------------
  245. void __fastcall TForm1::DrawShape(TPoint TopLeft, TPoint BottomRight, TPenMode AMode){
  246.     Image->Canvas->Pen->Mode = AMode;
  247.  
  248.     switch (DrawingTool){
  249.            case dtLine : {
  250.                 Image->Canvas->MoveTo(TopLeft.x, TopLeft.y);
  251.                 Image->Canvas->LineTo(BottomRight.x, BottomRight.y);
  252.                 break;
  253.            }
  254.  
  255.            case dtRectangle : {
  256.                 Image->Canvas->Rectangle(TopLeft.x, TopLeft.y, BottomRight.x, BottomRight.y);
  257.                 break;
  258.            }
  259.  
  260.            case dtEllipse : {
  261.                 Image->Canvas->Ellipse(TopLeft.x, TopLeft.y, BottomRight.x, BottomRight.y);
  262.                 break;
  263.            }
  264.  
  265.            case dtRoundRect : {
  266.                 Image->Canvas->RoundRect(TopLeft.x, TopLeft.y, BottomRight.x, BottomRight.y, (TopLeft.x - BottomRight.x)/2, (TopLeft.y - BottomRight.y)/2);
  267.                 break;
  268.            }
  269.     }
  270. }
  271. //---------------------------------------------------------------------
  272.