//--------------------------------------------------------------------------- #include #include #pragma hdrstop #include "SimpleWindow_F.h" #include "Common.h" #include "MainImage.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" //--------------------------------------------------------------------------- #define IDS_SHAPE StringTable[0] #define IDS_FULL StringTable[1] #define IDS_IRREGULAR StringTable[2] #define IDS_OFF StringTable[3] #define IDS_SET StringTable[4] #define IDS_ADDITION StringTable[5] #define IDS_SUBTRACTION StringTable[6] #define IDS_DELETEPT StringTable[7] #define IDS_CLOSE StringTable[8] #define IDS_SURFACEMULTI StringTable[9] #define IDS_BORDER StringTable[10] #define IDS_SURFACESINGLE StringTable[11] #define IDS_MAGIC StringTable[12] #define IDS_SURFACE StringTable[13] #define IDS_MULTISURFACEFILL StringTable[14] #define IDS_BORDERFILL StringTable[15] #define IDS_SINGLESURFACEFILL StringTable[16] //--------------------------------------------------------------------------- TSimpleWindowForm *SimpleWindowForm; //--------------------------------------------------------------------------- __fastcall TSimpleWindowForm::TSimpleWindowForm(TComponent* Owner) : TForm(Owner) { hWnd = ((TWinControl *)Owner)->Handle; } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::FormCreate(TObject *Sender) { //======================================================== StringTable.Create(DirectoryBin, Language, "SimpleWindow"); SetSmallFont(Font); sbShape->Caption = IDS_SHAPE; sbFull->Caption = IDS_FULL; sbOff->Caption = IDS_OFF; sbUndo->Caption = IDS_COMMON_UNDO; lbShape->Caption = IDS_COMMON_SIZE; sbShapeRectangle->Caption = IDS_COMMON_RECTANGLE; sbShapeEllipse->Caption = IDS_COMMON_ELLIPSE; sbShapeCircle->Caption = IDS_COMMON_CIRCLE; sbShapeSquare->Caption = IDS_COMMON_SQUARE; //======================================================== } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::sbShapeClick(TObject *Sender) { ExitItem(); InitItem(SWI_SHAPE); } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::sbFullClick(TObject *Sender) { TCursor cursor; TPItemImage *Image; pBITMAPHANDLE bh; RGNXFORM XForm; RECT rc; HRGN rgn; cursor = Screen->Cursor; Screen->Cursor = crHourGlass; if (Step > 0) MainImageForm->TempLabel->Visible = false; ExitItem(); Image = MainImageForm->iMainImage; bh = Image->Bitmap->Handle; MainImageForm->WorkArea->PushUndo(); MainImageForm->WorkArea->ResetRegion(MainImageForm->iMainImage); XForm.uViewPerspective = TOP_LEFT; XForm.nXScalarNum = 1; XForm.nXScalarDen = 1; XForm.nYScalarNum = 1; XForm.nYScalarDen = 1; XForm.nXOffset = 0; XForm.nYOffset = 0; rc.left = 0; rc.top = 0; rc.right = Image->Bitmap->Width; rc.bottom = Image->Bitmap->Height; L_SetBitmapRgnRect(bh, &XForm, &rc, L_RGN_SET); L_GetBitmapRgnHandle(bh, &XForm, &rgn); MainImageForm->WorkArea->SetMask(rgn); DeleteObject(rgn); Image->OutlineBitmapRgn(); Image->Repaint(); StatusItem(); MainImageForm->WorkAreaChange(); Screen->Cursor = cursor; PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::sbOffClick(TObject *Sender) { if (Step > 0) MainImageForm->TempLabel->Visible = false; ExitItem(); MainImageForm->WorkArea->PushUndo(); MainImageForm->WorkArea->ResetRegion(MainImageForm->iMainImage); MainImageForm->iMainImage->Repaint(); MainImageForm->WorkAreaChange(); PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::sbUndoClick(TObject *Sender) { TPoint sp, ep; AnsiString str; if (Step > 0) MainImageForm->TempLabel->Visible = false; MainImageForm->WorkArea->PopUndo(); #ifdef KNIT if (MainImageForm->WorkArea->IsRect(MainImageForm->iMainImage->Bitmap)==0) { MainImageForm->WorkArea->ResetRegion(MainImageForm->iMainImage); } #endif MainImageForm->iMainImage->OutlineBitmapRgn(); MainImageForm->iMainImage->Repaint(); MainImageForm->WorkAreaChange(); sp = Point(MainImageForm->WorkArea->Range.left, MainImageForm->WorkArea->Range.top); ep = Point(MainImageForm->WorkArea->Range.right-1, MainImageForm->WorkArea->Range.bottom-1); if (MainImageForm->CurrentUnit==uInch) { str = Format("%f x %f", OPENARRAY(TVarRec, (fabs(ep.x-sp.x)/MainImageForm->CanvasInfor.DotsPerInch, fabs(ep.y-sp.y)/MainImageForm->CanvasInfor.DotsPerInch))); lbShape->Caption = AnsiString(IDS_COMMON_SIZE) + " : " + str + "Inch"; } else if (MainImageForm->CurrentUnit==uCm) { str = Format("%f x %f", OPENARRAY(TVarRec, (2.54*fabs(ep.x-sp.x)/MainImageForm->CanvasInfor.DotsPerInch, 2.54*fabs(ep.y-sp.y)/MainImageForm->CanvasInfor.DotsPerInch))); lbShape->Caption = AnsiString(IDS_COMMON_SIZE) + " : " + str + "Cm"; } else { str = Format("%d x %d", OPENARRAY(TVarRec, (abs(ep.x-sp.x)+1, abs(ep.y-sp.y)+1))); lbShape->Caption = AnsiString(IDS_COMMON_SIZE) + " : " + str + "Dot"; } StatusItem(); } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::sbShapeRectangleClick(TObject *Sender) { SubItem = SWSI_RECTANGLE; MainImageForm->DrawRectangleLocate(Rect(0,0,0,0),0);///by jeegeo isDraw = false; MainImageForm->iMainImage->Repaint(); } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::sbShapeEllipseClick(TObject *Sender) { SubItem = SWSI_ELLIPSE; MainImageForm->DrawRectangleLocate(Rect(0,0,0,0),0);///by jeegeo isDraw = false; MainImageForm->iMainImage->Repaint(); } //--------------------------------------------------------------------------- // Private Method //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::InitItem(TSimpleWindowItem i) { Item = i; switch (Item) { case SWI_SHAPE: pnShape->Top = Panel->Height+4; ClientHeight = pnShape->Top+pnShape->Height; Parent->Height = ParentHeight+ClientHeight; pnShape->Enabled = true; pnShape->Visible = true; SubItem = sbShapeRectangle->Down ? SWSI_RECTANGLE : SWSI_ELLIPSE; break; } StatusItem(); Show(); } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::ExitItem() { switch (Item) { case SWI_SHAPE: if (Step>0) { if (isDraw) { MainImageForm->DrawRectangleLocate(Rect(0,0,0,0),0);///by jeegeo isDraw = false; } Step = 0; } pnShape->Enabled = false; pnShape->Visible = false; break; } ClientHeight = Panel->Height; Parent->Height = ParentHeight+ClientHeight; } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::StatusItem() { sbOff->Enabled = false; if (MainImageForm->WorkArea->Mask) sbOff->Enabled = true; sbUndo->Enabled = false; if (MainImageForm->WorkArea->StatusUndo()) sbUndo->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::RectangleMouseDown(TMouseButton Button, int X, int Y) { if (Button==mbLeft) { if (Step>0) { if (isDraw) { MainImageForm->DrawRectangleLocate(Rect(0,0,0,0),0); isDraw = false; } Second = Point(X, Y); yarnSecond = Temp; int diff = abs(First.x-Second.x) - abs(First.y-Second.y); if (SubItem==SWSI_CIRCLE||SubItem==SWSI_SQUARE){ //by jeegeo if (diff > 0) { if (First.x>Second.x) { Second.x+=diff; } else { Second.x-=diff; } } else { if (First.y>Second.y) { Second.y-=diff; } else { Second.y+=diff; } } } MainImageForm->WorkArea->SetShapeRegion(MainImageForm->iMainImage, First, Second, SubItem==SWSI_CIRCLE||SubItem==SWSI_ELLIPSE); #ifdef KNIT MainImageForm->WorkArea->ChangeBitmap(&(MainImageForm->KoMap->YarnMap)); MainImageForm->WorkArea->SetShapeRegion(MainImageForm->KoMap->YarnMap, yarnFirst, yarnSecond); MainImageForm->WorkArea->ChangeBitmap(&(MainImageForm->KoMap->YarnBitmap)); MainImageForm->WorkArea->SetShapeRegion(MainImageForm->KoMap->YarnBitmap, yarnFirst, yarnSecond); MainImageForm->WorkArea->ChangeBitmap(&(MainImageForm->iMainImage->Bitmap)); #endif StatusItem(); MainImageForm->WorkAreaChange(); MainImageForm->TempLabel->Visible = false; Step = 0; } else { MainImageForm->WorkArea->PushUndo(); MainImageForm->WorkArea->ResetRegion(MainImageForm->iMainImage); #ifdef KNIT MainImageForm->WorkArea->ChangeBitmap(&(MainImageForm->KoMap->YarnMap)); MainImageForm->WorkArea->PushUndo(); MainImageForm->WorkArea->ResetRegion(MainImageForm->iMainImage); MainImageForm->WorkArea->ChangeBitmap(&(MainImageForm->KoMap->YarnBitmap)); MainImageForm->WorkArea->PushUndo(); MainImageForm->WorkArea->ResetRegion(MainImageForm->iMainImage); MainImageForm->WorkArea->ChangeBitmap(&(MainImageForm->iMainImage->Bitmap)); #endif First = Point(X, Y); yarnFirst = Temp; MainImageForm->TempLabel->Visible = true; isDraw = false; Step = 11; } } } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::RectangleMouseMove(int X, int Y) { AnsiString str; int lx, ly, sx, sy; TSize size; if (Step>0) { if (isDraw) { #ifndef WEAVE int fx,fy; if(Second.xDrawEllipseLocate(Rect(fx,fy,Second.x,Second.y),0);///by jeegeo else MainImageForm->DrawRectangleLocate(Rect(fx,fy,Second.x,Second.y),0);///by jeegeo #endif } Second = Point(X, Y); if(Second.x>First.x)Second.x++; if(Second.y>First.y)Second.y++; int diff = abs(First.x-Second.x) - abs(First.y-Second.y); if (SubItem==SWSI_CIRCLE||SubItem==SWSI_SQUARE){ //by jeegeo if (diff > 0) { if (First.x>Second.x) { Second.x+=diff; } else { Second.x-=diff; } } else { if (First.y>Second.y) { Second.y-=diff; } else { Second.y+=diff; } } } if (MainImageForm->CurrentUnit==uInch) { str = Format("%f x %f", OPENARRAY(TVarRec, (fabs(Second.x-First.x)/MainImageForm->CanvasInfor.DotsPerInch, fabs(Second.y-First.y)/MainImageForm->CanvasInfor.DotsPerInch))); lbShape->Caption = AnsiString(IDS_COMMON_SIZE) + " : " + str + "Inch"; } else if (MainImageForm->CurrentUnit==uCm) { str = Format("%f x %f", OPENARRAY(TVarRec, (2.54*fabs(Second.x-First.x)/MainImageForm->CanvasInfor.DotsPerInch, 2.54*fabs(Second.y-First.y)/MainImageForm->CanvasInfor.DotsPerInch))); lbShape->Caption = AnsiString(IDS_COMMON_SIZE) + " : " + str + "Cm"; } else { str = Format("%d x %d", OPENARRAY(TVarRec, (abs(Second.x-First.x)+1, abs(Second.y-First.y)+1))); lbShape->Caption = AnsiString(IDS_COMMON_SIZE) + " : " + str + "Dot"; } MainImageForm->TempLabel->Caption = str; lx = Second.x-First.x; ly = Second.y-First.y; size.cx = MainImageForm->TempLabel->Width; size.cy = MainImageForm->TempLabel->Height; sx = MainImageForm->iMainImage->BitmapToCanvasX(Second.x); sy = MainImageForm->iMainImage->BitmapToCanvasY(Second.y); if (ly>0) { sy = sy-15-size.cy; if (lx>0) sx = sx-20-size.cx; else sx = sx+15; } else { sy = sy+15; if (lx>0) sx = sx-15-size.cx; else sx = sx+15; } MainImageForm->TempLabel->Left = sx; MainImageForm->TempLabel->Top = sy; MainImageForm->TempLabel->Update(); int fx,fy; if(Second.xDrawEllipseLocate(Rect(fx,fy,Second.x,Second.y));///by jeegeo else MainImageForm->DrawRectangleLocate(Rect(fx,fy,Second.x,Second.y));///by jeegeo isDraw = true; } } //--------------------------------------------------------------------------- // Public Method //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::InitForm() { ParentHeight = Parent->Height+20; sbShape->Down = true; sbShapeRectangle->Down = true; InitItem(SWI_SHAPE); Step = 0; #if defined(KNIT) sbShapeEllipse->Enabled = false; sbShapeCircle->Enabled = false; #endif } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::ExitForm() { MainImageForm->DrawRectangleLocate(Rect(0,0,0,0),0); if (Step>0) { switch (Step) { case 11: if (isDraw) { isDraw = false; } MainImageForm->TempLabel->Visible = false; break; } MainImageForm->WorkArea->ResetRegion(MainImageForm->iMainImage); Step = 0; } ExitItem(); } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::iMainImageChange() { if (isDraw) { MainImageForm->TempLabel->Left = 0; MainImageForm->TempLabel->Top = 0; MainImageForm->TempLabel->Caption = ""; MainImageForm->iMainImage->Repaint(); //ÀÛ¾÷±¸¿ª Àܻ󳲴 °Í¶§¹®¿¡ isDraw = false; } } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::iMainImageMouseDown(TMouseButton Button, TShiftState Shift, int X, int Y) { MainImageForm->DrawRectangleLocate(Rect(0,0,0,0),0);///by jeegeo #if defined(KNIT) /* dog int tempX, tempY; TKnitArrange *ka; ka = MainImageForm->Arrange; if (DesignMode == D_KNIT) { tempX = (X*ka->kdsn.wpi)/MainImageForm->CanvasInfor.DotsPerInch; tempY = (Y*ka->kdsn.cpi)/MainImageForm->CanvasInfor.DotsPerInch; X = (tempX*MainImageForm->CanvasInfor.DotsPerInch)/ka->kdsn.wpi; Y = (tempY*MainImageForm->CanvasInfor.DotsPerInch)/ka->kdsn.cpi; } */ int tempX, tempY, x, y, z; TPKoData *temp; if ((DesignMode == D_YARN || DesignMode == D_KNIT || DesignMode == D_MARK) && MainImageForm->KoMap != NULL) { z = MainImageForm->KoMap->ReturnKo(MainImageForm->KoMap->ReturnKo(X, Y)); if (z == NULL) return; x = z%MainImageForm->KoMap->courses; y = z/MainImageForm->KoMap->courses; Temp = Point(x, y); if(Temp.xKoMap->Ko + yarnFirst.x + yarnFirst.y*MainImageForm->KoMap->courses; First.x = temp->pos.ex; temp = MainImageForm->KoMap->Ko + Temp.x + Temp.y*MainImageForm->KoMap->courses; X = temp->pos.sx; } else { temp = MainImageForm->KoMap->Ko + yarnFirst.x + yarnFirst.y*MainImageForm->KoMap->courses; First.x = temp->pos.sx; temp = MainImageForm->KoMap->Ko + Temp.x + Temp.y*MainImageForm->KoMap->courses; X = temp->pos.ex; } if(Temp.yKoMap->Ko + yarnFirst.x + yarnFirst.y*MainImageForm->KoMap->courses; First.y = temp->pos.ey; temp = MainImageForm->KoMap->Ko + Temp.x + Temp.y*MainImageForm->KoMap->courses; Y = temp->pos.sy; } else { temp = MainImageForm->KoMap->Ko + yarnFirst.x + yarnFirst.y*MainImageForm->KoMap->courses; First.y = temp->pos.sy; temp = MainImageForm->KoMap->Ko + Temp.x + Temp.y*MainImageForm->KoMap->courses; Y = temp->pos.ey; } } #endif switch (Item) { case SWI_SHAPE: RectangleMouseDown(Button, X, Y); MainImageForm->iMainImage->Repaint(); break; } } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::iMainImageMouseMove(TShiftState Shift, int X, int Y) { #if defined(KNIT) int tempX, tempY, x, y, z; TPKoData *temp; if ((DesignMode == D_YARN || DesignMode == D_KNIT || DesignMode == D_MARK) && MainImageForm->KoMap != NULL) { z = MainImageForm->KoMap->ReturnKo(MainImageForm->KoMap->ReturnKo(X, Y)); if (z == NULL) return; x = z%MainImageForm->KoMap->courses; y = z/MainImageForm->KoMap->courses; Temp = Point(x, y); int fx,fy; if(Second.xDrawEllipseLocate(Rect(fx,fy,Second.x,Second.y),0);///by jeegeo else MainImageForm->DrawRectangleLocate(Rect(fx,fy,Second.x,Second.y),0);///by jeegeo isDraw = false; } if(Temp.xKoMap->Ko + yarnFirst.x + yarnFirst.y*MainImageForm->KoMap->courses; First.x = temp->pos.ex; temp = MainImageForm->KoMap->Ko + Temp.x + Temp.y*MainImageForm->KoMap->courses; X = temp->pos.sx; } else { temp = MainImageForm->KoMap->Ko + yarnFirst.x + yarnFirst.y*MainImageForm->KoMap->courses; First.x = temp->pos.sx; temp = MainImageForm->KoMap->Ko + Temp.x + Temp.y*MainImageForm->KoMap->courses; X = temp->pos.ex; } if(Temp.yKoMap->Ko + yarnFirst.x + yarnFirst.y*MainImageForm->KoMap->courses; First.y = temp->pos.ey; temp = MainImageForm->KoMap->Ko + Temp.x + Temp.y*MainImageForm->KoMap->courses; Y = temp->pos.sy; } else { temp = MainImageForm->KoMap->Ko + yarnFirst.x + yarnFirst.y*MainImageForm->KoMap->courses; First.y = temp->pos.sy; temp = MainImageForm->KoMap->Ko + Temp.x + Temp.y*MainImageForm->KoMap->courses; Y = temp->pos.ey; } } #endif switch (Item) { case SWI_SHAPE: RectangleMouseMove(X, Y); break; } } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::iMainImagePaint() { isDraw = false; } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::sbShapeSquareClick(TObject *Sender) { SubItem = SWSI_SQUARE; MainImageForm->DrawRectangleLocate(Rect(0,0,0,0),0);///by jeegeo isDraw = false; MainImageForm->iMainImage->Repaint(); } //--------------------------------------------------------------------------- void __fastcall TSimpleWindowForm::sbShapeCircleClick(TObject *Sender) { SubItem = SWSI_CIRCLE; MainImageForm->DrawRectangleLocate(Rect(0,0,0,0),0);///by jeegeo isDraw = false; MainImageForm->iMainImage->Repaint(); } //---------------------------------------------------------------------------