//--------------------------------------------------------------------------- #include #pragma hdrstop #include "YarnChart_F.h" #include "MainImage.h" #include "Palette.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "RXSpin" #pragma resource "*.dfm" TYarnChartForm *YarnChartForm; //--------------------------------------------------------------------------- __fastcall TYarnChartForm::TYarnChartForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::SetFont() { SetSmallFont(Font); } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::FormCreate(TObject *Sender) { SetSmallFont(Font); YarnGrid->ColWidths[0] = 30; YarnGrid->ColWidths[1] = 170; YarnGrid->ColWidths[2] = 80; YarnGrid->ColWidths[3] = 60; TIniFile *IniFile = NULL; IniFile = new TIniFile(DirectoryItem + "\\Main.ini"); if (IniFile) { Left = IniFile->ReadInteger("YarnChart", "FormLeft", (Screen->Width-Width)>>1); Top = IniFile->ReadInteger("YarnChart", "FormTop", (Screen->Height-Height)>>1); delete IniFile; } } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::FormDestroy(TObject *Sender) { TIniFile *IniFile = NULL; IniFile = new TIniFile(DirectoryItem + "\\Main.ini"); if (IniFile) { IniFile->WriteInteger("YarnChart", "FormLeft", Left); IniFile->WriteInteger("YarnChart", "FormTop", Top); delete IniFile; } } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::YarnGridDrawCell(TObject *Sender, int Col, int Row, TRect &Rect, TGridDrawState State) { AnsiString str; Tdesign_yarn *tdy; int x; if (Row == 0) { switch (Col) { case 0: str = "No."; break; case 1: str = "Color"; break; case 2: str = "Type"; break; case 3: str = "Number"; break; } x = (YarnGrid->ColWidths[Col] - YarnGrid->Canvas->TextWidth(str)) / 2; YarnGrid->Canvas->TextOut(Rect.Left+x, Rect.Top + 5, str); } else { if (MainImageForm == NULL) return; tdy = &MainImageForm->Arrange->Dyarn; if (Row <= tdy->cnt) { switch (Col) { case 0: str = IntToStr(Row); x = (YarnGrid->ColWidths[0] - YarnGrid->Canvas->TextWidth(str)) / 2; YarnGrid->Canvas->TextOut(Rect.Left+x, Rect.Top + 5, str); break; case 1: DrawColorChip(YarnGrid->Canvas, Rect, Row); break; case 2: if (tdy->data[Row].type == DYT_NORMAL) { str = "Normal"; } else { str = "Melange"; } x = (YarnGrid->ColWidths[2] - YarnGrid->Canvas->TextWidth(str)) / 2; YarnGrid->Canvas->TextOut(Rect.Left+x, Rect.Top + 5, str); break; case 3: str = IntToStr(tdy->data[Row].cnt); x = (YarnGrid->ColWidths[3] - YarnGrid->Canvas->TextWidth(str)) / 2; YarnGrid->Canvas->TextOut(Rect.Left+x, Rect.Top + 5, str); break; } } } } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::YarnGridDblClick(TObject *Sender) { if (YarnGrid->Col == 1 && YarnGrid->Row) ExchangeColor(1, YarnGrid->Row, chipX); } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::YarnGridMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Tdesign_yarn *tdy; int row, col; YarnGrid->MouseToCell(X, Y, col, row); if (MainImageForm && row) { tdy = &MainImageForm->Arrange->Dyarn; YarnGrid->EditorMode = false; if (row <= tdy->cnt) { switch (col) { case 1: chipX = X; break; case 2: if (tdy->data[row].type == DYT_NORMAL) { tdy->data[row].type = DYT_MELANGE; } else { tdy->data[row].type = DYT_NORMAL; tdy->data[row].cnt = 1; } break; case 3: if (tdy->data[row].type == DYT_MELANGE) YarnGrid->EditorMode = true; else YarnGrid->EditorMode = false; break; } tdy->set = row; } YarnGrid->Repaint(); } } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::YarnGridSelectCell(TObject *Sender, int Col, int Row, bool &CanSelect) { if (MainImageForm) { if (CanSelect) { if (Row && Row <= MainImageForm->Arrange->Dyarn.cnt) { switch (Col) { case 3: if (MainImageForm->Arrange->Dyarn.data[Row].type == DYT_MELANGE) YarnGrid->Options<Options>>goEditing; } } } } } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::YarnGridKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { Tdesign_yarn *tdy; int cnt; if (Key==VK_RETURN) { tdy = &MainImageForm->Arrange->Dyarn; cnt = StrToInt(YarnGrid->Cells[3][YarnGrid->Row]); YarnGrid->Cells[3][YarnGrid->Row] = ""; if (cnt < 1) cnt = 1; if (cnt > 8) cnt = 8; tdy->data[YarnGrid->Row].cnt = cnt; YarnGrid->EditorMode = false; YarnGrid->Col = 1; YarnGrid->Repaint(); } } //--------------------------------------------------------------------------- /// Private /////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::DrawColorChip(TCanvas *grid, RECT r, int index) { int sx, sy, w, h, cnt, i; Tdesign_yarn *tdy; tdy = &MainImageForm->Arrange->Dyarn; cnt = tdy->data[index].cnt; w = ((r.right - r.left - 2) / cnt) - 2; h = r.bottom - r.top - 4; sx = r.left + 2; sy = r.top + 2; grid->Pen->Width = 2; for (i = 0; i < cnt; i++) { grid->Brush->Color = MainImageForm->Palette->ColorData[tdy->data[index].color[i]]->Color; grid->Rectangle(sx, sy, sx + w, sy + h); sx = sx + w + 2; } } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::ExchangeColor(int col, int row, int x) { TRect r; int w, index, dw; Tdesign_yarn *tdy; tdy = &MainImageForm->Arrange->Dyarn; if (row <= tdy->cnt) { r = YarnGrid->CellRect(col, row); w = (r.Right - r.Left - 4) / tdy->data[row].cnt; index = (x - (r.Left + 2)) / w; if (index) { tdy->data[row].color[index] = PaletteForm->DIB256Palette->ChoiceIndex; } } } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::YarnRearrange() { int x, y, i; Byte *IP, color[256]; Tdesign_yarn *tdy; TTexpiaBitmap *bmp; if (MainImageForm) { bmp = &MainImageForm->iMainImage->ArrayBitmap[0]; memset(color, 0, 256); bmp->StartScanLine(); for (y = 0; y < bmp->Height; y++) { IP = bmp->GetScanLine(y); for (x = 0; x < bmp->Width; x++, IP++) { color[*IP] = 1; } } bmp->StopScanLine(); tdy = &MainImageForm->Arrange->Dyarn; tdy->cnt = 0; for (i = 2; i < 256; i++) { if (color[i]) { tdy->cnt++; tdy->data[tdy->cnt].type = DYT_NORMAL; tdy->data[tdy->cnt].cnt = 1; memset(tdy->data[tdy->cnt].color, 0, 8); tdy->data[tdy->cnt].color[0] = i; } } YarnGrid->Repaint(); } } //--------------------------------------------------------------------------- void __fastcall TYarnChartForm::cbHairClick(TObject *Sender) { bool check = cbHair->Checked; lbLength->Enabled = check; spLength->Enabled = check; lbDensity->Enabled = check; spDensity->Enabled = check; } //---------------------------------------------------------------------------