//--------------------------------------------------------------------------- #ifdef WORKSHEET //--------------------------------------------------------------------------- #include #include #pragma hdrstop #include "WorkSheet_F.h" #include "BaseDirectoryDialog_F.h" #include "FileManager_F.h" #include "Main.h" #include "ExportDXF_F.h" #include "ProtectCard.h" #include "define.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "RzGrids" #pragma link "RzPanel" #pragma link "RzButton" #pragma link "RzTabs" #pragma resource "*.dfm" //--------------------------------------------------------------------------- #define IDS_TITLE FormStringTable[0]//ÀÛ¾÷Áö½Ã¼­ #define IDS_SAVE FormStringTable[1]//ÀúÀå #define IDS_LOAD FormStringTable[2]//Àбâ #define IDS_PRINT FormStringTable[3]//ÇÁ¸°Æ® #define IDS_PRINTEROPTION FormStringTable[4]//ÇÁ¸°ÅÍ ¼³Á¤ #define IDS_SETDXFPATH FormStringTable[5]//DXF °æ·Î ¼³Á¤ #define IDS_EXPORTDXFFILE FormStringTable[6]//DXF ³»º¸³»±â #define IDS_CLOSE FormStringTable[7]//´Ý±â #define IDS_CLEAR FormStringTable[8]//Áö¿ì±â #define IDS_FILE_OVERWRITE FormStringTable[9]//°°Àº À̸§À» °¡Áø ÆÄÀÏÀÌ Á¸ÀçÇÕ´Ï´Ù.\nµ¤¾î ¾²½Ã°Ú½À´Ï±î? #define IDS_INITIALIZATION FormStringTable[10]//ÃʱâÈ­ #define IDS_OPEN FormStringTable[11]//¿­±â #define IDS_MERGE FormStringTable[12]//ÇÕ¼º #define IDS_STYLENO DataStringTable[0]//STYLE NO #define IDS_REQUEST_DATE DataStringTable[1]//ÀÇ·ÚÀÏ #define IDS_END_DATE DataStringTable[2]//¿Ï·áÀÏ #define IDS_DESIGNER DataStringTable[3]//µðÀÚÀÌ³Ê #define IDS_PATTERNER DataStringTable[4]//ÆÐÅÍ³Ê #define IDS_DESIGN DataStringTable[5]//µðÀÚÀÎ #define IDS_MATERIAL DataStringTable[6]//¼ÒÀç #define IDS_OUTER DataStringTable[7]//°Ñ°¨ #define IDS_LINING DataStringTable[8]//¾È°¨ #define IDS_WICK DataStringTable[9]//½ÉÁö #define IDS_A DataStringTable[10]//A #define IDS_B DataStringTable[11]//B #define IDS_C DataStringTable[12]//C #define IDS_D DataStringTable[13]//D #define IDS_SUBMATERIAL DataStringTable[14]//ºÎÀÚÀç #define IDS_TYPE DataStringTable[15]//Á¾·ù #define IDS_NUMBER DataStringTable[16]//°¹¼ö #define IDS_SIZE DataStringTable[17]//Å©±â #define IDS_PART DataStringTable[18]//»ç¿ëºÎÀ§ #define IDS_SIZE55BASE DataStringTable[19]//»çÀÌÁî (55±âÁØ) #define IDS_UPPER DataStringTable[20]//»óÀÇ #define IDS_TOTALLENGTH DataStringTable[21]//ÃÑÀå #define IDS_CHEST DataStringTable[22]//°¡½¿µÑ·¹ #define IDS_WAIST DataStringTable[23]//Ç㸮µÑ·¹ #define IDS_HEM DataStringTable[24]//¹Ø´ÜµÑ·¹ #define IDS_SHOULDER DataStringTable[25]//¾î±ú³Êºñ #define IDS_SLEEVELENGTH DataStringTable[26]//¼Ò¸Å±æÀÌ #define IDS_SLEEVEWIDTH DataStringTable[27]//¼Ò¸ÅÅë #define IDS_SLEEVEENDWIDTH DataStringTable[28]//¼Ò¸ÅºÎ¸® #define IDS_BLANK DataStringTable[29]// #define IDS_BOTTOMS DataStringTable[30]//ÇÏÀÇ #define IDS_BOTTOMSLENGTH DataStringTable[31]//ÃÑÀå #define IDS_BOTTOMSWAIST DataStringTable[32]//Ç㸮µÑ·¹ #define IDS_HIP DataStringTable[33]//ÈüµÑ·¹ #define IDS_THIGH DataStringTable[34]//Çã¹÷µÑ·¹ #define IDS_KNEE DataStringTable[35]//¹«¸­µÑ·¹ #define IDS_BOTTOMSHEM DataStringTable[36]//¹Ø´ÜµÑ·¹ #define IDS_FRONTSIDECHAIRSET DataStringTable[37]//¾Õ¹ØÀ§ #define IDS_BACKSIDECHAIRSET DataStringTable[38]//µÞ¹ØÀ§ #define IDS_BELT DataStringTable[39]//¿ÀºñÆø #define IDS_DESIGN2 DataStringTable[40]//µðÀÚÀÎ #define IDS_SPECIFICATION DataStringTable[41]//¾È»ç¾ç //--------------------------------------------------------------------------- TWorkSheetForm *WorkSheetForm; //--------------------------------------------------------------------------- __fastcall TDXFData::TDXFData() { VectorList = new TList; }; //--------------------------------------------------------------------------- __fastcall TDXFData::~TDXFData() { if (VectorList) { VecDraw->ClearDataList(VectorList); delete VectorList; } VectorList = NULL; }; //--------------------------------------------------------------------------- void __fastcall TDXFData::SaveToFile(HANDLE hFile) { DWORD dwWrite; int Len; Len = Path.Length(); WriteFile(hFile, &Len, sizeof(int), &dwWrite, NULL); WriteFile(hFile, Path.c_str(), sizeof(char)*Len, &dwWrite, NULL); if (VectorList) VecDraw->SaveToFile(hFile, VectorList, 1, TexStylistFileVersion, 0); } //--------------------------------------------------------------------------- bool __fastcall TDXFData::LoadFromFile(HANDLE hFile) { DWORD dwRead; bool bHasVector = false; Char ReadString[MAX_PATH]; int Len; ReadFile(hFile, &Len, sizeof(int), &dwRead, NULL); memset(ReadString, 0, sizeof(char)*MAX_PATH); ReadFile(hFile, ReadString, sizeof(char)*Len, &dwRead, NULL); if (0 < Len) Path = Path.sprintf(ReadString); if (!ReadFile(hFile, &bHasVector, sizeof(bool), &dwRead, NULL)) goto fail; if (bHasVector == true && VectorList) VecDraw->LoadFromFile(hFile, VectorList); return true; fail: return false; } //--------------------------------------------------------------------------- __fastcall TWorkSheetForm::TWorkSheetForm(TComponent* Owner) : TForm(Owner) { CombiData = new TCombinationData; CurrentImageType = itNone; imgTitle->Align = alClient; imgDesign->Align = alClient; rzpagectrlPage->TabIndex = 0; //imgDesign2->Align = alClient; //Image2->Align = alClient; designPanel->DoubleBuffered = true; MaterialGrid->DoubleBuffered = true; subMaterialGrid->DoubleBuffered = true; upperSizeGrid->DoubleBuffered = true; rzstrgrdStyle->DoubleBuffered = true; dxfGrid->DoubleBuffered = true; TitleBitmap = new TTexpiaBitmap; PartImageList = new TList; DXFDataList = new TList; DXFImageList = new TList; PatternBitmap = new TTexpiaBitmap; PatternVectorDataList = new TList; FormStringTable.Create(DirectoryItem, Language, "WorkSheetForm"); DataStringTable.Create(DirectoryItem, Language, "WorkSheetData"); // ±×¸®µå Å©±â, °£°Ý ¼³Á¤ (È­¸é Ãâ·Â ¹× ÇÁ¸°Æ® Ãâ·Â¿¡ ÀÌ¿ëµÇ¹Ç·Î °£°Ý ¼³Á¤ÀÌ Áß¿äÇÏ´Ù) top0Grid->ColWidths[0] = 108; top0Grid->ColWidths[1] = 327; top1LeftGrid->ColWidths[0] = 108; top1LeftGrid->ColWidths[1] = 125; top1RightGrid->ColWidths[0] = 100; top1RightGrid->ColWidths[1] = 101; top2LeftGrid->ColWidths[0] = 108; top2LeftGrid->ColWidths[1] = 125; top2RightGrid->ColWidths[0] = 100; top2RightGrid->ColWidths[1] = 101; MaterialGrid->ColWidths[0] = 25; MaterialGrid->ColWidths[1] = 138; subMaterialGrid->ColWidths[0] = 43; subMaterialGrid->ColWidths[1] = 24; subMaterialGrid->ColWidths[2] = 24; subMaterialGrid->ColWidths[3] = 114; upperSizeGrid->ColWidths[0] = 54; upperSizeGrid->ColWidths[1] = 49; lowerSizeGrid->ColWidths[0] = 54; lowerSizeGrid->ColWidths[1] = 50; rzstrgrdStyle->ColWidths[0] = 142; rzstrgrdStyle->ColWidths[1] = 142; rzstrgrdStyle->ColWidths[2] = 142; rzstrgrdStyle->ColWidths[3] = 112; rzstrgrdStyle->ColWidths[4] = 78; rzstrgrdStyle->ColWidths[5] = 65; rzstrgrdStyle->ColWidths[6] = 58; rzstrgrdStyle->ColWidths[7] = 58; rzstrgrdStyle->ColWidths[8] = 58; rzstrgrdStyle->ColWidths[9] = 56; rzstrgrdStyle->RowHeights[0] = 18; rzstrgrdStyle->RowHeights[1] = 18; rzstrgrdStyle->RowHeights[2] = 137; dxfGrid->ColWidths[0] = 142; dxfGrid->ColWidths[1] = 142; dxfGrid->ColWidths[2] = 142; dxfGrid->ColWidths[3] = 112; dxfGrid->ColWidths[4] = 78; dxfGrid->ColWidths[5] = 65; dxfGrid->ColWidths[6] = 58; dxfGrid->ColWidths[7] = 58; dxfGrid->ColWidths[8] = 58; dxfGrid->ColWidths[9] = 56; dxfGrid->RowHeights[0] = 18; dxfGrid->RowHeights[1] = 137; SetCaption(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::SetCaption() { Caption = IDS_TITLE; rztoolbtnSave->Caption = IDS_SAVE; rztoolbtnLoad->Caption = IDS_LOAD; rztoolbtnPrint->Caption = IDS_PRINT; btnPrintOption->Caption = IDS_PRINTEROPTION; rztoolbtnDXFPath->Caption = IDS_SETDXFPATH; rztoolbtnDXF->Caption = IDS_EXPORTDXFFILE; btnClose->Caption = IDS_CLOSE; rztoolbtnInit->Caption = IDS_INITIALIZATION; miClear->Caption = IDS_CLEAR; miOpen->Caption = IDS_OPEN; miMerge->Caption = IDS_MERGE; top0Grid->Cells[0][0] = IDS_STYLENO; top1LeftGrid->Cells[0][0] = IDS_REQUEST_DATE; top1RightGrid->Cells[0][0] = IDS_END_DATE; top2LeftGrid->Cells[0][0] = IDS_DESIGNER; top2RightGrid->Cells[0][0] = IDS_PATTERNER; sbDesignPanel->Caption = IDS_DESIGN; sbMaterialPanel->Caption = IDS_MATERIAL; rzpnlMaterial1->Caption = IDS_OUTER; rzpnlMaterial2->Caption = IDS_LINING; rzpnlMaterial3->Caption = IDS_WICK; for (int i = 0; i < MaterialGrid->RowCount; i+=4) { MaterialGrid->Cells[0][i] = IDS_A; MaterialGrid->Cells[0][i+1] = IDS_B; MaterialGrid->Cells[0][i+2] = IDS_C; MaterialGrid->Cells[0][i+3] = IDS_D; } sbSubMaterialPane->Caption = IDS_SUBMATERIAL; subMaterialGrid->Cells[0][0] = IDS_TYPE; subMaterialGrid->Cells[1][0] = IDS_NUMBER; subMaterialGrid->Cells[2][0] = IDS_SIZE; subMaterialGrid->Cells[3][0] = IDS_PART; sbSizePanel->Caption = IDS_SIZE55BASE; rzpnlUpperSize->Caption = IDS_UPPER; rzpnlLowerSize->Caption = IDS_BOTTOMS; upperSizeGrid->Cells[0][0] = IDS_TOTALLENGTH; upperSizeGrid->Cells[0][1] = IDS_CHEST; upperSizeGrid->Cells[0][2] = IDS_WAIST; upperSizeGrid->Cells[0][3] = IDS_HEM; upperSizeGrid->Cells[0][4] = IDS_SHOULDER; upperSizeGrid->Cells[0][5] = IDS_SLEEVELENGTH; upperSizeGrid->Cells[0][6] = IDS_SLEEVEWIDTH; upperSizeGrid->Cells[0][7] = IDS_SLEEVEENDWIDTH; lowerSizeGrid->Cells[0][0] = IDS_BOTTOMSLENGTH; lowerSizeGrid->Cells[0][1] = IDS_BOTTOMSWAIST; lowerSizeGrid->Cells[0][2] = IDS_HIP; lowerSizeGrid->Cells[0][3] = IDS_THIGH; lowerSizeGrid->Cells[0][4] = IDS_KNEE; lowerSizeGrid->Cells[0][5] = IDS_BOTTOMSHEM; lowerSizeGrid->Cells[0][6] = IDS_FRONTSIDECHAIRSET; lowerSizeGrid->Cells[0][7] = IDS_BACKSIDECHAIRSET; lowerSizeGrid->Cells[0][8] = IDS_BELT; rzpnlDesign->Caption = IDS_DESIGN2; rzpnlPattern->Caption = IDS_SPECIFICATION; // °¡·Î Ãâ·ÂÀ¸·Î ÇÁ¸°ÅÍ ¼³Á¤ Printer()->Orientation = poLandscape; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::InitForm(TCombinationData *ACombiData) { // ÂüÁ¶ÇÏÁö ¾Ê°í, º¹»çÇÏ¿© »ç¿ëÇÑ´Ù if (ACombiData) CombiData->CopyFrom(ACombiData); SetInformation(false); MakeStyleImage(); MakePartImageList(); MakeDXFDataList(); MakeDXFImageList(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::InitData() { // µ¥ÀÌÅÍ ÃʱâÈ­ // »õ·Î ¸¸µé¾î¼­ ÃʱâÈ­ÇÑ´Ù if (CombiData) delete CombiData; CombiData = new TCombinationData; top0Grid->Cells[1][0] = ""; top1LeftGrid->Cells[1][0] = ""; top1RightGrid->Cells[1][0] = ""; top2LeftGrid->Cells[1][0] = ""; top2RightGrid->Cells[1][0] = ""; for (int i = 0; i < MaterialGrid->RowCount; i++) { MaterialGrid->Cells[1][i] = ""; } for (int y = 1; y < subMaterialGrid->RowCount; y++) { for (int x = 0; x < subMaterialGrid->ColCount; x++) { subMaterialGrid->Cells[x][y] = ""; } } for (int i = 0; i < upperSizeGrid->RowCount; i++) { upperSizeGrid->Cells[1][i] = ""; } for (int i = 0; i < lowerSizeGrid->RowCount; i++) { lowerSizeGrid->Cells[1][i] = ""; } TitleBitmap->Destroy(); DrawTexpiaBitmap(imgTitle, TitleBitmap, NULL); PatternBitmap->Destroy(); VecDraw->ClearDataList(PatternVectorDataList); DrawTexpiaBitmap(imgPattern, PatternBitmap, PatternVectorDataList); SetInformation(false); MakeStyleImage(); MakePartImageList(); MakeDXFDataList(); MakeDXFImageList(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::FormDestroy(TObject *Sender) { if (CombiData) delete CombiData; CombiData = NULL; ClearImageList(PartImageList); ClearImageList(DXFImageList); VecDraw->ClearDataList(PatternVectorDataList); ClearDXFDataList(); if (DXFImageList) delete DXFImageList; DXFImageList = NULL; if (PatternVectorDataList) delete PatternVectorDataList; PatternVectorDataList = NULL; if (TitleBitmap) delete TitleBitmap; TitleBitmap = NULL; if (PatternBitmap) delete PatternBitmap; PatternBitmap = NULL; if (PartImageList) delete PartImageList; PartImageList = NULL; if (DXFDataList )delete DXFDataList; DXFDataList = NULL; if (CombiData) delete CombiData; CombiData = NULL; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::StringGridDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { UINT uFormat; SIZE size; TRzStringGrid* StringGrid = NULL; StringGrid = dynamic_cast(Sender); if (StringGrid) { String CellText; StringGrid->Canvas->Pen->Color = clBlack; StringGrid->Canvas->Font->Color = clBlack; if (subMaterialGrid != StringGrid && ACol % 2 == 0) { // ¦¼öÀÇ °æ¿ì FixedColÀÌÁö¸¸, subMaterialGrid´Â ¿¹¿Ü·Î ÇÑ´Ù StringGrid->Canvas->Brush->Color = clBtnFace; if (upperSizeGrid != StringGrid && lowerSizeGrid != StringGrid) { StringGrid->Canvas->Font->Style = TFontStyles() << fsBold; } else { StringGrid->Canvas->Font->Style = TFontStyles() >> fsBold; } } else { StringGrid->Canvas->Brush->Color = clWhite; StringGrid->Canvas->Font->Style = TFontStyles() >> fsBold; } StringGrid->Canvas->FillRect(Rect); //À̰÷Àº µ¦½ºÆ®ÀÛ¾÷ ¿µ¿ª CellText = StringGrid->Cells[ACol][ARow]; GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), _tcslen(CellText.c_str()), &size); if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(StringGrid->Canvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::StringGridMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { TRzStringGrid *StringGrid = NULL; StringGrid = dynamic_cast(Sender); if (StringGrid) StringGrid->SetFocus(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::top0GridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Æ÷Ä¿½º À̵¿ if (Key == VK_RETURN) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) top1LeftGrid->Col = 1; top1LeftGrid->SetFocus(); } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::top1LeftGridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Æ÷Ä¿½º À̵¿ if (Key == VK_RETURN) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) top1RightGrid->Col = 1; top1RightGrid->SetFocus(); } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::top1RightGridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Æ÷Ä¿½º À̵¿ if (Key == VK_RETURN) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) top2LeftGrid->Col = 1; top2LeftGrid->SetFocus(); } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::top2LeftGridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Æ÷Ä¿½º À̵¿ if (Key == VK_RETURN) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) top2RightGrid->Col = 1; top2RightGrid->SetFocus(); } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::top2RightGridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Æ÷Ä¿½º À̵¿ if (Key == VK_RETURN) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) MaterialGrid->Col = 1; MaterialGrid->Row = 0; MaterialGrid->SetFocus(); } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::MaterialGridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Æ÷Ä¿½º À̵¿ if (Key == VK_RETURN) { if (MaterialGrid->Row < MaterialGrid->RowCount-1) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) MaterialGrid->Row++; MaterialGrid->SetFocus(); } else if (MaterialGrid->Row == MaterialGrid->RowCount-1) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) subMaterialGrid->Col = 0; subMaterialGrid->Row = 1; subMaterialGrid->SetFocus(); } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::subMaterialGridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Æ÷Ä¿½º À̵¿ if (Key == VK_RETURN) { if (subMaterialGrid->Col < subMaterialGrid->ColCount-1) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) subMaterialGrid->Col++; subMaterialGrid->SetFocus(); } else if (subMaterialGrid->Col == subMaterialGrid->ColCount-1) { if (subMaterialGrid->Row < subMaterialGrid->RowCount-1) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) subMaterialGrid->Col = 0; subMaterialGrid->Row++; subMaterialGrid->SetFocus(); } else if (subMaterialGrid->Row == subMaterialGrid->RowCount-1) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) upperSizeGrid->Col = 1; upperSizeGrid->Row = 0; upperSizeGrid->SetFocus(); } } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::upperSizeGridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Æ÷Ä¿½º À̵¿ if (Key == VK_RETURN) { if (upperSizeGrid->Row < upperSizeGrid->RowCount-1) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) upperSizeGrid->Row++; upperSizeGrid->SetFocus(); } else if (upperSizeGrid->Row == upperSizeGrid->RowCount-1) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) lowerSizeGrid->Col = 1; lowerSizeGrid->Row = 0; lowerSizeGrid->SetFocus(); } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::lowerSizeGridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { // Æ÷Ä¿½º À̵¿ if (Key == VK_RETURN) { if (lowerSizeGrid->Row < lowerSizeGrid->RowCount-1) { Application->ProcessMessages(); // ÀÔ·ÂÁßÀÌ´ø ±ÛÀ» ¸¶¹«¸® ½ÃÅ´ - by monkman (2011.02.24) lowerSizeGrid->Row++; lowerSizeGrid->SetFocus(); } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::rzstrgrdStyleDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { UINT uFormat; tagSIZE size; TRzStringGrid *StringGrid = dynamic_cast(Sender); Graphics::TBitmap *bmpPart = NULL; String CellText; //text¸¦ È­¸é¿¡ Ç¥½ÃÇÒ ¶§ drawcellÀ» ÀÌ¿ëÇØ¾ß ÇÒ °Í °°´Ù. //ÀÌÀ¯: text¸¦ cellÀÇ center¿¡ º¸À̵µ·Ï ó¸® ÇÏ´Â ¹æ¹ýÀÌ ¾ø´Ù. //ÀÔ·ÂÇÏ´Â °ÍÀº ±âÁ¸ stringgrid cell ¼±ÅÃÇØ¼­ ÀÔ·ÂÇϵµ·Ï ÇÑ´Ù. if (StringGrid) { StringGrid->Canvas->Pen->Color = clBlack; StringGrid->Canvas->Font->Color = clBlack; if (ARow == 0 || ARow == 1) { if (ARow == 0) { StringGrid->Canvas->Brush->Color = clBtnFace; StringGrid->Canvas->Font->Style = TFontStyles() << fsBold; } else if (ARow == 1) { StringGrid->Canvas->Brush->Color = clWhite; StringGrid->Canvas->Font->Style = TFontStyles() >> fsBold; } StringGrid->Canvas->FillRect(Rect); CellText = StringGrid->Cells[ACol][ARow]; GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), _tcslen(CellText.c_str()), &size); //if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; //else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(StringGrid->Canvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } } else if (ARow == 2) { // ½ºÅ¸ÀÏ À̹ÌÁö ±×·ÁÁÖ±â if (ACol < PartImageList->Count) { bmpPart = (Graphics::TBitmap *)PartImageList->Items[ACol]; if (bmpPart) BitBlt(StringGrid->Canvas->Handle, Rect.left, Rect.top, Rect.right, Rect.Bottom, bmpPart->Canvas->Handle, 0, 0, SRCCOPY); } } } } //--------------------------------------------------------------------------- // TODO : ±¸ÇöÇØ¾ßÇÒ ºÎºÐ void __fastcall TWorkSheetForm::rzstrgrdStyleMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int ACol,ARow; rzstrgrdStyle->MouseToCell(X, Y, ACol, ARow); miClear->Visible = false; miOpen->Visible = false; miMerge->Visible = false; if (ARow == 2) { if (CombiData) { if (CombiData->Type != TP_PANTS && CombiData->Type != TP_SKIRT) { // »óÀÇ if ((ACol == 0 && 0 < CombiData->UpperSilhouetteFrontDataList->Count && 0 < CombiData->UpperSilhouetteBackDataList->Count) || (ACol == 1 && 0 < CombiData->UpperCollarFrontDataList->Count && 0 < CombiData->UpperCollarBackDataList->Count) || (ACol == 2 && 0 < CombiData->UpperSleeveFrontDataList->Count && 0 < CombiData->UpperSleeveBackDataList->Count)) { miClear->Visible = false; miOpen->Visible = true; miMerge->Visible = true; } else if (3 <= ACol && ACol <= 9 && 0 < CombiData->MaterialDataList[ACol-3]->Count) { miClear->Visible = false; miOpen->Visible = true; miMerge->Visible = true; } } else { // ÇÏÀÇ if ((ACol == 0 && 0 < CombiData->LowerSilhouetteFrontDataList->Count && 0 < CombiData->LowerSilhouetteBackDataList->Count) || (ACol == 1 && 0 < CombiData->LowerBeltFrontDataList->Count && 0 < CombiData->LowerBeltBackDataList->Count)) { miClear->Visible = false; miOpen->Visible = true; miMerge->Visible = true; } else if (3 <= ACol && ACol <= 9 && 0 < CombiData->MaterialDataList[ACol-3]->Count) { miClear->Visible = false; miOpen->Visible = true; miMerge->Visible = true; } } } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::dxfGridDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { //text¸¦ È­¸é¿¡ Ç¥½ÃÇÒ ¶§ drawcellÀ» ÀÌ¿ëÇØ¾ß ÇÒ °Í °°´Ù. //ÀÌÀ¯: text¸¦ cellÀÇ center¿¡ º¸À̵µ·Ï ó¸® ÇÏ´Â ¹æ¹ýÀÌ ¾ø´Ù. //ÀÔ·ÂÇÏ´Â °ÍÀº ±âÁ¸ stringgrid cell ¼±ÅÃÇØ¼­ ÀÔ·ÂÇϵµ·Ï ÇÑ´Ù. UINT uFormat; SIZE size; TRzStringGrid *StringGrid = dynamic_cast(Sender); String CellText; Graphics::TBitmap *bmpDXF = NULL; if (StringGrid) { if (ARow == 0) { StringGrid->Canvas->Pen->Color = clBlack; StringGrid->Canvas->Font->Color = clBlack; StringGrid->Canvas->Brush->Color = clBtnFace; StringGrid->Canvas->Font->Style = TFontStyles() << fsBold; StringGrid->Canvas->FillRect(Rect); //À̰÷Àº ÅØ½ºÆ®ÀÛ¾÷ ¿µ¿ª CellText = StringGrid->Cells[ACol][ARow]; GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), _tcslen(CellText.c_str()), &size); if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(StringGrid->Canvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } } else if (ARow == 1) { // ½ºÅ¸ÀÏ À̹ÌÁö ±×·ÁÁÖ±â if (ACol < DXFImageList->Count) { bmpDXF = (Graphics::TBitmap * )DXFImageList->Items[ACol]; if (bmpDXF) BitBlt(StringGrid->Canvas->Handle, Rect.left, Rect.top, Rect.right, Rect.Bottom, bmpDXF->Canvas->Handle, 0, 0, SRCCOPY); } } } } //--------------------------------------------------------------------------- // TODO : ±¸ÇöÇØ¾ßÇÒ ºÎºÐ void __fastcall TWorkSheetForm::dxfGridMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int ACol,ARow; TDXFData *dxfData = NULL; dxfGrid->MouseToCell(X, Y, ACol, ARow); miClear->Visible = false; miOpen->Visible = false; miMerge->Visible = false; if (ARow == 1) { if (CombiData) { if (0 <= ACol && ACol < DXFDataList->Count) { dxfData = (TDXFData *)DXFDataList->Items[ACol]; if (0 < dxfData->VectorList->Count) { miClear->Visible = false; miOpen->Visible = true; miMerge->Visible = true; } } } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::SetInformation(bool bFileLoad) { // ÃʱâÈ­ for (int i = 0; i < rzstrgrdStyle->ColCount; i++) { rzstrgrdStyle->Cells[i][0] = ""; rzstrgrdStyle->Cells[i][1] = ""; rzstrgrdStyle->Cells[i][0] = ""; } // º¤ÅÍ µ¥ÀÌÅÍ·Î ºñÆ®¸Ê¿¡ °¢ ½ºÅ¸ÀÏÀÇ ±×¸²À» ±×·ÁÁØ´Ù if (CombiData) { if (bFileLoad || (CombiData->Type != TP_PANTS && CombiData->Type != TP_SKIRT)) { // »óÀÇ rzstrgrdStyle->Cells[0][0] = CombiData->UpperSilhouetteStyleID; rzstrgrdStyle->Cells[1][0] = CombiData->UpperCollarStyleID; rzstrgrdStyle->Cells[2][0] = CombiData->UpperSleeveStyleID; rzstrgrdStyle->Cells[0][1] = CombiData->UpperSilhouetteComment; rzstrgrdStyle->Cells[1][1] = CombiData->UpperCollarComment; rzstrgrdStyle->Cells[2][1] = CombiData->UpperSleeveComment; dxfGrid->Cells[0][0] = CombiData->UpperSilhouetteStyleID; dxfGrid->Cells[1][0] = CombiData->UpperCollarStyleID; dxfGrid->Cells[2][0] = CombiData->UpperSleeveStyleID; } else if (bFileLoad || CombiData->Type == TP_PANTS || CombiData->Type == TP_SKIRT) { // ÇÏÀÇ rzstrgrdStyle->Cells[0][0] = CombiData->LowerSilhouetteStyleID; rzstrgrdStyle->Cells[1][0] = CombiData->LowerBeltStyleID; rzstrgrdStyle->Cells[0][1] = CombiData->LowerSilhouetteComment; rzstrgrdStyle->Cells[1][1] = CombiData->LowerBeltComment; dxfGrid->Cells[0][0] = CombiData->LowerSilhouetteStyleID; dxfGrid->Cells[1][0] = CombiData->LowerBeltStyleID; } // ºÎÀÚÀç for (int i = 0 ; i < CELL_COUNT; i++) { rzstrgrdStyle->Cells[i+3][0] = CombiData->MaterialStyleID[i]; rzstrgrdStyle->Cells[i+3][1] = CombiData->MaterialComment[i]; dxfGrid->Cells[i+3][0] = CombiData->MaterialStyleID[i]; } // Size Á¤º¸ if (bFileLoad == false) { if (CombiData->Type != TP_PANTS && CombiData->Type != TP_SKIRT) { // »óÀÇ LoadFromSizeInfo(CombiData->UpperSilhouetteFileName+".sty", SO_SILHOUETTE); LoadFromSizeInfo(CombiData->UpperSleeveFileName+".sty", SO_SLEEVE); } else { // ÇÏÀÇ LoadFromSizeInfo(CombiData->LowerSilhouetteFileName+".sty", SO_PANTS); LoadFromSizeInfo(CombiData->LowerBeltFileName+".sty", SO_BELT); } } } } //--------------------------------------------------------------------------- bool __fastcall TWorkSheetForm::LoadFromSizeInfo(String strFileName, ESort Sort) { HANDLE hFile = NULL; STYLEDATAFILEHEADER header; DWORD dwRead; int Version; BYTE *StyleData = NULL; DWORD dwPos; DWORD dwDataSize; TVecData *data = NULL; double dSize; if (FileExists(strFileName) == false) return false; // *.sty ÆÄÀÏÀ» ¹öÀü º°·Î ÀÐ°í º¯È¯ÇÑ´Ù - by monkman (2004.03.30) if ((hFile = CreateFile(strFileName.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) goto fail; header = VecDraw->ReadSTYFileHeader(hFile, strFileName, &Version, true); if ((208 <= Version && Version <= STYSTIFileVersion) || (208 <= Version && Version <= (STYSTIFileVersion+300))) { // »óÀ§ ¹öÀü üũ - by monkman (2009.05.26) if (500 <= Version) { #ifndef NOT_STYLEDATA_LOCK // HASP°ú üũ ÇÑ´Ù if (!VecDraw->CheckSTYLock(hFile, header)) { CloseHandle(hFile); hFile = NULL; goto fail; } #endif } // ListÀÇ VecData º¹»ç if (Version == 0 || Version == 100) { // Version 100 ÀÏ °æ¿ì ¸ø Àд ¿¡·¯·Î ±ä±ÞÃß°¡ - by monkman (2005.06.10) dwDataSize = GetFileSize(hFile, NULL) - sizeof(OLDSTYLEDATAFILEHEADER); } else { dwDataSize = GetFileSize(hFile, NULL) - sizeof(STYLEDATAFILEHEADER); } if ((StyleData = (BYTE *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwDataSize))==NULL) goto fail; // ÆÄÀÏÅ©±â¸¸Å­ ¸Þ¸ð¸® ÇÒ´ç VecDraw->ReadSTYFileData(hFile, Version, StyleData, header); dwPos = 0; // data´Â Àбâ À§ÇÑ Àӽà º¯¼ö if ((data = new TVecData(0))==NULL) goto fail; for (int i = 0; i < header.Count1; i++) { // ¾ÕÆÇ VecDraw->LoadFromSTYMemory(&StyleData, &dwPos, data, Version); } for (int i = header.Count1; i < header.Count1 + header.Count2; i++) { // µÞÆÇ VecDraw->LoadFromSTYMemory(&StyleData, &dwPos, data, Version); } if (data) delete data; data = NULL; // ÀÛ¾÷Áö½Ã¼­ Size Á¤º¸ Ãß°¡ - by monkman(2011.01.18) for (int i = 0; i < upperSizeGrid->RowCount; i++) { // »óÀÇ memcpy(&dSize, StyleData+dwPos, sizeof(double)); dwPos += sizeof(double); if (Sort == SO_SILHOUETTE && i <= 4) { if (0 < dSize) upperSizeGrid->Cells[1][i] = FloatToStr(dSize); else upperSizeGrid->Cells[1][i] = ""; } else if (Sort == SO_SLEEVE && 5 <= i) { if (0 < dSize) upperSizeGrid->Cells[1][i] = FloatToStr(dSize); else upperSizeGrid->Cells[1][i] = ""; } } for (int i = 0; i < lowerSizeGrid->RowCount; i++) { // ÇÏÀÇ memcpy(&dSize, StyleData+dwPos, sizeof(double)); dwPos += sizeof(double); if (Sort == SO_PANTS && i <= 6) { if (0 < dSize) lowerSizeGrid->Cells[1][i] = FloatToStr(dSize); else lowerSizeGrid->Cells[1][i] = ""; } else if (Sort == SO_BELT && 7 <= i) { if (0 < dSize) lowerSizeGrid->Cells[1][i] = FloatToStr(dSize); else lowerSizeGrid->Cells[1][i] = ""; } } if (StyleData) { HeapFree(GetProcessHeap(), 0, StyleData); // ¸Þ¸ð¸® ÇØÁ¦ StyleData = NULL; } } if (hFile) CloseHandle(hFile); hFile = NULL; return true; fail : if (data) delete data; data = NULL; if (StyleData) HeapFree(GetProcessHeap(), 0, StyleData); // ¸Þ¸ð¸® ÇØÁ¦ StyleData = NULL; if (hFile) CloseHandle(hFile); hFile = NULL; return false; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::ClearImageList(TList *ImageList) { Graphics::TBitmap *bmpBitmap = NULL; if (ImageList) { for (int i = 0; i < ImageList->Count; i++) { bmpBitmap = (Graphics::TBitmap *)ImageList->Items[i]; if (bmpBitmap) delete bmpBitmap; bmpBitmap = NULL; } ImageList->Clear(); } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::ClearDXFDataList() { TDXFData *dxfData = NULL; for (int i = 0; i < DXFDataList->Count; i++) { dxfData = (TDXFData *)DXFDataList->Items[i]; if (dxfData) delete dxfData; dxfData = NULL; } DXFDataList->Clear(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::MakeStyleImage() { RECT rtCanvas; TList *FrontDataList = NULL, *BackDataList = NULL, *BothDataList = NULL, *MaterialList = NULL; double Zoom = 0.0; int nMaterialIndex = -1; TVecData *data = NULL; // º¤ÅÍ µ¥ÀÌÅÍ·Î ºñÆ®¸Ê¿¡ °¢ ½ºÅ¸ÀÏÀÇ ±×¸²À» ±×·ÁÁØ´Ù if (CombiData) { if (CombiData->Type != TP_PANTS &&CombiData->Type != TP_SKIRT) { // »óÀÇ FrontDataList = CombiData->UpperWholeFrontDataList; BackDataList = CombiData->UpperWholeBackDataList; } else { // ÇÏÀÇ FrontDataList = CombiData->LowerWholeFrontDataList; BackDataList = CombiData->LowerWholeBackDataList; } // ÃʱâÈ­ rtCanvas = TRect(0, 0, imgDesign->Width, imgDesign->Height); imgDesign->Canvas->Brush->Color = clWhite; imgDesign->Canvas->FillRect(rtCanvas); BothDataList = new TList; if (BothDataList) { // ¾Õ, µÞÆÇÀÇ Å©±â¿Í À§Ä¡°¡ °°¾Æ¾ß ÇϹǷΠÀӽà ¸®½ºÆ®¸¦ ¸¸µé¾î¼­ ±×¸° ÈÄ Áö¿î´Ù - by monkman (2011.02.18) for (int i = 0; i < FrontDataList->Count; i++) { data = (TVecData *)FrontDataList->Items[i]; BothDataList->Add(data); } for (int i = 0; i < BackDataList->Count; i++) { data = (TVecData *)BackDataList->Items[i]; BothDataList->Add(data); } // ¾ÕÆÇ : ¾Õ,µÞÆÇ ¿µ¿ªÀ» °è»êÇÏ¿© Å©±â¿Í À§Ä¡¸¦ ¸ÂÃá ÈÄ, ¾ÕÆÇ¸¸ ±×·ÁÁØ´Ù DrawVector(imgDesign->Canvas->Handle, BothDataList, -1, 0, 1, 1, imgDesign->Width/2-1, imgDesign->Height-1, 0.0, true); // µÞÆÇ : ¾Õ,µÞÆÇ ¿µ¿ªÀ» °è»êÇÏ¿© Å©±â¿Í À§Ä¡¸¦ ¸ÂÃá ÈÄ, µÞÆÇ¸¸ ±×·ÁÁØ´Ù DrawVector(imgDesign->Canvas->Handle, BothDataList, -1, 1, imgDesign->Width/2+1, 1, imgDesign->Width/2-1, imgDesign->Height-1, 0.0, true); // ÃʱâÈ­ rtCanvas = TRect(0, 0, imgDesign2->Width, imgDesign2->Height); imgDesign2->Canvas->Brush->Color = clWhite; imgDesign2->Canvas->FillRect(rtCanvas); // ¾ÕÆÇ : ¾Õ,µÞÆÇ ¿µ¿ªÀ» °è»êÇÏ¿© Å©±â¿Í À§Ä¡¸¦ ¸ÂÃá ÈÄ, ¾ÕÆÇ¸¸ ±×·ÁÁØ´Ù DrawVector(imgDesign2->Canvas->Handle, BothDataList, -1, 0, 1, 1, imgDesign2->Width/2-1, imgDesign2->Height, 0.0, true); // µÞÆÇ : ¾Õ,µÞÆÇ ¿µ¿ªÀ» °è»êÇÏ¿© Å©±â¿Í À§Ä¡¸¦ ¸ÂÃá ÈÄ, µÞÆÇ¸¸ ±×·ÁÁØ´Ù DrawVector(imgDesign2->Canvas->Handle, BothDataList, -1, 1, imgDesign2->Width/2+1, 1, imgDesign2->Width/2-1, imgDesign2->Height-1, 0.0, true); delete BothDataList; } } imgDesign->Repaint(); imgDesign2->Repaint(); BothDataList = NULL; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::MakePartImageList() { Graphics::TBitmap *bmpPart = NULL; int nWidth, nHeight; RECT rtPart; // ÃʱâÈ­ ClearImageList(PartImageList); // º¤ÅÍ µ¥ÀÌÅÍ·Î ºñÆ®¸Ê¿¡ °¢ ½ºÅ¸ÀÏÀÇ ±×¸²À» ±×·ÁÁØ´Ù if (CombiData) { for (int i = 0; i < rzstrgrdStyle->ColCount; i++) { nWidth = rzstrgrdStyle->ColWidths[i]; nHeight = rzstrgrdStyle->RowHeights[2]; rtPart = TRect(0, 0, nWidth, nHeight); bmpPart = new Graphics::TBitmap; bmpPart->PixelFormat = pf24bit; bmpPart->Width = nWidth; bmpPart->Height = nHeight; bmpPart->Canvas->Brush->Color = clWhite; bmpPart->Canvas->FillRect(rtPart); if (CombiData->Type != TP_PANTS && CombiData->Type != TP_SKIRT) { // »óÀÇ if (i == 0) { // »óÀÇ ½Ç·ç¿§ DrawVector(bmpPart->Canvas->Handle, CombiData->UpperSilhouetteFrontDataList, -1, -1, 1, 1, nWidth/2-1, nHeight-1, 0.0, true); DrawVector(bmpPart->Canvas->Handle, CombiData->UpperSilhouetteBackDataList, -1, -1, nWidth/2+1, 1, nWidth/2-1, nHeight-1, 0.0, true); } if (i == 1) { // »óÀÇ Ä«¶ó DrawVector(bmpPart->Canvas->Handle, CombiData->UpperCollarFrontDataList, -1, -1, 1, 1, nWidth/2-1, nHeight-1, 0.0, true); DrawVector(bmpPart->Canvas->Handle, CombiData->UpperCollarBackDataList, -1, -1, nWidth/2+1, 1, nWidth/2-1, nHeight-1, 0.0, true); } if (i == 2) { // »óÀÇ ¼Ò¸Å DrawVector(bmpPart->Canvas->Handle, CombiData->UpperSleeveFrontDataList, -1, -1, 1, 1, nWidth/2-1, nHeight-1, 0.0, true); DrawVector(bmpPart->Canvas->Handle, CombiData->UpperSleeveBackDataList, -1, -1, nWidth/2+1, 1, nWidth/2-1, nHeight, 0.0, true); } if (3 <= i) { // ºÎÀÚÀç DrawVector(bmpPart->Canvas->Handle, CombiData->MaterialDataList[i-3], -1, -1, 1, 1, nWidth-1, nHeight-1, 0.0, true); } } else { // ÇÏÀÇ if (i == 0) { // ÇÏÀÇ ½Ç·ç¿§ DrawVector(bmpPart->Canvas->Handle, CombiData->LowerSilhouetteFrontDataList, -1, -1, 1, 1, nWidth/2-1, nHeight-1, 0.0, true); DrawVector(bmpPart->Canvas->Handle, CombiData->LowerSilhouetteBackDataList, -1, -1, nWidth/2+1, 1, nWidth/2-1, nHeight-1, 0.0, true); } if (i == 1) { // ÇÏÀÇ º§Æ® DrawVector(bmpPart->Canvas->Handle, CombiData->LowerBeltFrontDataList, -1, -1, 1, 1, nWidth/2-1, nHeight-1, 0.0, true); DrawVector(bmpPart->Canvas->Handle, CombiData->LowerBeltBackDataList, -1, -1, nWidth/2+1, 1, nWidth/2-1, nHeight-1, 0.0, true); } if (3 <= i) { // ºÎÀÚÀç DrawVector(bmpPart->Canvas->Handle, CombiData->MaterialDataList[i-3], -1, -1, 1, 1, nWidth-1, nHeight-1, 0.0, true); } } PartImageList->Add(bmpPart); } } rzstrgrdStyle->Repaint(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::MakeDXFDataList() { TIniFile *IniFile = NULL; String strFileName, strDirectory; bool bResult = true; TDXFData *dxfData = NULL; IniFile = new TIniFile(AppDataItem+"\\Style.ini"); if (IniFile) { // ±âº» °æ·Î°¡ DirectoryStyle¿´À¸³ª, sty ÆÄÀÏÀÌ ¸¹À» °æ¿ì ³Ê¹« ´À·ÁÁ®¼­ TexStylist ½ÇÇàÆÄÀϰú °°Àº °æ·Î·Î º¯°æ - by monkman (2011.04.05) sDxfRootPath = IniFile->ReadString("WorkSheetForm", "RootPath", DirectoryItem); delete IniFile; } IniFile = NULL; ClearDXFDataList(); if (CombiData) { for (int i = 0; i < dxfGrid->ColCount; i++) { if (CombiData->Type != TP_PANTS && CombiData->Type != TP_SKIRT) { // »óÀÇ if (i == 0) { // »óÀÇ ½Ç·ç¿§ strFileName = ExtractFileName(CombiData->UpperSilhouetteFileName); if (!strFileName.IsEmpty()) strFileName += ".dxf"; } if (i == 1) { // »óÀÇ Ä«¶ó strFileName = ExtractFileName(CombiData->UpperCollarFileName); if (!strFileName.IsEmpty()) strFileName += ".dxf"; } if (i == 2) { // »óÀÇ ¼Ò¸Å strFileName = ExtractFileName(CombiData->UpperSleeveFileName); if (!strFileName.IsEmpty()) strFileName += ".dxf"; } if (3 <= i) { // ºÎÀÚÀç strFileName = ExtractFileName(CombiData->MaterialFileName[i-3]); if (!strFileName.IsEmpty()) strFileName += ".dxf"; } } else { // ÇÏÀÇ if (i == 0) { // ÇÏÀÇ ½Ç·ç¿§ strFileName = ExtractFileName(CombiData->LowerSilhouetteFileName); if (!strFileName.IsEmpty()) strFileName += ".dxf"; } if (i == 1) { // ÇÏÀÇ º§Æ® strFileName = ExtractFileName(CombiData->LowerBeltFileName); if (!strFileName.IsEmpty()) strFileName += ".dxf"; } if (3 <= i) { // ºÎÀÚÀç strFileName = ExtractFileName(CombiData->MaterialFileName[i-3]); if (!strFileName.IsEmpty()) strFileName += ".dxf"; } } bResult = SearchDXFFile(sDxfRootPath, strFileName, strDirectory); dxfData = new TDXFData; if (bResult) { dxfData->Path = strDirectory + strFileName; VecDraw->LoadFromDXFFile(dxfData->Path, dxfData->VectorList); } DXFDataList->Add(dxfData); } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::MakeDXFImageList() { Graphics::TBitmap *bmpDXF = NULL; int nWidth, nHeight; RECT rtPart; TDXFData *dxfData = NULL; // ÃʱâÈ­ ClearImageList(DXFImageList); // º¤ÅÍ µ¥ÀÌÅÍ·Î ºñÆ®¸Ê¿¡ °¢ ½ºÅ¸ÀÏÀÇ ±×¸²À» ±×·ÁÁØ´Ù if (CombiData) { for (int i = 0; i < dxfGrid->ColCount; i++) { nWidth = dxfGrid->ColWidths[i]; nHeight = dxfGrid->RowHeights[1]; rtPart = TRect(0, 0, nWidth, nHeight); bmpDXF = new Graphics::TBitmap; bmpDXF->PixelFormat = pf24bit; bmpDXF->Width = nWidth; bmpDXF->Height = nHeight; bmpDXF->Canvas->Brush->Color = clWhite; bmpDXF->Canvas->FillRect(rtPart); dxfData = (TDXFData *)DXFDataList->Items[i]; DrawVector(bmpDXF->Canvas->Handle, dxfData->VectorList, -1, -1, 1, 1, nWidth-1, nHeight-1, 0.0, true); DXFImageList->Add(bmpDXF); } } dxfGrid->Repaint(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::DrawVector(HDC dcDst, TList *DataList, int RangeInstNum, int DrawInstNum , int X, int Y, int W, int H, double Zoom, bool bCenter) { HPEN hOldPen = NULL , hPen = NULL; HBRUSH hOldBrush = NULL, hBrush = NULL; int nDrawMode, nFillMode, nTemp, nPenStyle; LOGBRUSH logbrush; Graphics::TBitmap *TempBitmap = NULL; int PositionX, PositionY; int px = 0, py = 0, w ,h; double rx, ry; long minx = MaxInt, miny = MaxInt, maxx = 0, maxy = 0; double maxthick = 0; TRect src; TVecData *data = NULL; HFONT font = NULL, oldfont = NULL; double CenterX, CenterY, FontZoom = 1.0; int OffsetX,OffsetY; //by linuxjun for CurvedVectorText int StartX, StartY; gdp::Graphics graphics(dcDst); // using GDI+ gdp::Point *pPoints = NULL; graphics.SetSmoothingMode(gdp::SmoothingModeHighQuality); // antialiasing if (DataList == NULL) return; for (int i = 0; i < DataList->Count; i++) { data = (TVecData *)DataList->Items[i]; if (RangeInstNum != -1) if (!data->Equal(RangeInstNum)) continue; minx = min(minx, data->First.x); minx = min(minx, data->Second.x); maxx = max(maxx, data->First.x); maxx = max(maxx, data->Second.x); miny = min(miny, data->First.y); miny = min(miny, data->Second.y); maxy = max(maxy, data->First.y); maxy = max(maxy, data->Second.y); maxthick = max(maxthick, data->PenThick); } src = Rect(minx-maxthick, miny-maxthick, maxx+maxthick, maxy+maxthick); rx = (double)W/(src.Right-src.Left); ry = (double)H/(src.Bottom-src.Top); if (rx>ry) { w = (src.Right-src.Left)*ry; h = (src.Bottom-src.Top)*ry; if (Zoom == 0.0) Zoom = double(h) / double(src.Bottom-src.Top); }else { w = (src.Right-src.Left)*rx; h = (src.Bottom-src.Top)*rx; if (Zoom == 0.0) Zoom = double(w) / double(src.Right-src.Left); } //if ((0 >= W || 0 >= H) && Zoom == 0.0) Zoom = 1.0; PositionX = src.Left; PositionY = src.Top; // Áß¾Ó if (bCenter) { px = (w - W) / 2 - X; py = (h - H) / 2 - Y; } else { px = -X; py = -Y; PositionX = 0; PositionY = 0; } for (int i = 0; i < DataList->Count; i++) { data = (TVecData *)DataList->Items[i]; if (DrawInstNum != -1) if (!data->Equal(DrawInstNum)) continue; int FirstX = (data->First.x - PositionX) * Zoom -px; int FirstY = (data->First.y - PositionY) * Zoom -py; int SecondX = (data->Second.x - PositionX) * Zoom -px; int SecondY = (data->Second.y - PositionY) * Zoom -py; int pw = data->PenThick/2; gdp::Color penColor(GetRValue(data->Color), GetGValue(data->Color), GetBValue(data->Color)); gdp::Color FillColor; FillColor = gdp::Color(GetRValue(data->Brush), GetGValue(data->Brush), GetBValue(data->Brush)); gdp::Pen ObjectPen(penColor, data->PenThick*Zoom); gdp::SolidBrush ObjectBrush(FillColor); gdp::GraphicsPath gFillPath; float *dashValues = NULL; if (data->Kind == V_TEXTBOX) { pPoints = new gdp::Point[5]; } else { if (data->bClosed && data->PenStyle == P_SOLID){ pPoints = new gdp::Point[(data->nCount+1)*3+1]; } else { pPoints = new gdp::Point[data->nCount*3+1]; } } if (data->Kind == V_TEXTBOX) { StartX = (data->StartPoint.x - PositionX) * Zoom -px; StartY = (data->StartPoint.y - PositionY) * Zoom -py; CenterX = (data->CenterPoint.x - PositionX) * Zoom-px; CenterY = (data->CenterPoint.y - PositionY) * Zoom -py; OffsetX = PositionX; OffsetY = PositionY; FontZoom = Zoom; for (int i = 0; i < 5; i++) { pPoints[i].X = (data->pList[i].x - PositionX) * Zoom -px; pPoints[i].Y = (data->pList[i].y - PositionY) * Zoom -py; } } else { for (int i = 0; i < data->nCount*3 +1; i++) { pPoints[i].X = (data->pList[i].x - PositionX) * Zoom -px; pPoints[i].Y = (data->pList[i].y - PositionY) * Zoom -py; } } if (data->bClosed && data->PenStyle == P_SOLID) { pPoints[data->nCount*3] = pPoints[0]; pPoints[data->nCount*3+1] = pPoints[1]; pPoints[data->nCount*3+2] = pPoints[2]; pPoints[data->nCount*3+3] = pPoints[3]; } nDrawMode = GetROP2(dcDst); nFillMode = GetPolyFillMode(dcDst); if (data->Kind != V_TEXTBOX && data->Kind != V_TEXT) { // Text´Â Pen°ú Brush°¡ ÇÊ¿ä¾ø´Ù logbrush.lbStyle = BS_SOLID; logbrush.lbColor = data->Brush; logbrush.lbHatch = 0; if (data->bPatternFill) { // PatternFill À϶§ - by monkman (ÇöÀç´Â TagDraw() ¿¡ PatternFillÀÌ ¾øÀ½..) }else if (data->bFill) { // ColorFill À϶§ hBrush = CreateBrushIndirect(&logbrush); hOldBrush = (HBRUSH)SelectObject(dcDst, hBrush); }else { // Fill X hOldBrush = (HBRUSH)SelectObject(dcDst, GetStockObject(NULL_BRUSH)); } if (data->bWinding) gFillPath.SetFillMode(gdp::FillModeWinding); else gFillPath.SetFillMode(gdp::FillModeAlternate); logbrush.lbColor = data->Color; // ÆæÀÇ color¸¦ À§Çؼ­... switch (data->PenStyle) { case 0: nPenStyle = int (PS_SOLID); break; case 1: nPenStyle = int (PS_DASH); break; case 2: nPenStyle = int (PS_DOT); break; case 3: nPenStyle = int (PS_DASHDOT); break; case 4: nPenStyle = int (PS_DASHDOTDOT);break; case 5: nPenStyle = P_USERSTYLE; // 2005 Vector upgrade shin 0330 int count = 0; double temp[6] = { 0, 0, 0, 0, 0, 0}; VecDraw->CheckUserDashedLine(data, temp, count); dashValues = new float[count]; for (int i = 0; i < count; i++){ dashValues[i] = temp[i]; } ObjectPen.SetDashPattern(dashValues, count); break; // DashStyleCustom = 5 } if (VecDraw->osVERSION < 2) { // 3.1, 95, 98 hPen = CreatePen(psSolid, data->PenThick* Zoom, data->Color); }else { if (data->bRound){ // win 2000, NT¿¡¼­¸¸ Á¦´ë·Î ÀÛµ¿ÇÑ´Ù ObjectPen.SetStartCap(gdp::LineCapRound); ObjectPen.SetEndCap(gdp::LineCapRound); ObjectPen.SetLineJoin(gdp::LineJoinRound); ObjectPen.SetDashStyle((gdp::DashStyle)nPenStyle); ObjectPen.SetDashCap(gdp::DashCapRound); } else { ObjectPen.SetStartCap(gdp::LineCapFlat); ObjectPen.SetEndCap(gdp::LineCapFlat); ObjectPen.SetLineJoin(gdp::LineJoinMiter); ObjectPen.SetDashStyle((gdp::DashStyle)nPenStyle); ObjectPen.SetDashCap(gdp::DashCapFlat); } } hOldPen = (HPEN)SelectObject(dcDst, hPen); } else { nTemp = data->Font.lfHeight; data->Font.lfHeight = data->Font.lfHeight * Zoom +0.5; if (data->Font.lfHeight == 0) data->Font.lfHeight = 1; } SetROP2(dcDst, R2_COPYPEN); switch (data->Kind) { case V_LINE: graphics.DrawPolygon(&ObjectPen, pPoints, data->nCount+1); break; case V_CURVE: if (data->bClosed && data->PenStyle == P_SOLID) { graphics.DrawBeziers(&ObjectPen, pPoints, (data->nCount+1)*3+1); } else { if (data->ChildList) { // 090303 embakum motiveobjects DrawMotiveObject(dcDst, data, px, py, PositionX, PositionY, Zoom); } else { graphics.DrawBeziers(&ObjectPen, pPoints, data->nCount*3+1); } } if (data->bFill) { gFillPath.AddBeziers(pPoints, data->nCount*3+1); graphics.FillPath(&ObjectBrush, &gFillPath); graphics.DrawPath(&ObjectPen,&gFillPath); } break; case V_TEXT: Char *tempstr; tempstr = (Char *)malloc(data->nCount); for (int k = 0; k < data->nCount; k++) tempstr[k] = char(data->TextString[k+1]); SetTextAlign(dcDst, TA_BOTTOM); SetTextColor(dcDst, data->Color); SetBkMode(dcDst, TRANSPARENT); font = CreateFontIndirect(&data->Font); oldfont = (HFONT)SelectObject(dcDst, font); TextOut(dcDst, FirstX, FirstY, tempstr, data->nCount); SelectObject(dcDst, oldfont); DeleteObject(font); data->Font.lfHeight = nTemp; free(tempstr); break; case V_TEXTBOX: VecDraw->DrawTextBox(dcDst, data, StartX, StartY, CenterX, CenterY, FontZoom, OffsetX, OffsetY); break; } if (data->Kind != V_TEXTBOX && data->Kind != V_TEXT) { if (dashValues) delete []dashValues; dashValues = NULL; if (pPoints) delete []pPoints; pPoints = NULL; SetROP2(dcDst, nDrawMode); SetPolyFillMode(dcDst, nFillMode); SelectObject(dcDst, hOldBrush); SelectObject(dcDst, hOldPen); if (hBrush) DeleteObject(hBrush); if (hPen) DeleteObject(hPen); } hOldPen = NULL; hOldBrush = NULL; hPen = NULL; hBrush = NULL; } pPoints = NULL; return; fail: if (pPoints) delete []pPoints; pPoints = NULL; if (data) delete data; data = NULL; return; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::DrawMotiveObject(HDC dcDst, TVecData* ParentData, int px, int py , int PositionX, int PositionY, float Zoom) { TList *tDataList = ParentData->ChildList; TVecData *data = NULL; // Ŭ·¡½º ¸â¹ö º¯¼ö¸¦ »ç¿ëÇÏÁö ¾Êµµ·Ï ÇÔ - by monkman (2009.04.01) TList *DataList = new TList; TList * ResultBezierPointList; TPointList *tempPointList; bool bSelectedLine; DPOINT firstPoint, onPoint, normalPoint, tempCurpt, tempOldpt; DPOINT *pTempList = NULL; double dInterval; TBezierPointList * BezierPointList = new TBezierPointList(); //»ý¼º BezierPointList->Init(ParentData); double CurveLength = BezierPointList->GetCurveLength(); int nSegment; int quotient = int(CurveLength/((ParentData->proportion)*(ParentData->childwidth))); if (quotient==0) quotient = 1; switch (ParentData->mode) { case 0: // ²Ë ä¿ì±â nSegment = int(CurveLength/((ParentData->proportion)*(ParentData->childwidth))); if (nSegment ==0) nSegment = 1; ParentData->gap = double(CurveLength/nSegment); ParentData->motivecount = nSegment; break; case 1: // °³¼ö ¼³Á¤ nSegment = StrToInt(ParentData->motivecount); if (nSegment ==0) nSegment = 1; ParentData->gap = double(CurveLength/nSegment); break; case 2: // °£°Ý ¼³Á¤ nSegment = int(CurveLength/ParentData->gap); if (nSegment ==0) nSegment = 1; ParentData->motivecount = nSegment; break; } int count = 1; ResultBezierPointList = BezierPointList->Calculate(ParentData, nSegment); if (!ResultBezierPointList) { delete DataList; DataList; delete BezierPointList; BezierPointList = NULL; return; } pTempList = (DPOINT *)HeapAlloc(GetProcessHeap(), 0, sizeof(DPOINT)*(nSegment*3+1)); double *tangentlist = new double[nSegment+1]; // ±â¿ï±â¸¦ °¡Áö°í ÀÖ´Â ¹è¿­ firstPoint = VecDraw->FindingNormalOnBezier(&ParentData->pList[0], 0, 0, 0); pTempList[0].x = firstPoint.x; pTempList[0].y = firstPoint.y; pTempList[1].x = firstPoint.x; pTempList[1].y = firstPoint.y; tangentlist[0] = VecDraw->FindCurveTangent(&ParentData->pList[0], 0); for(int i=0;iCount;i++) { tempPointList = (TPointList *)ResultBezierPointList->Items[i]; for(tempPointList->First();!tempPointList->IsDone();tempPointList->Next()) { dInterval = tempPointList->CurrentDouble(); // BezierCurve À§ÀÇ Á¡À§Ä¡ // onPoint = FindingPointOnBezier(&tData->pList[i*3], dInterval); // ãÀº Á¡ÀÇ NormalÀÇ À§Ä¡ (ãÀº Á¡Àº ResultBezierPointList¾È¿¡ ÀÖÀ½) normalPoint = VecDraw->FindingNormalOnBezier(&ParentData->pList[i*3], dInterval, 0, count%2); tangentlist[count] = VecDraw->FindCurveTangent(&ParentData->pList[i*3], dInterval); pTempList[count*3 - 2] = pTempList[count*3 - 3]; pTempList[count*3 - 1].x = normalPoint.x; pTempList[count*3 - 1].y = normalPoint.y; pTempList[count*3].x = normalPoint.x; pTempList[count*3].y = normalPoint.y; count++; tempOldpt = tempCurpt; } } if (ParentData->bClosed){ // ´ÝÈù ¿ÀºêÁ§Æ®ÀÇ °æ¿ì ³¡Á¡°ú ùÁ¡À» °°°Ô. pTempList[nSegment*3] = pTempList[0]; pTempList[nSegment*3 - 1] = pTempList[0]; } delete BezierPointList; BezierPointList = NULL; ///////////////////////////////////////////////////// HPEN hOldPen = NULL , hPen = NULL; HBRUSH hOldBrush = NULL, hBrush = NULL; int nDrawMode, nFillMode, nTemp, nPenStyle; LOGBRUSH logbrush; Graphics::TBitmap *TempBitmap = NULL; TRect src; gdp::Graphics graphics(dcDst); // using GDI+ gdp::Point *pPoints = NULL; graphics.SetSmoothingMode(gdp::SmoothingModeHighQuality); // antialiasing ///////////////////////////////////////////////////// TVecData *tdata; // motive childÀÇ È®´ë Ãà¼Ò for (int i =0; i < tDataList->Count; i++) { data = (TVecData *)tDataList->Items[i]; tdata = new TVecData(data->GetInstNum()); tdata->Copy(data); tdata->bSelected = data->bSelected; // º¹»ç ºÙ¿©³Ö±â ½Ã º¸¿©Áöµµ·Ï - by monkman (2009.04.02) for (int l = 0; l < data->nCount*3 +1; l++) { tdata->pList[l].x = (data->pList[l].x - ParentData->centerX) * ParentData->proportion + ParentData->centerX; tdata->pList[l].y = (data->pList[l].y - ParentData->centerY) * ParentData->proportion + ParentData->centerY; } DataList->Add(tdata); } ///////////////////////////////////////////////////// for (int k = 0; k < nSegment; k++) { for (int i = 0; i < DataList->Count; i++) { data = (TVecData *)DataList->Items[i]; for (int l = 0; l < data->nCount*3 +1; l++) { data->pList[l].x = data->pList[l].x - ParentData->centerX + pTempList[3*k].x; data->pList[l].y = data->pList[l].y - ParentData->centerY + pTempList[3*k].y; } for (int l = 0; l < data->nCount*3 +1; l++) { double dx = data->pList[l].x - pTempList[3*k].x; double dy = data->pList[l].y - pTempList[3*k].y; data->pList[l].x = dx*cos(tangentlist[k]) - dy*sin(tangentlist[k]) + pTempList[3*k].x; data->pList[l].y = dx*sin(tangentlist[k]) + dy*cos(tangentlist[k]) + pTempList[3*k].y; } SET_RECT; //gradientfill int FirstX = (data->First.x - PositionX) * Zoom -px; int FirstY = (data->First.y - PositionY) * Zoom -py; int SecondX = (data->Second.x - PositionX) * Zoom -px; int SecondY = (data->Second.y - PositionY) * Zoom -py; int pw = data->PenThick/2; gdp::Color penColor(GetRValue(data->Color), GetGValue(data->Color), GetBValue(data->Color)); gdp::Color FillColor; FillColor = gdp::Color(GetRValue(data->Brush), GetGValue(data->Brush), GetBValue(data->Brush)); gdp::Pen ObjectPen(penColor, data->PenThick*Zoom); gdp::SolidBrush ObjectBrush(FillColor); gdp::GraphicsPath gFillPath; float *dashValues = NULL; if (data->Kind == V_TEXTBOX) { pPoints = new gdp::Point[5]; } else { if (data->bClosed){ pPoints = new gdp::Point[(data->nCount+1)*3+1]; } else { pPoints = new gdp::Point[data->nCount*3+1]; } } // TEXTBOX ¼öÁ¤½Ã ÀÌ ºÎºÐÀ» ¼öÁ¤ - by monkman if (data->Kind != V_TEXTBOX) { for (int i = 0; i < data->nCount*3 +1; i++) { pPoints[i].X = (data->pList[i].x - PositionX) * Zoom -px; pPoints[i].Y = (data->pList[i].y - PositionY) * Zoom -py; } } if (data->bClosed && data->PenStyle == P_SOLID) { pPoints[data->nCount*3] = pPoints[0]; pPoints[data->nCount*3+1] = pPoints[1]; pPoints[data->nCount*3+2] = pPoints[2]; pPoints[data->nCount*3+3] = pPoints[3]; } nDrawMode = GetROP2(dcDst); nFillMode = GetPolyFillMode(dcDst); logbrush.lbStyle = BS_SOLID; logbrush.lbColor = data->Brush; logbrush.lbHatch = 0; if (data->bPatternFill) { }else if (data->bFill) { // ColorFill À϶§ hBrush = CreateBrushIndirect(&logbrush); hOldBrush = (HBRUSH)SelectObject(dcDst, hBrush); }else { // Fill X hOldBrush = (HBRUSH)SelectObject(dcDst, GetStockObject(NULL_BRUSH)); } if (data->bWinding) gFillPath.SetFillMode(gdp::FillModeWinding); else gFillPath.SetFillMode(gdp::FillModeAlternate); logbrush.lbColor = data->Color; // ÆæÀÇ color¸¦ À§Çؼ­... switch (data->PenStyle) { case 0: nPenStyle = int (PS_SOLID); break; case 1: nPenStyle = int (PS_DASH); break; case 2: nPenStyle = int (PS_DOT); break; case 3: nPenStyle = int (PS_DASHDOT); break; case 4: nPenStyle = int (PS_DASHDOTDOT);break; case 5: nPenStyle = P_USERSTYLE; // 2005 Vector upgrade shin 0330 int count = 0; double temp[6] = { 0, 0, 0, 0, 0, 0}; VecDraw->CheckUserDashedLine(data, temp, count); dashValues = new float[count]; for (int i = 0; i < count; i++){ dashValues[i] = temp[i]; } ObjectPen.SetDashPattern(dashValues, count); break; // DashStyleCustom = 5 } if (VecDraw->osVERSION < 2) { // 3.1, 95, 98 hPen = CreatePen(psSolid, data->PenThick* Zoom, data->Color); }else { if (data->bRound){ // win 2000, NT¿¡¼­¸¸ Á¦´ë·Î ÀÛµ¿ÇÑ´Ù ObjectPen.SetStartCap(gdp::LineCapRound); ObjectPen.SetEndCap(gdp::LineCapRound); ObjectPen.SetLineJoin(gdp::LineJoinRound); ObjectPen.SetDashStyle((gdp::DashStyle)nPenStyle); ObjectPen.SetDashCap(gdp::DashCapRound); } else { ObjectPen.SetStartCap(gdp::LineCapFlat); ObjectPen.SetEndCap(gdp::LineCapFlat); ObjectPen.SetLineJoin(gdp::LineJoinMiter); ObjectPen.SetDashStyle((gdp::DashStyle)nPenStyle); ObjectPen.SetDashCap(gdp::DashCapFlat); } } hOldPen = (HPEN)SelectObject(dcDst, hPen); SetROP2(dcDst, R2_COPYPEN); switch (data->Kind) { case V_LINE: graphics.DrawPolygon(&ObjectPen, pPoints, data->nCount+1); break; case V_CURVE: if (data->bClosed && data->PenStyle == P_SOLID) { graphics.DrawBeziers(&ObjectPen, pPoints, (data->nCount+1)*3+1); } else { graphics.DrawBeziers(&ObjectPen, pPoints, data->nCount*3+1); } if (data->bFill) { gFillPath.AddBeziers(pPoints, data->nCount*3+1); graphics.FillPath(&ObjectBrush, &gFillPath); graphics.DrawPath(&ObjectPen,&gFillPath); } break; } if (dashValues) delete []dashValues; dashValues = NULL; if (pPoints) delete []pPoints; pPoints = NULL; SetROP2(dcDst, nDrawMode); SetPolyFillMode(dcDst, nFillMode); SelectObject(dcDst, hOldBrush); SelectObject(dcDst, hOldPen); if (hBrush) DeleteObject(hBrush); if (hPen) DeleteObject(hPen); hOldPen = NULL; hOldBrush = NULL; hPen = NULL; hBrush = NULL; // 20090220 °¢µµº¯È¯ reverseÇÊ¿ä for (int l = 0; l < data->nCount*3 +1; l++) { double dx = data->pList[l].x - pTempList[3*k].x; double dy = data->pList[l].y - pTempList[3*k].y; data->pList[l].x = dx*cos(-tangentlist[k]) - dy*sin(-tangentlist[k]) + pTempList[3*k].x; data->pList[l].y = dx*sin(-tangentlist[k]) + dy*cos(-tangentlist[k]) + pTempList[3*k].y; } for (int l = 0; l < data->nCount*3 +1; l++) { data->pList[l].x = data->pList[l].x + ParentData->centerX - pTempList[3*k].x; data->pList[l].y = data->pList[l].y + ParentData->centerY - pTempList[3*k].y; } } } if (DataList) { for (int i = 0; i < DataList->Count; i++) { data = (TVecData *)DataList->Items[i]; delete data; } DataList->Clear(); delete DataList; DataList = NULL; } pPoints = NULL; if (tangentlist) delete[] tangentlist; tangentlist = NULL; // ¸Þ¸ð¸® ÇØÁ¦ - by monkman (2009.04.16) if (pTempList) { HeapFree(GetProcessHeap(), 0, pTempList); } pTempList = NULL; return; fail: if (pPoints) delete []pPoints; pPoints = NULL; if (data) delete data; data = NULL; if (DataList) { for (int i = 0; i < DataList->Count; i++) { data = (TVecData *)DataList->Items[i]; delete data; } DataList->Clear(); delete DataList; DataList = NULL; } if (tangentlist) delete[] tangentlist; tangentlist = NULL; // ¸Þ¸ð¸® ÇØÁ¦ - by monkman (2009.04.16) if (pTempList) { HeapFree(GetProcessHeap(), 0, pTempList); } pTempList = NULL; } //--------------------------------------------------------------------------- bool __fastcall TWorkSheetForm::SearchDXFFile(String path, String FileName, String &tPath) { if (path.IsEmpty() || FileName.IsEmpty()) return false; if (!DirectoryExists(path)) return false; String dir, fn, subPath; HANDLE hSrch; WIN32_FIND_DATA wfd; bool bResult = true; if (path.c_str()[path.Length()-1] != '\\') path += "\\"; dir = path + "*.*"; hSrch = FindFirstFile(dir.c_str(), &wfd); while(bResult) { if ((wfd.cFileName[0]!=_T('.') || lstrlen(wfd.cFileName)>2) && wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {//directory subPath = wfd.cFileName; subPath = path + subPath; if (SearchDXFFile(subPath, FileName, tPath)) { FindClose(hSrch); return true; } } else { // file fn = wfd.cFileName; fn = fn.LowerCase(); if (fn == FileName.LowerCase()) { tPath = path; FindClose(hSrch); return true; } } bResult = FindNextFile(hSrch, &wfd); } FindClose(hSrch); return false; } //--------------------------------------------------------------------------- TPException __fastcall TWorkSheetForm::SaveTextToFile(HANDLE hFile) { DWORD dwWrite; int length = 0; length = _tcslen(top0Grid->Cells[1][0].c_str()); if (!WriteFile(hFile, &length, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, top0Grid->Cells[1][0].c_str(), sizeof(Char)*length, &dwWrite, NULL)) goto fail; length = _tcslen(top1LeftGrid->Cells[1][0].c_str()); if (!WriteFile(hFile, &length, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, top1LeftGrid->Cells[1][0].c_str(), sizeof(Char)*length, &dwWrite, NULL)) goto fail; length = _tcslen(top1RightGrid->Cells[1][0].c_str()); if (!WriteFile(hFile, &length, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, top1RightGrid->Cells[1][0].c_str(), sizeof(Char)*length, &dwWrite, NULL)) goto fail; length = _tcslen(top2LeftGrid->Cells[1][0].c_str()); if (!WriteFile(hFile, &length, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, top2LeftGrid->Cells[1][0].c_str(), sizeof(Char)*length, &dwWrite, NULL)) goto fail; length = _tcslen(top2RightGrid->Cells[1][0].c_str()); if (!WriteFile(hFile, &length, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, top2RightGrid->Cells[1][0].c_str(), sizeof(Char)*length, &dwWrite, NULL)) goto fail; for (int i = 0 ; i < MaterialGrid->RowCount; i++) { length = _tcslen(MaterialGrid->Cells[1][i].c_str()); if (!WriteFile(hFile, &length, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, MaterialGrid->Cells[1][i].c_str(), sizeof(Char)*length, &dwWrite, NULL)) goto fail; } for (int y = 1 ; y < subMaterialGrid->RowCount; y++) { for (int x = 0 ; x < subMaterialGrid->ColCount; x++) { length = _tcslen(subMaterialGrid->Cells[x][y].c_str()); if (!WriteFile(hFile, &length, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, subMaterialGrid->Cells[x][y].c_str(), sizeof(Char)*length, &dwWrite, NULL)) goto fail; } } for (int i = 0 ; i < upperSizeGrid->RowCount; i++) { length = _tcslen(upperSizeGrid->Cells[1][i].c_str()); if (!WriteFile(hFile, &length, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, upperSizeGrid->Cells[1][i].c_str(), sizeof(Char)*length, &dwWrite, NULL)) goto fail; } for (int i = 0 ; i < lowerSizeGrid->RowCount; i++) { length = _tcslen(lowerSizeGrid->Cells[1][i].c_str()); if (!WriteFile(hFile, &length, sizeof(int), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, lowerSizeGrid->Cells[1][i].c_str(), sizeof(Char)*length, &dwWrite, NULL)) goto fail; } return EC_NONE; fail: return EC_FILE_NOT_WRITE; } //--------------------------------------------------------------------------- TPException __fastcall TWorkSheetForm::LoadTextFromFile(HANDLE hFile, int nVersion) { top0Grid->Cells[1][0] = LoadFromFileAnsiStrToUniStr(hFile, nVersion==100); top1LeftGrid->Cells[1][0] = LoadFromFileAnsiStrToUniStr(hFile, nVersion==100); top1RightGrid->Cells[1][0] = LoadFromFileAnsiStrToUniStr(hFile, nVersion==100); top2LeftGrid->Cells[1][0] = LoadFromFileAnsiStrToUniStr(hFile, nVersion==100); top2RightGrid->Cells[1][0] = LoadFromFileAnsiStrToUniStr(hFile, nVersion==100); for (int i = 0 ; i < MaterialGrid->RowCount; i++) { MaterialGrid->Cells[1][i] = LoadFromFileAnsiStrToUniStr(hFile, nVersion==100); } for (int y = 1 ; y < subMaterialGrid->RowCount; y++) { for (int x = 0 ; x < subMaterialGrid->ColCount; x++) { subMaterialGrid->Cells[x][y] = LoadFromFileAnsiStrToUniStr(hFile, nVersion==100); } } for (int i = 0 ; i < upperSizeGrid->RowCount; i++) { upperSizeGrid->Cells[1][i] = LoadFromFileAnsiStrToUniStr(hFile, nVersion==100); } for (int i = 0 ; i < lowerSizeGrid->RowCount; i++) { lowerSizeGrid->Cells[1][i] = LoadFromFileAnsiStrToUniStr(hFile, nVersion==100); } return EC_NONE; fail: return EC_FILE_NOT_WRITE; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::rztoolbtnSaveClick(TObject *Sender) { HANDLE hFile = NULL; TDXFData *dxfData = NULL; DWORD dwWrite; int length = 0; int nWidth, nHeight; if (SaveDialog->Execute()) { if (FileExists(SaveDialog->FileName)) { if (MessageDlg(IDS_FILE_OVERWRITE, mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrNo) return; } if ((hFile = CreateFile(SaveDialog->FileName.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE) { if (!CombiData->SaveToFile(hFile)) goto fail; SaveTextToFile(hFile); // DXF ÀúÀå for (int i = 0; i < dxfGrid->ColCount; i++) { dxfData = (TDXFData *)DXFDataList->Items[i]; dxfData->SaveToFile(hFile); } // ÆÐÅÏ À̹ÌÁö if (PatternBitmap) { nWidth = PatternBitmap->Width; nHeight = PatternBitmap->Height; } else { nWidth = 0; nHeight = 0; } if (!WriteFile(hFile, &nWidth, sizeof(nWidth), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, &nHeight, sizeof(nHeight), &dwWrite, NULL)) goto fail; if (0 < nWidth && 0 < nHeight) { if (!PatternBitmap->SaveToTexpiaFile(hFile, cmZLib)) goto fail; } // ÆÐÅÏ º¤ÅÍ if (!VecDraw->SaveToFile(hFile, PatternVectorDataList, 1, TexStylistFileVersion, 0)) goto fail; // ŸÀÌÆ² À̹ÌÁö if (TitleBitmap) { nWidth = TitleBitmap->Width; nHeight = TitleBitmap->Height; } else { nWidth = 0; nHeight = 0; } if (!WriteFile(hFile, &nWidth, sizeof(nWidth), &dwWrite, NULL)) goto fail; if (!WriteFile(hFile, &nHeight, sizeof(nHeight), &dwWrite, NULL)) goto fail; if (0 < nWidth && 0 < nHeight) { if (!TitleBitmap->SaveToTexpiaFile(hFile, cmZLib)) goto fail; } CloseHandle(hFile); } } hFile = NULL; return; fail: if (hFile) CloseHandle(hFile); hFile = NULL; return; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::rztoolbtnLoadClick(TObject *Sender) { HANDLE hFile = NULL; TCombinationData *LoadCombiData = NULL; TDXFData *dxfData = NULL; DWORD dwRead; int nWidth, nHeight; TGraphicFileFormat ExtIndex = gffNON; bool bHasVector = false; int nVersion = -1; LoadCombiData = new TCombinationData; if (OpenDialog->Execute()) { if ((hFile = CreateFile(OpenDialog->FileName.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE) { if ((nVersion = LoadCombiData->LoadFromFile(hFile)) < 0) goto fail; LoadTextFromFile(hFile, nVersion); ClearDXFDataList(); // DXF ·Îµå for (int i = 0; i < dxfGrid->ColCount; i++) { dxfData = new TDXFData; dxfData->LoadFromFile(hFile); DXFDataList->Add(dxfData); } // ÆÐÅÏ À̹ÌÁö if (!ReadFile(hFile, &nWidth, sizeof(nWidth), &dwRead, NULL)) goto fail; if (!ReadFile(hFile, &nHeight, sizeof(nHeight), &dwRead, NULL)) goto fail; PatternBitmap->Destroy(); // ÃʱâÈ­ if (0 < nWidth && 0 < nHeight) { if (!PatternBitmap->Create(nWidth, nHeight, 24)) goto fail; // 24bit ºñÆ®¸ÊÀ» ´Ù½Ã ¸¸µç´Ù if (!PatternBitmap->LoadFromTexpiaFile(hFile, cmZLib)) goto fail; } // ÆÐÅÏ º¤ÅÍ if (!ReadFile(hFile, &bHasVector, sizeof(bool), &dwRead, NULL)) goto fail; VecDraw->ClearDataList(PatternVectorDataList); // ÃʱâÈ­ if (bHasVector) { if (!VecDraw->LoadFromFile(hFile, PatternVectorDataList)) goto fail; } // ŸÀÌÆ² À̹ÌÁö if (!ReadFile(hFile, &nWidth, sizeof(nWidth), &dwRead, NULL)) goto fail; if (!ReadFile(hFile, &nHeight, sizeof(nHeight), &dwRead, NULL)) goto fail; TitleBitmap->Destroy(); // ÃʱâÈ­ if (0 < nWidth && 0 < nHeight) { if (!TitleBitmap->Create(nWidth, nHeight, 24)) goto fail; // 24bit ºñÆ®¸ÊÀ» ´Ù½Ã ¸¸µç´Ù if (!TitleBitmap->LoadFromTexpiaFile(hFile, cmZLib)) goto fail; } CloseHandle(hFile); // Àß ·ÎµåµÇ¾úÀ¸¹Ç·Î ´ëü CombiData->CopyFrom(LoadCombiData); // ´Ù½Ã ¼³Á¤ SetInformation(true); MakeStyleImage(); MakePartImageList(); MakeDXFImageList(); // ÆÐÅÏ À̹ÌÁö ±×¸®±â DrawTexpiaBitmap(imgTitle, TitleBitmap, NULL); DrawTexpiaBitmap(imgPattern, PatternBitmap, PatternVectorDataList); } } if (LoadCombiData) delete LoadCombiData; LoadCombiData = NULL; hFile = NULL; return; fail: if (LoadCombiData) delete LoadCombiData; LoadCombiData = NULL; if (hFile) CloseHandle(hFile); hFile = NULL; return; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::rztoolbtnDXFClick(TObject *Sender) { /* ResetDxfImageList(); String path, filename, rtstring; path = "C:\\Pattern\\texstylist_test_sample"; bool brt = false; for (int i = 1; i < 8; i++) { filename = IntToStr(i) + ".dxf"; brt = SearchDxfFile(path, filename, rtstring); if (brt) LoadDxfFile(rtstring, filename); } dxfGrid->Refresh(); */ String strFileName; TDXFData *dxfData = NULL; ExportDXFForm = new TExportDXFForm(this); if (ExportDXFForm) { for (int i = 0; i < DXFDataList->Count; i++) { dxfData = (TDXFData *)DXFDataList->Items[i]; strFileName = ExtractFileName(dxfData->Path); ExportDXFForm->AddPath(strFileName); } ExportDXFForm->Init(top0Grid->Cells[1][0]); ExportDXFForm->ShowModal(); delete ExportDXFForm; } ExportDXFForm = NULL; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::rztoolbtnDXFPathClick(TObject *Sender) { sDxfRootPath = BaseDirectoryDialogFunc("WorkSheetForm", sDxfRootPath); MakeDXFDataList(); MakeDXFImageList(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::ExecuteFileManager() { TFileManagerForm *Form; #ifndef LOCK_CRYPKEY #ifdef LOCK_IFC if (ProtectCard->CheckPassword()) { #else if (ProtectCard->isHacked(hsTexStylist, TexStylistVersion)) { EXCEPTION_MESSAGE_OK(EC_HASPKEYNOTFOUND); Application->Terminate(); } #endif #endif if ((Form = new TFileManagerForm(this)) == NULL) goto fail; if (MainImageForm) { Form->Extension = MainImageForm->iMainImage->uBitmap->BitsPerPixel; } else { Form->Extension = 8; } Form->CompressCheckBox->Enabled = false; Form->CompressCheckBox->Checked = false; Form->FilterComboBox->Filter = "Texpro Textile 256 Colors File (*.tex)|*.tex|" "Texpro Textile Full Colors File (*.tfc)|*.tfc|" // T3D ÆÄÀÏ ¸·À½ - by monkman (2005.09.12) /* #ifndef N_3D "Texpro Textile 3D File (*.t3d)|*.t3d|" #endif */ "Texpro Weave File (*.wea)|*.wea|" "Texpro Weave File - V7.01 (*.wav)|*.wav|" "Texpro Knit File (*.knt)|*.knt|" "Texpro Vector File (*.vst)|*.vst|" "Microsoft Windows Bitmap (*.bmp)|*.bmp|" "JPEG (*.jpg)|*.jpg|" "Macintosh PICT (*.pct)|*.pct|" "PC Paintbrush File Format (*.pcx)|*.pcx|" "PNG (*.png)|*.png|PSD (*.psd)|*.psd|" "SUN Raster (*.ras)|*.ras|" "Targa Image File (*.tga)|*.tga|" "TIFF uncomp (*.tif)|*.tif|" "Encapsulated PostScript File (*.eps)|*.eps|" "Drawing Interchange File Format (*.dxf)|*.dxf|" "Scalable Vector Graphics (*.svg)|*.svg|" "Texpro Textile 256 Colors File - V1.3 Vector(*.tex)|*.tex|" "Texpro Textile Full Colors File - V1.3 Vector(*.tfc)|*.tfc|" "Texpro Vector File - V1.3 (*.vst)|*.vst|" "ALL Files (*.*)|*.*|"; //================================================================= Form->OnRead = LoadFromTexpiaBitmap; Form->OnFileName = MainForm->FMOnFileName; Form->rztbMerge->Enabled = false; Form->rztbSave->Enabled = false; Form->rztbSaveAs->Enabled = false; Form->OnSave = NULL; Form->OnMerge = NULL; Form->ShowModal(); delete Form; if (CurrentImageType == itTitle) { // TitleImage DrawTexpiaBitmap(imgTitle, TitleBitmap, NULL); } else if (CurrentImageType == itPattern) { // PatternImage DrawTexpiaBitmap(imgPattern, PatternBitmap, PatternVectorDataList); } #ifndef LOCK_CRYPKEY #ifdef LOCK_IFC } else { EXCEPTION_MESSAGE_OK(EC_INTERFACE_NONE); Application->Terminate(); } #endif #endif return; fail: EXCEPTION_MESSAGE_OK(EC_FORM_NOT_CREATE); } //--------------------------------------------------------------------------- TPException __fastcall TWorkSheetForm::LoadFromTexpiaBitmap(TFMReadParameter rp, bool changeFileFormat) { TEXPIAFILEHEADER tpfh; TPalette *pPalette = NULL; RGBQUAD rgb[256]; Byte c[256]; TPException ec = EC_NONE; bool layer = false; HANDLE hFile = NULL; DWORD dwRead; String strFileName; TTexpiaBitmap *LoadImage = NULL; TList *LoadDataList = NULL; bool bHasVector = false; TVecData *data = NULL; TUnit CurrentUnit; RECT rtLoadImage; int nWidth, nHeight; // Textile ÄÉÀ̽º strFileName = rp.DirName + "\\" + rp.FileName; if ((LoadImage = new TTexpiaBitmap)==NULL) { ec = EC_MEMORY_LACK; goto fail; } if ((pPalette = new TPalette)==NULL) { ec = EC_MEMORY_LACK; goto fail; } if (rp.ExtIndex==gffTEX || rp.ExtIndex==gffTFC) { if ((hFile = CreateFile(strFileName.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { ec = EC_MEMORY_LACK; goto fail; } if ((ec = LoadFromTexpiaFile(hFile, pPalette, tpfh, LoadImage, rp.ExtIndex))!= EC_NONE) goto fail; if (tpfh.Version.Texpia == 'P' && tpfh.Version.Method == 'T'&& tpfh.Version.Number >= 230) { if (tpfh.Version.Number > TextileFileVersion) { ec = EC_FILE_NOT_OPEN_NEWERVERSION; goto fail; } if (!ReadFile(hFile, &layer, sizeof(bool), &dwRead, NULL)) goto fail; // ·¹À̾ ÀÖ´Â ÆÄÀÏÀº ¿ÀÇÂÀÌ µÇÁö ¾Êµµ·Ï ÇÑ´Ù - by monkman (2010.12.29) if (layer) { ec = EC_FILE_NOT_OPEN; goto fail; } if (tpfh.Version.Number >= 240) { if (!ReadFile(hFile, &bHasVector, sizeof(bool), &dwRead, NULL)) goto fail; if (bHasVector) { // º¤ÅͰ¡ ÀÖÀ» °æ¿ì LoadDataList = new TList; VecDraw->LoadFromFile(hFile, LoadDataList); } } } if (hFile) CloseHandle(hFile); } else if(rp.ExtIndex==gffWEA || rp.ExtIndex==gffWAV || rp.ExtIndex==gffKNT) { if ((hFile = CreateFile(strFileName.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { ec = EC_MEMORY_LACK; goto fail; } // ¸¸¾à »óÀ§¹öÀü ÆÄÀÏÀ» ¿­ ¼ö ¾ø´Â ExceptionÀÌ ³ª¿À¸é fail·Î if ((ec = LoadFromTexpiaFile(hFile, pPalette, tpfh, LoadImage, rp.ExtIndex))!= EC_NONE) goto fail; if (hFile) CloseHandle(hFile); } else if (rp.ExtIndex == gffDXF) { // DXF Æ÷¸Ë ·Îµå tpfh.Version = TexVersion('P', 'T', TexStylistFileVersion); if (CurrentImageType == itTitle) { // Title nWidth = imgTitle->Width; nHeight = imgTitle->Height; } else if (CurrentImageType == itPattern) { // Pattern nWidth = imgPattern->Width; nHeight = imgPattern->Height; } tpfh.CanvasInfor.Width = nWidth; tpfh.CanvasInfor.Height = nHeight; tpfh.BitsPerPixel = 24; tpfh.Compress = cmZLib; if (LoadImage->Create(nWidth, nHeight, 24) == false) { ec = EC_MEMORY_LACK; goto fail; } rtLoadImage = TRect(0, 0, nWidth, nHeight); LoadImage->FillRect(rtLoadImage, clWhite); LoadDataList = new TList; if ((ec = VecDraw->LoadExternalVector(strFileName, pPalette, tpfh, LoadDataList))!=EC_NONE) goto fail; } else if(rp.ExtIndex == gffSVG) { // for SVG format file if (CurrentImageType == itTitle) { // Title nWidth = imgTitle->Width; nHeight = imgTitle->Height; } else if (CurrentImageType == itPattern) { // Pattern nWidth = imgPattern->Width; nHeight = imgPattern->Height; } tpfh.Version = TexVersion('P', 'T', TexStylistFileVersion); tpfh.CanvasInfor.Width = nWidth; tpfh.CanvasInfor.Height = nHeight; tpfh.BitsPerPixel = 24; tpfh.Compress = cmZLib; if (LoadImage->Create(nWidth, nHeight, 24) == false) { ec = EC_MEMORY_LACK; goto fail; } rtLoadImage = TRect(0, 0, nWidth, nHeight); LoadImage->FillRect(rtLoadImage, clWhite); LoadDataList = new TList; if (!VecDraw->LoadFromSVGFile(rp.DirName, rp.FileName, tpfh, CurrentUnit, LoadDataList)) { ec = EC_FILE_NOT_OPEN; goto fail; } } else { // ±âŸ ºñÆ®¸Ê LoadImage->LoadFromFile(strFileName); } if (pPalette) delete pPalette; pPalette = NULL; // ¼º°øÇßÀ¸¹Ç·Î ´ëÀÔ if (LoadImage) { // 8Bit´Â 24Bit BitmapÀ¸·Î º¯°æµÈ´Ù if (CurrentImageType == itTitle) { TitleBitmap->Destroy(); TitleBitmap->Create(LoadImage->Width, LoadImage->Height, 24); if (TitleBitmap->Copy(LoadImage, SRCCOPY) == false) goto fail; } else if (CurrentImageType == itPattern) { PatternBitmap->Destroy(); PatternBitmap->Create(LoadImage->Width, LoadImage->Height, 24); if (PatternBitmap->Copy(LoadImage, SRCCOPY) == false) goto fail; } delete LoadImage; } LoadImage = NULL; VecDraw->ClearDataList(PatternVectorDataList); VecDraw->CopyDataList(PatternVectorDataList, LoadDataList, -1, 0); VecDraw->ClearDataList(LoadDataList); if (LoadDataList) delete LoadDataList; LoadDataList = NULL; hFile = NULL; return ec; fail: if (pPalette) delete pPalette; pPalette = NULL; if (LoadImage) delete LoadImage; LoadImage = NULL; VecDraw->ClearDataList(LoadDataList); if (LoadDataList) delete LoadDataList; LoadDataList = NULL; return ec; } //--------------------------------------------------------------------- void __fastcall TWorkSheetForm::DrawTexpiaBitmap(TImage *imgDst, TTexpiaBitmap *bitmapSrc, TList *DataList) { HDC dcSrc = NULL, dcDst = NULL; RECT rtCanvas; int nDstX, nDstY, nDstW, nDstH; double dRatioW, dRatioH, dRatio; // ÃʱâÈ­ rtCanvas = TRect(0, 0, imgDst->Width, imgDst->Height); imgDst->Canvas->Brush->Color = clWhite; imgDst->Canvas->FillRect(rtCanvas); if (bitmapSrc && 0 < bitmapSrc->Width && 0 < bitmapSrc->Height) { dcDst = imgDst->Canvas->Handle; dcSrc = bitmapSrc->CreateDC(); // ¿øº»¿¡ º¤ÅÍ ±×¸®±â /* if (PatternVectorDataList) { DrawVector(dcSrc, PatternVectorDataList, 0); } */ dRatioW = (double)imgDst->Width / bitmapSrc->Width; dRatioH = (double)imgDst->Height / bitmapSrc->Height; // ºñÀ² Á¶Àý dRatio = dRatioW < dRatioH ? dRatioW : dRatioH; nDstW = bitmapSrc->Width * dRatio; nDstH = bitmapSrc->Height * dRatio; nDstX = (imgDst->Width - nDstW) / 2; nDstY = (imgDst->Height - nDstH) / 2; // ºñÆ®¸Ê ±×¸®±â SetStretchBltMode(dcDst, COLORONCOLOR); StretchBlt(dcDst, nDstX, nDstY, nDstW, nDstH , dcSrc, 0, 0, bitmapSrc->Width, bitmapSrc->Height, SRCCOPY); bitmapSrc->DeleteDC(dcSrc); // º¤ÅÍ ±×¸®±â if (DataList) { DrawVector(dcDst, DataList, -1, -1, nDstX, nDstY, nDstW, nDstH, dRatio, false); } } imgDst->Repaint(); } //--------------------------------------------------------------------- /* void __fastcall TWorkSheetForm::TitleImgForPrint(TTexpiaBitmap *bitmap, int &width, int &height) { if (!bitmap) return; width = imgTitle->Width + 2; height = imgTitle->Height + 2; bitmap->Create(width, height, 24); bitmap->FillRect(TRect(0,0,width, height), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Pen->Color = clBtnShadow; ACanvas->Brush->Color = clWhite; ACanvas->Rectangle(0, 0, width, height); BitBlt(ACanvas->Handle, 1, 1, imgTitle->Width, imgTitle->Height, imgTitle->Canvas->Handle, 0, 0, SRCCOPY); bitmap->DeleteCanvas(ACanvas); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::top0GridForPrint(TTexpiaBitmap *bitmap, int &width, int &height) { if (!bitmap) return; TRzStringGrid* StringGrid = dynamic_cast(top0Grid); UINT uFormat; tagSIZE size; TRect Rect; String CellText; width = StringGrid->ColWidths[0] + StringGrid->ColWidths[1] + 3;//À§,¾Æ·¡,Áß°£ ¶óÀÎ + 3 height = StringGrid->RowHeights[0] + 2; //À§,¾Æ·¡ bitmap->Create(width+1, height+1, 24); bitmap->FillRect(TRect(0,0,width+1, height+1), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Pen->Color = clBtnShadow; ACanvas->Brush->Color = clWhite; ACanvas->Rectangle(0, 0, width, height); for (int ARow = 0, gTop = 0, oldgTop = 0; ARow < StringGrid->RowCount; ARow++) { gTop += (StringGrid->RowHeights[ARow] + 1); for (int ACol = 0, gLeft = 0; ACol < StringGrid->ColCount; ACol++) { Rect = StringGrid->CellRect(ACol, ARow); Rect.left += 1; Rect.Top += 1; ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; if (ACol == 0) { ACanvas->Brush->Color = clBtnFace; ACanvas->Pen->Color = clWhite; ACanvas->Font->Color = clWindowText; } ACanvas->FillRect(Rect); //À̰÷Àº µ¦½ºÆ®ÀÛ¾÷ ¿µ¿ª CellText = StringGrid->Cells[ACol][ARow]; GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), strlen(CellText.c_str()), &size); if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } gLeft += (StringGrid->ColWidths[ACol] + 1); ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(gLeft, oldgTop); ACanvas->LineTo(gLeft, gTop); } ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(0, gTop); ACanvas->LineTo(width, gTop); oldgTop = gTop; } bitmap->DeleteCanvas(ACanvas); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::top1GridForPrint(TTexpiaBitmap *bitmap, int &width, int &height) { if (!bitmap) return; TRzStringGrid* StringGrid = NULL; // Àӽà ÁÖ¼®Ã³¸® //StringGrid = dynamic_cast(top1Grid); UINT uFormat; tagSIZE size; TRect Rect; String CellText; width = StringGrid->DefaultColWidth * 8 + 9; height = StringGrid->RowHeights[0] + 2; //À§,¾Æ·¡ bitmap->Create(width+1, height+1, 24); bitmap->FillRect(TRect(0,0,width+1, height+1), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Pen->Color = clBtnShadow; ACanvas->Brush->Color = clWhite; ACanvas->Rectangle(0, 0, width, height); for (int ARow = 0, gTop = 0, oldgTop = 0; ARow < StringGrid->RowCount; ARow++) { gTop += (StringGrid->RowHeights[ARow] + 1); for (int ACol = 0, gLeft = 0; ACol < StringGrid->ColCount; ACol++) { Rect = StringGrid->CellRect(ACol, ARow); Rect.left += 1; Rect.Top += 1; ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; if (ACol%2 || ACol == 0) { ACanvas->Brush->Color = clBtnFace; ACanvas->Pen->Color = clWhite; ACanvas->Font->Color = clWindowText; } ACanvas->FillRect(Rect); //À̰÷Àº µ¦½ºÆ®ÀÛ¾÷ ¿µ¿ª CellText = StringGrid->Cells[ACol][ARow]; GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), strlen(CellText.c_str()), &size); if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } gLeft += (StringGrid->ColWidths[ACol] + 1); ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(gLeft, oldgTop); ACanvas->LineTo(gLeft, gTop); } ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(0, gTop); ACanvas->LineTo(width, gTop); oldgTop = gTop; } bitmap->DeleteCanvas(ACanvas); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::top2GridForPrint(TTexpiaBitmap *bitmap, int &width, int &height) { if (!bitmap) return; TRzStringGrid* StringGrid = NULL; // Àӽà ÁÖ¼®Ã³¸® //StringGrid = dynamic_cast(top2Grid); UINT uFormat; tagSIZE size; TRect Rect; String CellText; width = StringGrid->DefaultColWidth * 8 + 9; height = StringGrid->RowHeights[0] + 2; //À§,¾Æ·¡ bitmap->Create(width+1, height+1, 24); bitmap->FillRect(TRect(0,0,width+1, height+1), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Pen->Color = clBtnShadow; ACanvas->Brush->Color = clWhite; ACanvas->Rectangle(0, 0, width, height); for (int ARow = 0, gTop = 0, oldgTop = 0; ARow < StringGrid->RowCount; ARow++) { gTop += (StringGrid->RowHeights[ARow] + 1); for (int ACol = 0, gLeft = 0; ACol < StringGrid->ColCount; ACol++) { Rect = StringGrid->CellRect(ACol, ARow); Rect.left += 1; Rect.Top += 1; ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; if (ACol == 0 || ACol == 2) { ACanvas->Brush->Color = clBtnFace; ACanvas->Pen->Color = clWhite; ACanvas->Font->Color = clWindowText; } ACanvas->FillRect(Rect); //À̰÷Àº µ¦½ºÆ®ÀÛ¾÷ ¿µ¿ª CellText = StringGrid->Cells[ACol][ARow]; GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), strlen(CellText.c_str()), &size); if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } gLeft += (StringGrid->ColWidths[ACol] + 1); ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(gLeft, oldgTop); ACanvas->LineTo(gLeft, gTop); } ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(0, gTop); ACanvas->LineTo(width, gTop); oldgTop = gTop; } bitmap->DeleteCanvas(ACanvas); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::DesignPanelForPrint(TTexpiaBitmap *bitmap, int &width, int &height) { TRect Rect; String CellText; width = imgDesign->Width; height = imgDesign->Height + MaterialGrid->DefaultRowHeight; bitmap->Create(width+1, height+1, 24); bitmap->FillRect(TRect(0,0,width+1, height+1), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Brush->Color = clBtnShadow; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clWhite; ACanvas->Font->Style = TFontStyles() << fsBold; ACanvas->Rectangle(0, 0, width, MaterialGrid->DefaultRowHeight); Rect = TRect(0, 0, width, MaterialGrid->DefaultRowHeight); CellText = sbDesignPanel->Caption; DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE); ACanvas->Brush->Color = clWhite; ACanvas->Rectangle(0, MaterialGrid->DefaultRowHeight, width, imgDesign->Height); BitBlt(ACanvas->Handle, 0, MaterialGrid->DefaultRowHeight, width, imgDesign->Height, imgDesign->Canvas->Handle, 0, 0, SRCCOPY); bitmap->DeleteCanvas(ACanvas); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::MaterialGridForPrint(TTexpiaBitmap *bitmap, int &width, int &height) { if (!bitmap) return; TRzStringGrid* StringGrid = dynamic_cast(MaterialGrid); UINT uFormat; tagSIZE size; TRect CellRect, Rect; String CellText; width = StringGrid->ColWidths[0] + StringGrid->ColWidths[1] + StringGrid->ColWidths[2] + 4; height = StringGrid->DefaultRowHeight * 7 + 7;//Á¦¸ñ ¶§¹®¿¡ +1 bitmap->Create(width+1, height+1, 24); bitmap->FillRect(TRect(0,0,width+1, height+1), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Brush->Color = clBtnShadow; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clWhite; ACanvas->Font->Style = TFontStyles() << fsBold; ACanvas->Rectangle(0, 0, width, StringGrid->DefaultRowHeight); Rect = TRect(0, 0, width, StringGrid->DefaultRowHeight); CellText = sbMaterialPanel->Caption; DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE); ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Style = TFontStyles() >> fsBold; ACanvas->Rectangle(0, StringGrid->DefaultRowHeight, width, height); for (int ARow = 0, gTop = StringGrid->DefaultRowHeight, oldgTop = gTop; ARow < StringGrid->RowCount; ARow++) { gTop += (StringGrid->RowHeights[ARow] + 1); for (int ACol = 0, gLeft = 0; ACol < StringGrid->ColCount; ACol++) { Rect = StringGrid->CellRect(ACol, ARow); ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; CellText = StringGrid->Cells[ACol][ARow]; if (ACol == 0 && ARow > 0) { if (ARow == 2) { CellRect = StringGrid->CellRect(ACol,1); //ACol,ARow Rect = StringGrid->CellRect(ACol,2); Rect.Top = CellRect.Top; } else if (ARow == 4) { CellRect = StringGrid->CellRect(ACol,3); //ACol,ARow Rect = StringGrid->CellRect(ACol,StringGrid->RowCount-1); Rect.Top = CellRect.Top; } ACanvas->Brush->Color = clBtnFace; ACanvas->Pen->Color = clWhite; ACanvas->Font->Color = clWindowText; } else if (ACol == 1 || (ACol == 0 && ARow == 0)) { ACanvas->Brush->Color = clBtnFace; ACanvas->Pen->Color = clWhite; ACanvas->Font->Color = clWindowText; } else if (ACol == 2) { CellText = StringGrid->Cells[ACol][ARow]; } Rect.left += 1; Rect.Top += 1; Rect.Top += StringGrid->DefaultRowHeight; Rect.Bottom += StringGrid->DefaultRowHeight; ACanvas->FillRect(Rect); GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), strlen(CellText.c_str()), &size); if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } gLeft += (StringGrid->ColWidths[ACol] + 1); ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(gLeft, oldgTop); ACanvas->LineTo(gLeft, gTop); } ACanvas->Pen->Color = clBtnShadow; if (ARow == 1 || ARow == 3) ACanvas->MoveTo(StringGrid->ColWidths[0] + 1, gTop); else ACanvas->MoveTo(0, gTop); ACanvas->LineTo(width, gTop); oldgTop = gTop; } bitmap->DeleteCanvas(ACanvas); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::subMaterialGridForPrint(TTexpiaBitmap *bitmap, int &width, int &height) { if (!bitmap) return; TRzStringGrid* StringGrid = dynamic_cast(subMaterialGrid); UINT uFormat; tagSIZE size; TRect Rect; String CellText; width = StringGrid->ColWidths[0] + StringGrid->ColWidths[1] + StringGrid->ColWidths[2] + 4; height = StringGrid->DefaultRowHeight * 7 + 7; bitmap->Create(width+1, height+1, 24); bitmap->FillRect(TRect(0,0,width+1, height+1), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Brush->Color = clBtnShadow; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clWhite; ACanvas->Font->Style = TFontStyles() << fsBold; ACanvas->Rectangle(0, 0, width, StringGrid->DefaultRowHeight); Rect = TRect(0, 0, width, StringGrid->DefaultRowHeight); CellText = sbSubMaterialPane->Caption; DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE); ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Style = TFontStyles() >> fsBold; ACanvas->Rectangle(0, StringGrid->DefaultRowHeight, width, height); for (int ARow = 0, gTop = StringGrid->DefaultRowHeight, oldgTop = gTop; ARow < StringGrid->RowCount; ARow++) { gTop += (StringGrid->RowHeights[ARow] + 1); for (int ACol = 0, gLeft = 0; ACol < StringGrid->ColCount; ACol++) { Rect = StringGrid->CellRect(ACol, ARow); Rect.left += 1; Rect.Top += 1; Rect.Top += StringGrid->DefaultRowHeight; Rect.Bottom += StringGrid->DefaultRowHeight; ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; ACanvas->FillRect(Rect); //À̰÷Àº µ¦½ºÆ®ÀÛ¾÷ ¿µ¿ª CellText = StringGrid->Cells[ACol][ARow]; GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), strlen(CellText.c_str()), &size); if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } gLeft += (StringGrid->ColWidths[ACol] + 1); ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(gLeft, oldgTop); ACanvas->LineTo(gLeft, gTop); } ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(0, gTop); ACanvas->LineTo(width, gTop); oldgTop = gTop; } bitmap->DeleteCanvas(ACanvas); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::sizeGridForPrint(TTexpiaBitmap *bitmap, int &width, int &height) { if (!bitmap) return; TRzStringGrid* StringGrid = dynamic_cast(upperSizeGrid); UINT uFormat; tagSIZE size; TRect Rect; String CellText; width = StringGrid->ColWidths[0] + StringGrid->ColWidths[1] + 3; height = StringGrid->DefaultRowHeight * 8 + 8; bitmap->Create(width+1, height+1, 24); bitmap->FillRect(TRect(0,0,width+1, height+1), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Brush->Color = clBtnShadow; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clWhite; ACanvas->Font->Style = TFontStyles() << fsBold; ACanvas->Rectangle(0, 0, width, StringGrid->DefaultRowHeight); Rect = TRect(0, 0, width, StringGrid->DefaultRowHeight); CellText = sbSizePanel->Caption; DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE); ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Style = TFontStyles() >> fsBold; ACanvas->Rectangle(0, StringGrid->DefaultRowHeight, width, height); for (int ARow = 0, gTop = StringGrid->DefaultRowHeight, oldgTop = gTop; ARow < StringGrid->RowCount; ARow++) { gTop += (StringGrid->RowHeights[ARow] + 1); for (int ACol = 0, gLeft = 0; ACol < StringGrid->ColCount; ACol++) { Rect = StringGrid->CellRect(ACol, ARow); Rect.left += 1; Rect.Top += 1; Rect.Top += StringGrid->DefaultRowHeight; Rect.Bottom += StringGrid->DefaultRowHeight; ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; if (ACol == 0 || ARow == 0) { ACanvas->Brush->Color = clBtnFace; ACanvas->Pen->Color = clWhite; ACanvas->Font->Color = clWindowText; } CellText = StringGrid->Cells[ACol][ARow]; ACanvas->FillRect(Rect); //À̰÷Àº µ¦½ºÆ®ÀÛ¾÷ ¿µ¿ª GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), strlen(CellText.c_str()), &size); if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } gLeft += (StringGrid->ColWidths[ACol] + 1); ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(gLeft, oldgTop); ACanvas->LineTo(gLeft, gTop); } ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(0, gTop); ACanvas->LineTo(width, gTop); oldgTop = gTop; } bitmap->DeleteCanvas(ACanvas); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::rzstrgrdStyleForPrint(TTexpiaBitmap *bitmap, int &width, int &height) { if (!bitmap) return; TRzStringGrid* StringGrid = dynamic_cast(rzstrgrdStyle); UINT uFormat; tagSIZE size; TRect Rect; String CellText; Graphics::TBitmap *bmpPart = NULL; width = StringGrid->DefaultColWidth * StringGrid->ColCount + StringGrid->ColCount + 1; height = StringGrid->RowHeights[0] + StringGrid->RowHeights[1] + StringGrid->RowHeights[2] + 4; bitmap->Create(width+1, height+1, 24); bitmap->FillRect(TRect(0,0,width+1, height+1), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Pen->Color = clBtnShadow; ACanvas->Brush->Color = clWhite; ACanvas->Rectangle(0, 0, width, height); for (int ARow = 0, gTop = 0, oldgTop = 0; ARow < StringGrid->RowCount; ARow++) { gTop += (StringGrid->RowHeights[ARow] + 1); for (int ACol = 0, gLeft = 0; ACol < StringGrid->ColCount; ACol++) { Rect = StringGrid->CellRect(ACol, ARow); Rect.left += 1; Rect.Top += 1; ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; if (ARow == 0 || ARow == 1) { if (ARow == 0) { ACanvas->Brush->Color = clBtnFace; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; ACanvas->Font->Style = TFontStyles() << fsBold; } else if (ARow == 1) { ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; ACanvas->Font->Style = TFontStyles() >> fsBold; } ACanvas->FillRect(Rect); CellText = StringGrid->Cells[ACol][ARow]; GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), strlen(CellText.c_str()), &size); if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } } else if (ARow == 2) { // ½ºÅ¸ÀÏ À̹ÌÁö ±×·ÁÁÖ±â if (ACol < PartImageList->Count) { bmpPart = (Graphics::TBitmap *)PartImageList->Items[ACol]; BitBlt(ACanvas->Handle, Rect.left, Rect.top, Rect.right, Rect.Bottom, bmpPart->Canvas->Handle, 0, 0, SRCCOPY); } } gLeft += (StringGrid->ColWidths[ACol] + 1); ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(gLeft, oldgTop); ACanvas->LineTo(gLeft, gTop); } ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(0, gTop); ACanvas->LineTo(width, gTop); oldgTop = gTop; } bitmap->DeleteCanvas(ACanvas); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::dxfGridForPrint(TTexpiaBitmap *bitmap, int &width, int &height) { if (!bitmap) return; TRzStringGrid* StringGrid = dynamic_cast(dxfGrid); UINT uFormat; tagSIZE size; TRect Rect; String CellText; TDXFImage *dxfImage = NULL; TCanvas *dxfCanvas = NULL; width = StringGrid->DefaultColWidth * StringGrid->ColCount + StringGrid->ColCount + 1; height = StringGrid->RowHeights[0] + StringGrid->RowHeights[1] + StringGrid->RowHeights[2] + 4; bitmap->Create(width+1, height+1, 24); bitmap->FillRect(TRect(0,0,width+1, height+1), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Pen->Color = clBtnShadow; ACanvas->Brush->Color = clWhite; ACanvas->Rectangle(0, 0, width, height); for (int ARow = 0, gTop = 0, oldgTop = 0; ARow < StringGrid->RowCount; ARow++) { gTop += (StringGrid->RowHeights[ARow] + 1); for (int ACol = 0, gLeft = 0; ACol < StringGrid->ColCount; ACol++) { Rect = StringGrid->CellRect(ACol, ARow); Rect.left += 1; Rect.Top += 1; ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; if (ARow == 0 || ARow == 1) { if (ARow == 0) { ACanvas->Brush->Color = clBtnFace; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; ACanvas->Font->Style = TFontStyles() << fsBold; } else if (ARow == 1) { ACanvas->Brush->Color = clWhite; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clBlack; ACanvas->Font->Style = TFontStyles() >> fsBold; } ACanvas->FillRect(Rect); CellText = StringGrid->Cells[ACol][ARow]; GetTextExtentPoint32(GetDC(StringGrid->Handle), CellText.c_str(), strlen(CellText.c_str()), &size); if (size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } } else if (ARow == 2) { // ½ºÅ¸ÀÏ À̹ÌÁö ±×·ÁÁÖ±â if (ACol < DxfImageList->Count) { dxfImage = (TDXFImage *)DxfImageList->Items[ACol]; if (dxfImage && dxfImage->Bitmap) { dxfCanvas = dxfImage->Bitmap->CreateCanvas(); if (dxfCanvas) { BitBlt(ACanvas->Handle, Rect.left, Rect.top, Rect.right, Rect.Bottom, dxfCanvas->Handle, 0, 0, SRCCOPY); dxfImage->Bitmap->DeleteCanvas(dxfCanvas); } } } } gLeft += (StringGrid->ColWidths[ACol] + 1); ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(gLeft, oldgTop); ACanvas->LineTo(gLeft, gTop); } ACanvas->Pen->Color = clBtnShadow; ACanvas->MoveTo(0, gTop); ACanvas->LineTo(width, gTop); oldgTop = gTop; } bitmap->DeleteCanvas(ACanvas); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::Page2ForPrint(TObject *Sender, TTexpiaBitmap *bitmap, int &width, int &height) { if (!bitmap) return; TImage *image = (TImage*)Sender; TRect Rect; String CellText; width = image->Width; height = image->Height + MaterialGrid->DefaultRowHeight; bitmap->Create(width+1, height+1, 24); bitmap->FillRect(TRect(0,0,width+1, height+1), clWhite); TCanvas* ACanvas = bitmap->CreateCanvas(); if (!ACanvas) return; ACanvas->Pen->Style = psSolid; ACanvas->Brush->Color = clBtnShadow; ACanvas->Pen->Color = clBtnShadow; ACanvas->Font->Color = clWhite; ACanvas->Font->Style = TFontStyles() << fsBold; ACanvas->Rectangle(0, 0, width, MaterialGrid->DefaultRowHeight); Rect = TRect(0, 0, width, MaterialGrid->DefaultRowHeight); if (image == imgDesign2) CellText = RzPanel2->Caption; else CellText = RzPanel4->Caption; DrawText(ACanvas->Handle, CellText.c_str(), CellText.Length(), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE); ACanvas->Brush->Color = clWhite; ACanvas->Rectangle(0, MaterialGrid->DefaultRowHeight, width, image->Height); BitBlt(ACanvas->Handle, 0, MaterialGrid->DefaultRowHeight, width, image->Height, image->Canvas->Handle, 0, 0, SRCCOPY); bitmap->DeleteCanvas(ACanvas); } */ //--------------------------------------------------------------------------- bool __fastcall TWorkSheetForm::SendToPrinter(String title, int page, int dpi) { HDC hPrintDC = NULL, hBitmapDC = NULL; TCanvas *bmpCanvas = NULL; TRect Src, Dst; int WidthRes, HeightRes, x, y, PosWidth, PosHeight; TSize Area, n, s; RGBQUAD rgb[256]; TTexpiaBitmap *Bitmap = NULL; double dRatio, dRatioW, dRatioH; int nDstX, nDstY, nDstW, nDstH; Printer()->Title = title; Printer()->Copies = page; Printer()->BeginDoc(); hPrintDC = Printer()->Handle; WidthRes = GetDeviceCaps(hPrintDC, LOGPIXELSX); HeightRes = GetDeviceCaps(hPrintDC, LOGPIXELSY); Area.cx = GetDeviceCaps(hPrintDC, HORZRES); Area.cy = GetDeviceCaps(hPrintDC, VERTRES); Bitmap = new TTexpiaBitmap; Bitmap->Create(1760, 1248, 24); // A4 Bitmap->FillRect(TRect(0, 0, Bitmap->Width, Bitmap->Height), clWhite); // ÇϾá»öÀ¸·Î ä¿ì±â bmpCanvas = Bitmap->CreateCanvas(); // ºñÆ®¸Ê¿¡ ±×¸®´Â ºñÀ² °è»ê dRatioW = (double)Bitmap->Width / rzpnlPage1BG->Width; dRatioH = (double)Bitmap->Height / rzpnlPage1BG->Height; dRatio = dRatioW < dRatioH ? dRatioH : dRatioW; if (rzpagectrlPage->ActivePage == TabSheet1) { // ù¹øÂ° ÆäÀÌÁö!!!! // bgPanelÀ§ÀÇ ¸ðµç ÄÄÆ÷³ÍÆ®¸¦ Ãâ·ÂÇÑ´Ù // Ãâ·Â°á°ú°¡ È­¸é°ú °°Áö ¾Ê´Ù¸é, Width, Height, ColWidths[], RowHeights[], DefaultColWidth, DeafaultRowHeight¸¦ üũÇÑ´Ù // StringGridµéÀº ScrollBars=ssNoneÀ̾î¾ß ÇÑ´Ù PrintControl(bmpCanvas, rzpnlPage1BG, rzpnlPage1BG, dRatio); // Á¶ÇÕ °á°ú if (CombiData->Type != TP_PANTS && CombiData->Type != TP_SKIRT) { // »óÀÇ PrintVectorImage(bmpCanvas, rzpnlPage1BG, imgDesign, CombiData->UpperWholeFrontDataList, CombiData->UpperWholeBackDataList, dRatio); } else { // ÇÏÀÇ PrintVectorImage(bmpCanvas, rzpnlPage1BG, imgDesign, CombiData->LowerWholeFrontDataList, CombiData->LowerWholeBackDataList, dRatio); } PrintStyleImages(bmpCanvas, dRatio); // Á¶ÇÕ Styles PrintDXFImage(bmpCanvas, dRatio); // DXF À̹ÌÁö if (0 < TitleBitmap->Width && 0 < TitleBitmap->Height) { PrintBitmapImage(bmpCanvas, rzpnlPage1BG, imgTitle, TitleBitmap, NULL, dRatio); // Title } } else if (rzpagectrlPage->ActivePage == TabSheet2) { // µÎ¹øÂ° ÆäÀÌÁö!!!! // bgPanelÀ§ÀÇ ¸ðµç ÄÄÆ÷³ÍÆ®¸¦ Ãâ·ÂÇÑ´Ù // Ãâ·Â°á°ú°¡ È­¸é°ú °°Áö ¾Ê´Ù¸é, Width, Height¸¦ üũÇÑ´Ù PrintControl(bmpCanvas, rzpnlPage2BG, rzpnlPage2BG, dRatio); // Á¶ÇÕ °á°ú if (CombiData->Type != TP_PANTS && CombiData->Type != TP_SKIRT) { // »óÀÇ PrintVectorImage(bmpCanvas, rzpnlPage2BG, imgDesign2, CombiData->UpperWholeFrontDataList, CombiData->UpperWholeBackDataList, dRatio); } if (0 < PatternBitmap->Width && 0 < PatternBitmap->Height) { PrintBitmapImage(bmpCanvas, rzpnlPage2BG, imgPattern, PatternBitmap, PatternVectorDataList, dRatio); // Pattern } } if (bmpCanvas) Bitmap->DeleteCanvas(bmpCanvas); bmpCanvas = NULL; // DoubleBuffer È¿°ú hBitmapDC = Bitmap->CreateDC(); // ÇÁ¸°ÅÍ¿¡ ±×¸®´Â ºñÀ² °è»ê dRatioW = (double)Bitmap->Width / Area.cx; dRatioH = (double)Bitmap->Height / Area.cy; dRatio = dRatioW < dRatioH ? dRatioH : dRatioW; nDstW = Bitmap->Width / dRatio; nDstH = Bitmap->Height / dRatio; nDstX = (Area.cx - nDstW) / 2; nDstY = (Area.cy - nDstH) / 2; SetStretchBltMode(hPrintDC, HALFTONE); StretchBlt(hPrintDC, nDstX, nDstY, nDstW, nDstH, hBitmapDC, 0, 0, Bitmap->Width, Bitmap->Height, SRCCOPY); Bitmap->DeleteDC(hBitmapDC); hBitmapDC = NULL; /* int width = 0, height = 0; int w[10], h[10]; TTexpiaBitmap *bitmap[10]; HDC sDC; int return_value = 0; int left, top; int gap; float WRatio = 1.0; for (int i = 0; i < 10; i++) { bitmap[i] = new TTexpiaBitmap; } TitleImgForPrint(bitmap[0], w[0], h[0]); top0GridForPrint(bitmap[1], w[1], h[1]); top1GridForPrint(bitmap[2], w[2], h[2]); top2GridForPrint(bitmap[3], w[3], h[3]); DesignPanelForPrint(bitmap[4], w[4], h[4]); MaterialGridForPrint(bitmap[5], w[5], h[5]); subMaterialGridForPrint(bitmap[6], w[6], h[6]); sizeGridForPrint(bitmap[7], w[7], h[7]); rzstrgrdStyleForPrint(bitmap[8], w[8], h[8]); dxfGridForPrint(bitmap[9], w[9], h[9]); width = w[9]; //ÇÁ¸°Æ® ¿ëÁöÀÇ 80% ¸¸Å­ Ãâ·ÂÇÏ°Ô ÇÑ´Ù. //À§/¾Æ·¡/ÁÂ/¿ì °ø°£Àº ÇÁ¸°Æ® ¿ëÁöÀÇ 10%À¸·Î ÇÑ´Ù. //gap = Area.cx * 0.1; //WRatio = (float)(Area.cx * 0.8) / width; gap = 0; WRatio = (float)Area.cx / width; left = gap; top =gap; for (int i = 0; i < 10; i++) { //ÇÁ¸°Æ® ¿ëÁö ¸¸Å­ È®´ë w[i] *= WRatio; h[i] *= WRatio; } for (int j = 0; j < page; j++) { for (int i = 0; i < 10; i++) { sDC = bitmap[i]->CreateDC(); SetStretchBltMode(Printer()->Canvas->Handle, HALFTONE); StretchBlt(Printer()->Canvas->Handle, left, top, w[i], h[i], sDC, 0, 0, bitmap[i]->Width, bitmap[i]->Height, SRCCOPY); switch(i) { case 0: left += (w[i] + 10); break; case 1: case 2: top += (h[i] + 10); break; case 3: left = gap; top += (h[i] + 10); break; case 4: case 5: case 6: left += (w[i] + 10); break; case 7: left = gap; top += (h[i] + 10); break; case 8: case 9: top += (h[i] + 10); break; } if (sDC) bitmap[i]->DeleteDC(sDC); } if (j < page - 1) { Printer()->NewPage(); left = gap; top =gap; } } for (int i = 0; i < 10; i++) { delete bitmap[i]; bitmap[i] = NULL; } //---------------------------------------------------------------------- //µÎ¹øÂ° page Ãâ·Â ºÎºÐ for (int i = 0; i < 2; i++) { bitmap[i] = new TTexpiaBitmap; } Page2ForPrint(imgDesign2, bitmap[0], w[0], h[0]); Page2ForPrint(imgPatternImage, bitmap[1], w[1], h[1]); width = w[0]+w[1]+10; //ÇÁ¸°Æ® ¿ëÁöÀÇ 80% ¸¸Å­ Ãâ·ÂÇÏ°Ô ÇÑ´Ù. //À§/¾Æ·¡/ÁÂ/¿ì °ø°£Àº ÇÁ¸°Æ® ¿ëÁöÀÇ 10%À¸·Î ÇÑ´Ù. //gap = Area.cx * 0.1; //WRatio = (float)(Area.cx * 0.8) / width; gap = 0; WRatio = (float)Area.cx / width; left = gap; top =gap; for (int i = 0; i < 2; i++) { //ÇÁ¸°Æ® ¿ëÁö ¸¸Å­ È®´ë w[i] *= WRatio; h[i] *= WRatio; } Printer()->NewPage(); for (int j = 0; j < page; j++) { for (int i = 0; i < 2; i++) { sDC = bitmap[i]->CreateDC(); SetStretchBltMode(Printer()->Canvas->Handle, HALFTONE); StretchBlt(Printer()->Canvas->Handle, left, top, w[i], h[i], sDC, 0, 0, bitmap[i]->Width, bitmap[i]->Height, SRCCOPY); left += (w[i] + 10); if (sDC) bitmap[i]->DeleteDC(sDC); } if (j < page - 1) { Printer()->NewPage(); left = gap; top =gap; } } for (int i = 0; i < 2; i++) { delete bitmap[i]; bitmap[i] = NULL; } //---------------------------------------------------------------------- */ Printer()->EndDoc(); if (Bitmap) delete Bitmap; Bitmap = NULL; return true; fail: Printer()->EndDoc(); /* for (int i = 0; i < 10; i++) { if (bitmap[i]) delete bitmap[i]; bitmap[i] = NULL; } */ if (Bitmap) delete Bitmap; Bitmap = NULL; return false; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::rztoolbtnPrintClick(TObject *Sender) { String title; int page = 1; int dpi = 0; SendToPrinter(title, page, dpi); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::imgTitleDblClick(TObject *Sender) { CurrentImageType = itTitle; // TitleImage ExecuteFileManager(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::btnPrintOptionClick(TObject *Sender) { PrinterSetupDialog1->Execute(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::imgPatternDblClick(TObject *Sender) { CurrentImageType = itPattern; // PatternImage ExecuteFileManager(); } //--------------------------------------------------------------------------- bool __fastcall TWorkSheetForm::ExportDXFFile(String strPath) { if (!DirectoryExists(strPath)) return false; if (DXFDataList) { String strFileName; BOOL bFailIfExists; if (strPath.c_str()[strPath.Length()-1] != '\\') strPath += "\\"; TDXFData *dxfData = NULL; for (int i = 0; i< DXFDataList->Count; i++) { dxfData = (TDXFData *)DXFDataList->Items[i]; strFileName = ExtractFileName(dxfData->Path); strFileName = strPath + strFileName; CopyFile(dxfData->Path.c_str(), strFileName.c_str(), bFailIfExists); } return true; } return false; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::rztoolbtnInitClick(TObject *Sender) { InitData(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::btnCloseClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::miClearClick(TObject *Sender) { TImage *Image = NULL; Image = dynamic_cast(PopupMenu->PopupComponent); if (Image) { if (Image == imgTitle) { TitleBitmap->Destroy(); DrawTexpiaBitmap(imgTitle, TitleBitmap, NULL); } if (Image == imgPattern) { PatternBitmap->Destroy(); VecDraw->ClearDataList(PatternVectorDataList); DrawTexpiaBitmap(imgPattern, PatternBitmap, PatternVectorDataList); } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::miOpenClick(TObject *Sender) { TImage *Image = NULL; TRzStringGrid *StringGrid = NULL; TList *VectorList = NULL; VectorList = new TList; if (VectorList) { ExtractVectorDataListFromPopupComponent(PopupMenu->PopupComponent, VectorList); } // Front, Back µÑ´Ù ÀÖÀ» °æ¿ì °£°Ý Á¶Á¤ } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::miMergeClick(TObject *Sender) { // } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::PrintControl(TCanvas *canvasPrint, TWinControl *ctrlBase, TWinControl *ctrlControl, double dRatio) { TRzPanel *pnlControl = NULL; TRzStringGrid *strgrdControl = NULL; for (int i = 0; i < ctrlControl->ControlCount; i++) { pnlControl = dynamic_cast(ctrlControl->Controls[i]); strgrdControl = dynamic_cast(ctrlControl->Controls[i]); if (pnlControl) PrintPanel(canvasPrint, ctrlBase, pnlControl, dRatio); if (strgrdControl) PrintStringGrid(canvasPrint, ctrlBase, strgrdControl, dRatio); // ÀÚ½Ä Ãâ·Â if (pnlControl && 0 < pnlControl->ControlCount) PrintControl(canvasPrint, ctrlBase, pnlControl, dRatio); if (strgrdControl && 0 < strgrdControl->ControlCount) PrintControl(canvasPrint, ctrlBase, strgrdControl, dRatio); } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::PrintPanel(TCanvas *canvasPrint, TControl *ctrlBase, TRzPanel *Panel, double dRatio) { TRect Rect; UINT uFormat; SIZE Size; String CellText; POINT BasePos; TControl *Control = NULL; if (canvasPrint && Panel) { BasePos.x = 0; BasePos.y = 0; Control = dynamic_cast(Panel); // ºÎ¸ð¸¦ °Å½½·¯ ¿Ã¶ó°¡¸é¼­ ±âÁØ ÁÂÇ¥¸¦ ±¸ÇÑ´Ù while (Control) { Control = dynamic_cast(Control->Parent); if (Control) { if (Control == ctrlBase) break; // Control == ctrlBaseÀ̸é ÇÁ¸°Æ®µÉ È­¸éÀÌ´Ù BasePos.x += Control->Left; BasePos.y += Control->Top; } } canvasPrint->Pen->Color = clBlack; canvasPrint->Brush->Color = Panel->Color; canvasPrint->Font->Color = clBlack; canvasPrint->Font->Size = Panel->Font->Size * dRatio; CellText = Panel->Caption; // ºñÀ² Á¶Á¤ canvasPrint->Pen->Width = 1; Rect.left = (BasePos.x + Panel->Left) * dRatio; Rect.top = (BasePos.y + Panel->Top) * dRatio; Rect.right = (BasePos.x + Panel->Left + Panel->Width) * dRatio; Rect.bottom = (BasePos.y + Panel->Top + Panel->Height) * dRatio; canvasPrint->FillRect(Rect); canvasPrint->Rectangle(Rect); canvasPrint->Font->Style = TFontStyles() << fsBold; GetTextExtentPoint32(Panel->Canvas->Handle, CellText.c_str(), CellText.Length(), &Size); //if (Size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; //else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(canvasPrint->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::PrintStringGrid(TCanvas *canvasPrint, TControl *ctrlBase, TRzStringGrid *StringGrid, double dRatio) { TRect Rect; UINT uFormat; SIZE Size; String CellText; POINT BasePos, CellPos; TControl *Control = NULL; if (canvasPrint && StringGrid) { BasePos.x = 0; BasePos.y = 0; Control = dynamic_cast(StringGrid); // ºÎ¸ð¸¦ °Å½½·¯ ¿Ã¶ó°¡¸é¼­ ±âÁØ ÁÂÇ¥¸¦ ±¸ÇÑ´Ù while (Control) { Control = dynamic_cast(Control->Parent); if (Control) { if (Control == ctrlBase) break; // Control == ctrlBaseÀ̸é ÇÁ¸°Æ®µÉ È­¸éÀÌ´Ù BasePos.x += Control->Left; BasePos.y += Control->Top; } } CellPos.x = BasePos.x + StringGrid->Left; CellPos.y = BasePos.y + StringGrid->Top + 1; // ½ÃÀÛ°ú ³¡ CellÀº ³ôÀ̸¦ 1¾¿ ´Ã¸°´Ù for (int y = 0; y < StringGrid->RowCount; y++) { CellPos.x = BasePos.x + StringGrid->Left; for (int x = 0; x < StringGrid->ColCount; x++) { // FixedCol, FixedRow¸¦ clBtnFace·Î Ä¥ÇÑ´Ù // subMaterialGridÀÇ °æ¿ì clBtnFace·Î Ä¥ÇÑ´Ù <= ¿¹¿Ü¸¦ ³ÖÁö ¾ÊÀ¸·ÁÇßÀ¸³ª ÀÛ¾÷Áö½Ã¼­¸¦ µû¶ó¾ßÇß´Ù,,.. if (StringGrid != subMaterialGrid && (x < StringGrid->FixedCols || y < StringGrid->FixedRows)) { canvasPrint->Brush->Color = clBtnFace; canvasPrint->Font->Style = TFontStyles() << fsBold; } else { canvasPrint->Brush->Color = clWhite; canvasPrint->Font->Style = TFontStyles() >> fsBold; } // ¿¹¿Ü¸¦ ³ÖÁö ¾ÊÀ¸·ÁÇßÀ¸³ª ÀÛ¾÷Áö½Ã¼­¸¦ µû¶ó¾ßÇß´Ù.... if (StringGrid == subMaterialGrid || StringGrid == upperSizeGrid || StringGrid == lowerSizeGrid) { canvasPrint->Font->Style = TFontStyles() >> fsBold; } canvasPrint->Pen->Color = clBlack; canvasPrint->Font->Color = clBlack; canvasPrint->Font->Size = StringGrid->Font->Size * dRatio; CellText = StringGrid->Cells[x][y]; // ºñÀ² Á¶Á¤ canvasPrint->Pen->Width = 1; Rect.left = CellPos.x * dRatio; Rect.top = CellPos.y * dRatio; Rect.right = (CellPos.x + StringGrid->ColWidths[x] + 2) * dRatio; Rect.bottom = (CellPos.y + StringGrid->RowHeights[y] + 2) * dRatio; // StringGrid Outline ó¸® if (y == 0) Rect.top = (CellPos.y - 1) * dRatio; // ½ÃÀÛ°ú ³¡ CellÀº ³ôÀ̸¦ 1¾¿ ´Ã¸°´Ù if (y == StringGrid->RowCount-1) Rect.bottom = (CellPos.y + StringGrid->RowHeights[y] + 3) * dRatio; // ½ÃÀÛ°ú ³¡ CellÀº ³ôÀ̸¦ 1¾¿ ´Ã¸°´Ù // ºÎÀÚÀç Æ¯º°Ã³¸® (subMaterialGrid) - Sorry.. ÇÁ¸°Æ®½Ã ¿À¸¥ÂÊ ¸¶Áö¸· ¼¿ÀÇ À̰ݹ߻ýÀ¸·Î (Ãß°¡ + 2) Ưº°Ã³¸®Çß´Ù.. if ((StringGrid == subMaterialGrid || StringGrid == rzstrgrdStyle || StringGrid == dxfGrid) && x == StringGrid->ColCount-1) Rect.right = (CellPos.x + StringGrid->ColWidths[x] + 4) * dRatio; canvasPrint->FillRect(Rect); canvasPrint->Rectangle(Rect); GetTextExtentPoint32(StringGrid->Canvas->Handle, CellText.c_str(), CellText.Length(), &Size); //if (Size.cx > Rect.Width()) uFormat = DT_CENTER | DT_WORDBREAK; //else uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; uFormat = DT_CENTER | DT_VCENTER | DT_SINGLELINE; if (!CellText.IsEmpty()) { DrawText(canvasPrint->Handle, CellText.c_str(), CellText.Length(), &Rect, uFormat); } CellPos.x += StringGrid->ColWidths[x] + 1; } CellPos.y += StringGrid->RowHeights[y] + 1; } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::PrintBitmapImage(TCanvas *canvasPrint, TControl *ctrlBase, TImage *Image, TTexpiaBitmap *Bitmap, TList *VectorList, double dRatio) { TRect Rect; POINT BasePos; TControl *Control = NULL; HDC dcSrc = NULL, dcDst = NULL; int nDstX, nDstY, nDstW, nDstH; double dPrintRatioW, dPrintRatioH, dPrintRatio; if (canvasPrint && Image) { BasePos.x = 0; BasePos.y = 0; Control = dynamic_cast(Image); // ºÎ¸ð¸¦ °Å½½·¯ ¿Ã¶ó°¡¸é¼­ ±âÁØ ÁÂÇ¥¸¦ ±¸ÇÑ´Ù while (Control) { Control = dynamic_cast(Control->Parent); if (Control) { if (Control == ctrlBase) break; // Control == ctrlBaseÀ̸é ÇÁ¸°Æ®µÉ È­¸éÀÌ´Ù BasePos.x += Control->Left; BasePos.y += Control->Top; } } BasePos.x += Image->Left; BasePos.y += Image->Top; BasePos.x *= dRatio; BasePos.y *= dRatio; dPrintRatioW = (double)(Image->Width*dRatio)/Bitmap->Width; dPrintRatioH = (double)(Image->Height*dRatio)/Bitmap->Height; // ºñÀ² Á¶Àý dPrintRatio = dPrintRatioW < dPrintRatioH ? dPrintRatioW : dPrintRatioH; nDstW = Bitmap->Width * dPrintRatio; nDstH = Bitmap->Height * dPrintRatio; nDstX = (Image->Width*dRatio - nDstW) / 2; nDstY = (Image->Height*dRatio - nDstH) / 2; dcSrc = Bitmap->CreateDC(); dcDst = canvasPrint->Handle; SetStretchBltMode(dcDst, COLORONCOLOR); // ºñÀ² °è»ê StretchBlt(dcDst, BasePos.x+nDstX, BasePos.y+nDstY, nDstW, nDstH, dcSrc, 0, 0, Bitmap->Width, Bitmap->Height, SRCCOPY); if (VectorList) { DrawVector(dcDst, VectorList, -1, 0, BasePos.x+nDstX, BasePos.y+nDstY, nDstW, nDstH, dPrintRatio, false); } if (dcSrc) Bitmap->DeleteDC(dcSrc); } dcDst = NULL; dcSrc = NULL; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::PrintVectorImage(TCanvas *canvasPrint, TControl *ctrlBase, TImage *Image, TList *FrontDataList, TList *BackDataList, double dRatio) { TRect Rect; POINT BasePos; TControl *Control = NULL; HDC dcDst = NULL; TList *BothDataList = NULL; TVecData *data = NULL; if (canvasPrint && Image) { BasePos.x = 0; BasePos.y = 0; Control = dynamic_cast(Image); // ºÎ¸ð¸¦ °Å½½·¯ ¿Ã¶ó°¡¸é¼­ ±âÁØ ÁÂÇ¥¸¦ ±¸ÇÑ´Ù while (Control) { Control = dynamic_cast(Control->Parent); if (Control) { if (Control == ctrlBase) break; // Control == ctrlBaseÀ̸é ÇÁ¸°Æ®µÉ È­¸éÀÌ´Ù BasePos.x += Control->Left; BasePos.y += Control->Top; } } BasePos.x += Image->Left; BasePos.y += Image->Top; dcDst = canvasPrint->Handle; SetStretchBltMode(dcDst, HALFTONE); if (FrontDataList && BackDataList) { // ¾ÕÆÇ, µÞÆÇÀÌ ¸ðµÎ ÀÖÀ» °æ¿ì BothDataList = new TList; if (BothDataList) { // ¾Õ, µÞÆÇÀÇ Å©±â¿Í À§Ä¡°¡ °°¾Æ¾ß ÇϹǷΠÀӽà ¸®½ºÆ®¸¦ ¸¸µé¾î¼­ ±×¸° ÈÄ Áö¿î´Ù - by monkman (2011.02.18) for (int i = 0; i < FrontDataList->Count; i++) { data = (TVecData *)FrontDataList->Items[i]; BothDataList->Add(data); } for (int i = 0; i < BackDataList->Count; i++) { data = (TVecData *)BackDataList->Items[i]; BothDataList->Add(data); } // ¾ÕÆÇ : ¾Õ,µÞÆÇ ¿µ¿ªÀ» °è»êÇÏ¿© Å©±â¿Í À§Ä¡¸¦ ¸ÂÃá ÈÄ, ¾ÕÆÇ¸¸ ±×·ÁÁØ´Ù DrawVector(dcDst, BothDataList, -1, 0, BasePos.x*dRatio, BasePos.y*dRatio, (Image->Width*dRatio)/2, Image->Height*dRatio, 0.0, true); // µÞÆÇ : ¾Õ,µÞÆÇ ¿µ¿ªÀ» °è»êÇÏ¿© Å©±â¿Í À§Ä¡¸¦ ¸ÂÃá ÈÄ, µÞÆÇ¸¸ ±×·ÁÁØ´Ù DrawVector(dcDst, BothDataList, -1, 1, BasePos.x*dRatio+(Image->Width*dRatio)/2, BasePos.y*dRatio, (Image->Width*dRatio)/2, Image->Height*dRatio, 0.0, true); delete BothDataList; } } else if (FrontDataList) { // ÇÑÂʸ¸ ÀÖÀ» °æ¿ì DrawVector(dcDst, FrontDataList, -1, -1, BasePos.x*dRatio, BasePos.y*dRatio, Image->Width*dRatio, Image->Height*dRatio, 0.0, true); } } dcDst = NULL; BothDataList = NULL; } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::PrintStyleImages(TCanvas *canvasPrint, double dRatio) { TRect Rect; UINT uFormat; SIZE Size; String CellText; POINT CellPos; HDC dcDst = NULL; if (canvasPrint) { CellPos.x = rzstrgrdStyle->Left; CellPos.y = rzstrgrdStyle->Top + rzstrgrdStyle->RowHeights[0] + rzstrgrdStyle->RowHeights[1] + 4; for (int i = 0; i < rzstrgrdStyle->ColCount; i++) { canvasPrint->Brush->Color = clWhite; canvasPrint->Pen->Color = clBlack; canvasPrint->Font->Color = clBlack; // 2px ¿©¹éÀ» ÁØ´Ù Rect.left = (CellPos.x + 2) * dRatio; Rect.top = (CellPos.y + 2) * dRatio; Rect.right = (CellPos.x + rzstrgrdStyle->ColWidths[i] - 1) * dRatio; Rect.bottom = (CellPos.y + rzstrgrdStyle->RowHeights[2] - 1) * dRatio; if (CombiData->Type != TP_PANTS && CombiData->Type != TP_SKIRT) { // »óÀÇ if (i == 0) { // »óÀÇ ½Ç·ç¿§ DrawVector(canvasPrint->Handle, CombiData->UpperSilhouetteFrontDataList, -1, -1, Rect.left, Rect.top, Rect.Width()/2, Rect.Height(), 0.0, true); DrawVector(canvasPrint->Handle, CombiData->UpperSilhouetteBackDataList, -1, -1, Rect.left+Rect.Width()/2, Rect.top, Rect.Width()/2, Rect.Height(), 0.0, true); } if (i == 1) { // »óÀÇ Ä«¶ó DrawVector(canvasPrint->Handle, CombiData->UpperCollarFrontDataList, -1, -1, Rect.left, Rect.top, Rect.Width()/2, Rect.Height(), 0.0, true); DrawVector(canvasPrint->Handle, CombiData->UpperCollarBackDataList, -1, -1, Rect.left+Rect.Width()/2, Rect.top, Rect.Width()/2, Rect.Height(), 0.0, true); } if (i == 2) { // »óÀÇ ¼Ò¸Å DrawVector(canvasPrint->Handle, CombiData->UpperSleeveFrontDataList, -1, -1, Rect.left, Rect.top, Rect.Width()/2, Rect.Height(), 0.0, true); DrawVector(canvasPrint->Handle, CombiData->UpperSleeveBackDataList, -1, -1, Rect.left+Rect.Width()/2, Rect.top, Rect.Width()/2, Rect.Height(), 0.0, true); } if (3 <= i) { // ºÎÀÚÀç DrawVector(canvasPrint->Handle, CombiData->MaterialDataList[i-3], -1, -1, Rect.left, Rect.top, Rect.Width(), Rect.Height(), 0.0, true); } } else { // ÇÏÀÇ if (i == 0) { // ÇÏÀÇ ½Ç·ç¿§ DrawVector(canvasPrint->Handle, CombiData->LowerSilhouetteFrontDataList, -1, -1, Rect.left, Rect.top, Rect.Width()/2, Rect.Height(), 0.0, true); DrawVector(canvasPrint->Handle, CombiData->LowerSilhouetteBackDataList, -1, -1, Rect.left+Rect.Width()/2, Rect.top, Rect.Width()/2, Rect.Height(), 0.0, true); } if (i == 1) { // ÇÏÀÇ º§Æ® DrawVector(canvasPrint->Handle, CombiData->LowerBeltFrontDataList, -1, -1, Rect.left, Rect.top, Rect.Width()/2, Rect.Height(), 0.0, true); DrawVector(canvasPrint->Handle, CombiData->LowerBeltBackDataList, -1, -1, Rect.left+Rect.Width()/2, Rect.top, Rect.Width()/2, Rect.Height(), 0.0, true); } if (3 <= i) { // ºÎÀÚÀç DrawVector(canvasPrint->Handle, CombiData->MaterialDataList[i-3], -1, -1, Rect.left, Rect.top, Rect.Width(), Rect.Height(), 0.0, true); } } CellPos.x += rzstrgrdStyle->ColWidths[i] + 1; } } } //--------------------------------------------------------------------------- void __fastcall TWorkSheetForm::PrintDXFImage(TCanvas *canvasPrint, double dRatio) { TRect Rect; UINT uFormat; SIZE Size; String CellText; POINT CellPos; HDC dcDst = NULL; TDXFData *dxfData = NULL; if (canvasPrint) { CellPos.x = dxfGrid->Left; CellPos.y = dxfGrid->Top + dxfGrid->RowHeights[0] + 2; for (int i = 0; i < dxfGrid->ColCount; i++) { canvasPrint->Brush->Color = clWhite; canvasPrint->Pen->Color = clBlack; canvasPrint->Font->Color = clBlack; // 2px ¿©¹éÀ» ÁØ´Ù Rect.left = (CellPos.x + 2) * dRatio; Rect.top = (CellPos.y + 2) * dRatio; Rect.right = (CellPos.x + dxfGrid->ColWidths[i] - 1) * dRatio; Rect.bottom = (CellPos.y + dxfGrid->RowHeights[1] - 1) * dRatio; dxfData = (TDXFData *)DXFDataList->Items[i]; DrawVector(canvasPrint->Handle, dxfData->VectorList, -1, -1, Rect.left, Rect.top, Rect.Width(), Rect.Height(), 0.0, true); CellPos.x += dxfGrid->ColWidths[i] + 1; } } } //--------------------------------------------------------------------------- // ÆË¾÷À¸·Î ¶ç¾îÁø ¾Æ·¡ ÄÄÆ÷³ÍÆ®(TImage³ª TRzStringGrid) À§Ä¡¿¡ ÇØ´çÇÏ´Â VectorData¸¦ °¡Á®¿Â´Ù - by monkman (2011.02.18) void __fastcall TWorkSheetForm::ExtractVectorDataListFromPopupComponent(TComponent *Component, TList *VectorList) { TList *FrontDataList = NULL, *BackDataList = NULL; TImage *Image = NULL; TRzStringGrid *StringGrid = NULL; int ACol, ARow; TDXFData *dxfData = NULL; Image = dynamic_cast(Component); StringGrid = dynamic_cast(Component); if (Image) { if (Image == imgTitle) { } if (Image == imgPattern) { } if (Image == imgDesign || Image == imgDesign2) { if (CombiData->Type != TP_PANTS && CombiData->Type != TP_SKIRT) { // »óÀÇ FrontDataList = CombiData->UpperWholeFrontDataList; BackDataList = CombiData->UpperWholeBackDataList; } else { // ÇÏÀÇ FrontDataList = CombiData->LowerWholeFrontDataList; BackDataList = CombiData->LowerWholeBackDataList; } } } if (StringGrid) { if (StringGrid == rzstrgrdStyle) { if (CombiData) { if (CombiData->Type != TP_PANTS && CombiData->Type != TP_SKIRT) { // »óÀÇ if (StringGrid->Col == 0) { FrontDataList = CombiData->UpperSilhouetteFrontDataList; BackDataList = CombiData->UpperSilhouetteBackDataList; } else if (StringGrid->Col == 1) { FrontDataList = CombiData->UpperCollarFrontDataList; BackDataList = CombiData->UpperCollarBackDataList; } else if (StringGrid->Col == 2) { FrontDataList = CombiData->UpperSleeveFrontDataList; BackDataList = CombiData->UpperSleeveBackDataList; } else if (3 <= StringGrid->Col && StringGrid->Col <= 9) { FrontDataList = CombiData->MaterialDataList[StringGrid->Col-3]; } } else { // ÇÏÀÇ if (StringGrid->Col == 0) { FrontDataList = CombiData->LowerSilhouetteFrontDataList; BackDataList = CombiData->LowerSilhouetteBackDataList; } else if (StringGrid->Col == 1) { FrontDataList = CombiData->LowerBeltFrontDataList; BackDataList = CombiData->LowerBeltBackDataList; } else if (3 <= StringGrid->Col && StringGrid->Col <= 9) { FrontDataList = CombiData->MaterialDataList[StringGrid->Col-3]; } } } } if (StringGrid == dxfGrid) { if (CombiData) { if (0 <= StringGrid->Col && StringGrid->Col < DXFDataList->Count) { dxfData = (TDXFData *)DXFDataList->Items[StringGrid->Col]; FrontDataList = dxfData->VectorList; } } } } //AlignDataList(VectorList, FrontDataList, BackDataList); } //--------------------------------------------------------------------------- // ¾ÕÆÇ º¤Å͵¥ÀÌÅÍ¿Í µÞÆÇ º¤Å͵¥ÀÌÅ͸¦ Á¤·ÄÇÏ¿© ÇϳªÀÇ µ¥ÀÌÅÍ·Î ¸¸µé¾îÁØ´Ù ¿­±â¿Í ÇÕ¼º¿¡¼­ ÀÌ¿ë) - by monkman (2011.02.18) void __fastcall TWorkSheetForm::AlignVectorDataList(TList *AlignDataList, TList *FrontDataList, TList *BackDataList) { } //--------------------------------------------------------------------------- // Vector¿Í BitmapÀ» »õ ĵ¹ö½º¿¡ ¿ÀÇÂÇÑ´Ù - monkman (2011.02.18) void __fastcall TWorkSheetForm::OpenCanvasFromVectorListBitmap(TList *VectorList, TTexpiaBitmap *Bitmap) { } //--------------------------------------------------------------------------- // Vector¿Í BitmapÀ» »õ ĵ¹ö½º¿¡ ÇÕ¼ºÇÑ´Ù - monkman (2011.02.18) void __fastcall TWorkSheetForm::MergeCanvasFromVectorListBitmap(TList *VectorList, TTexpiaBitmap *Bitmap) { } //--------------------------------------------------------------------------- #endif