//--------------------------------------------------------------------------- #include #pragma hdrstop #include "MarkChart_F.h" #include "KnitArrange.h" #include "MainImage.h" //--------------------------------------------------------------------------- #define IDS_FCAPTION StringTable[0] #define IDS_NEWBTN StringTable[1] #define IDS_MESSAGE StringTable[2] //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" //--------------------------------------------------------------------------- //#define MAX_VMCHART 14 //7.41 TMarkChartForm *MarkChartForm; //--------------------------------------------------------------------------- __fastcall TMarkChartForm::TMarkChartForm(TComponent* Owner) : TForm(Owner) { StringTable.Create(DirectoryItem, Language, "MarkChart"); SetSmallFont(Font); Caption = IDS_FCAPTION; sbNew->Caption = IDS_NEWBTN; sbDelete->Caption = IDS_COMMON_DELETE; MAX_VMCHART = Cmark.cnt; } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::FormCreate(TObject *Sender) { TIniFile *IniFile = NULL; ChartGrid->ColWidths[0] = 20; ChartGrid->ColWidths[1] = 170; ChartGrid->ColWidths[2] = 170; UseGrid->ColWidths[0] = 20; UseGrid->ColWidths[1] = 170; UseGrid->ColWidths[2] = 170; fullview = false; ClientHeight = ViewPanel->Top + 25; IniFile = new TIniFile(DirectoryItem + "\\Main.ini"); if (IniFile) { Left = IniFile->ReadInteger("MarkChart", "FormLeft", (Screen->Width-Width)>>1); Top = IniFile->ReadInteger("MarkChart", "FormTop", (Screen->Height-Height)>>1); if (Left < 0) Left = 100; if (Top < 0) Top = 100; delete IniFile; } MAX_VMCHART = Cmark.cnt; } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::FormDestroy(TObject *Sender) { TIniFile *IniFile = NULL; IniFile = new TIniFile(DirectoryItem + "\\Main.ini"); if (IniFile) { IniFile->WriteInteger("MarkChart", "FormLeft", Left); IniFile->WriteInteger("MarkChart", "FormTop", Top); delete IniFile; } // delete_mark(); } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::FormResize(TObject *Sender) { if (ClientWidth > 220) { sbDelete->Left = Panel->Width - sbDelete->Width - 10; sbNew->Left = sbDelete->Left - sbNew->Width; } sbChartView->Width = ViewPanel->Width - 4; } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::UseGridDrawCell(TObject *Sender, int Col, int Row, TRect &Rect, TGridDrawState State) { AnsiString str; int x, center; if (MainImageForm == NULL) return; if (MainImageForm->Arrange == NULL) return; if (Row < MainImageForm->Arrange->Dmark.cnt) { switch (Col) { case 0: str = Row+1; x = (UseGrid->ColWidths[0] - UseGrid->Canvas->TextWidth(str)) / 2; UseGrid->Canvas->TextOut(Rect.Left+x, Rect.Top + 5, str); break; case 1: UseGrid->Canvas->Brush->Color = clWhite; UseGrid->Canvas->Pen->Width = 2; MainImageForm->Arrange->Dmark.sp[Row]->micon->DrawMark(UseGrid->Canvas->Handle, Rect); break; case 2: str = AnsiString(MainImageForm->Arrange->Dmark.sp[Row]->mname); x = (UseGrid->ColWidths[2] - UseGrid->Canvas->TextWidth(str)) / 2; UseGrid->Canvas->TextOut(Rect.Left+x, Rect.Top + 5, str); break; } } } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::FrontBackChange(TObject *Sender) { TSpeedButton *sp = (TSpeedButton *) Sender; if (MainImageForm) { MainImageForm->Arrange->SetFrontBack(sp->Tag); } UseGrid->Repaint(); } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::sbNewClick(TObject *Sender) { int i, j, cnt, precnt; char oldset; bool find; // Byte chart_use[MAX_VMCHART+2], bmp_use[MAX_VMCHART+2]; Byte *chart_use, *bmp_use; chart_use = (Byte *)malloc(MAX_VMCHART + 2); bmp_use = (Byte *)malloc(MAX_VMCHART + 2); if (MainImageForm) { memset(chart_use, 0, MAX_VMCHART+2); memset(bmp_use, 0, MAX_VMCHART+2); oldset = MainImageForm->Arrange->Dmark.set&0x0F; precnt = MainImageForm->Arrange->Dmark.cnt; cnt = precnt; i = 2; IsMarkUse(chart_use, bmp_use); while (i < cnt) { if (chart_use[i] == 0) { for (j = i; j < cnt - 1; j++) { MainImageForm->Arrange->Dmark.sp[j] = MainImageForm->Arrange->Dmark.sp[j+1]; MainImageForm->Mark[j] = MainImageForm->Arrange->Dmark.sp[j+1]->micon; chart_use[j] = chart_use[j+1]; } MainImageForm->Arrange->Dmark.sp[j] = NULL; chart_use[j] = 0; MainImageForm->Arrange->Dmark.cnt--; cnt--; } else { i++; } } if (oldset >= cnt) { MainImageForm->Arrange->Dmark.set = (MainImageForm->Arrange->Dmark.set & 0x10) | (cnt-1); UseGrid->Row = cnt - 1; } RearrangeMarkBitmap(bmp_use); UseGrid->Repaint(); } free(chart_use); free(bmp_use); } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::UseGridClick(TObject *Sender) { int i, j, cnt; char oldset; // Byte chart_use[MAX_VMCHART+2]; Byte *chart_use; chart_use = (Byte *)malloc(MAX_VMCHART + 2); if (MainImageForm) { i = UseGrid->Row; cnt = MainImageForm->Arrange->Dmark.cnt; if (i < cnt) { if (sbDelete->Down) { // Mark Part Delete----- if (i >= 2) { memset(chart_use, 0, MAX_VMCHART+2); IsMarkUse(chart_use, NULL); oldset = MainImageForm->Arrange->Dmark.set & 0x0F; if (chart_use[i] == 0) { for (j = i; j < cnt - 1; j++) { MainImageForm->Arrange->Dmark.sp[j] = MainImageForm->Arrange->Dmark.sp[j+1]; MainImageForm->Mark[j] = MainImageForm->Arrange->Dmark.sp[j+1]->micon; } MainImageForm->Arrange->Dmark.sp[j] = NULL; cnt = MainImageForm->Arrange->Dmark.cnt--; } RearrangeMarkBitmap(NULL, i); } sbDelete->Down = false; if (oldset >= cnt) { MainImageForm->Arrange->Dmark.set = (MainImageForm->Arrange->Dmark.set & 0x10) | (cnt-1); UseGrid->Row = cnt - 1; } } else { // Mark Part Choice----Change Mark Set MainImageForm->Arrange->Dmark.set = (MainImageForm->Arrange->Dmark.set & 0x10) | i; } UseGrid->Repaint(); } } free(chart_use); } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::ChartGridDrawCell(TObject *Sender, int Col, int Row, TRect &Rect, TGridDrawState State) { AnsiString str; int x; if (Row < MAX_VMCHART) { switch (Col) { case 0: str = Row+1; x = (ChartGrid->ColWidths[0] - ChartGrid->Canvas->TextWidth(str)) / 2; ChartGrid->Canvas->TextOut(Rect.Left+x, Rect.Top + 5, str); break; case 1: Cmark.data[Row].micon->DrawMark(ChartGrid->Canvas->Handle, Rect); break; case 2: str = AnsiString(Cmark.data[Row].mname); x = (ChartGrid->ColWidths[2] - ChartGrid->Canvas->TextWidth(str)) / 2; ChartGrid->Canvas->TextOut(Rect.Left+x, Rect.Top + 5, str); break; } } } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::ChartGridDblClick(TObject *Sender) { int i, k, m, cnt; bool find = false; Tdesign_mark *dm; AnsiString str; if (MainImageForm) { i = ChartGrid->Row; if (i < Cmark.cnt) { dm = &MainImageForm->Arrange->Dmark; cnt = dm->cnt; str = AnsiString(Cmark.data[i].mname); for (m = 0; m < cnt; m++) { if (str==AnsiString(dm->sp[m]->mname)) { find = true; return; } } if (find == false) { MainImageForm->Arrange->Dmark.sp[cnt] = &Cmark.data[i]; MainImageForm->Arrange->Dmark.chart[cnt] = i; MainImageForm->Mark[cnt] = MainImageForm->Arrange->Dmark.sp[cnt]->micon; MainImageForm->Arrange->Dmark.cnt++; } } UseGrid->Repaint(); } } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::sbChartViewClick(TObject *Sender) { if (fullview) { fullview = false; ClientHeight = ViewPanel->Top + 25; } else { fullview = true; ClientHeight = ViewPanel->Top + 25 + ChartGrid->Height; } } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::FormShow(TObject *Sender) { if (MainImageForm) MainImageForm->Arrange->SetFrontBack(0); sbFront->Down = true; UseGrid->Row = 0; UseGrid->Repaint(); } //--------------------------------------------------------------------------- // Private ///////// //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::WMMOVE(TMessage &msg) { if (MainImageForm) { MainImageForm->iMainImageChange(); } } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::IsMarkUse(Byte *c_use, Byte *b_use) { int x, y; Byte *IP; TTexpiaBitmap *bmp = &MainImageForm->iMainImage->ArrayBitmap[1]; if (bmp->StartScanLine() == false) goto fail; for (y = 0; y < bmp->Height; y++) { IP = bmp->GetScanLine(y); for (x = 0; x < bmp->Width; x++, IP++) { c_use[*IP & 0x0F] = 1; } } bmp->StopScanLine(); if (b_use) { y = 2; b_use[0] = 0; b_use[1] = 1; for (x = 2; x < MAX_VMCHART+2; x++) { if (c_use[x]) { b_use[x] = y; y++; } } } return; fail: EXCEPTION_MESSAGE_OK(EC_MEMORY_LACK); } //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::RearrangeMarkBitmap(Byte *use, int index) { int x, y; Byte *IP, set; TTexpiaBitmap *bmp = &MainImageForm->iMainImage->ArrayBitmap[1]; if (bmp->StartScanLine() == false) goto fail; if (use) { // New Bitmap Rearrange for (y = 0; y < bmp->Height; y++) { IP = bmp->GetScanLine(y); for (x = 0; x < bmp->Width; x++, IP++) { *IP = (*IP&0x30) | use[*IP & 0x0F]; } bmp->PutScanLine(y); } } else { // Delete Bitmap Rearrange for (y = 0; y < bmp->Height; y++) { IP = bmp->GetScanLine(y); for (x = 0; x < bmp->Width; x++, IP++) { set = *IP & 0x0F; if (index < set) { *IP = (*IP&0x30) | (set - 1); } } bmp->PutScanLine(y); } } bmp->StopScanLine(); return; fail: EXCEPTION_MESSAGE_OK(EC_MEMORY_LACK); } //--------------------------------------------------------------------------- // Public ///////// //--------------------------------------------------------------------------- void __fastcall TMarkChartForm::SetFont() { SetSmallFont(Font); } //---------------------------------------------------------------------------