//--------------------------------------------------------------------------- #include #pragma hdrstop #include #include "Define.h" #include "Windowlib_F.h" #include "MainImage.h" #include "Main.h" #include "MainMenu.h" #include "FullView.h" #include "Window.h" #include "Palette.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" //--------------------------------------------------------------------------- #define IDS_WINDOW StringTable[0] #define IDS_NUMBER StringTable[1] #define IDS_READ StringTable[2] #define IDS_EXIT StringTable[3] #define IDS_DELETE StringTable[4] TWindowLibForm *WindowLibForm; //--------------------------------------------------------------------------- __fastcall TWindowLibForm::TWindowLibForm(TComponent* Owner) : TForm(Owner) { StringTable.Create(DirectoryItem, Language, "WindowLib"); SetSmallFont(Font); Caption = IDS_WINDOW; Label1->Caption = IDS_NUMBER; Read->Caption = IDS_READ; Exit->Caption = IDS_EXIT; delete1->Caption = IDS_DELETE; } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::ReadClick(TObject *Sender) { int n; if (MainImageForm == NULL) return; MainImageForm->WorkArea->PushUndo(); if (!WindowListView->Selected) return; if(MainMenuForm->Item != T_WIN)MainMenuForm->InitWindowForm(); if (WindowForm->rbSet->Checked) WindowForm->ResetBitmapRegion(); ExitItem(); n = WindowListView->Selected->Index; MainForm->sWork = n + 1; AnsiString WFileName = DirectoryItem + "\\" + MainForm->sWork + "wa.tex"; MainImageForm->WLoadFile(WFileName, gffTEX); SetWindowWork(); MainForm->WReopenMove = true; } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::UpdateItems() { WindowListView->Items->Clear(); WindowImageList->Clear(); TFileInfor *FileInfo = NULL; TListItem *pItem = NULL; int imgindex = 0; AnsiString FileName; TTexVersion *ver = NULL; HANDLE hFile = INVALID_HANDLE_VALUE; TPException ec = EC_NONE; int COUNT = 0; if ((FileInfo = new TFileInfor)==NULL) { ec = EC_MEMORY_LACK; goto fail; } if ((FileInfo->Bitmap = new Graphics::TBitmap)==NULL) { ec = EC_MEMORY_LACK; goto fail; } for (int i = 1 ; i <= 10 ; i++) { FileName = i; FileName = DirectoryItem + "\\" + FileName + "wa.tex"; if ((hFile = CreateFile(FileName.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) goto next; ver = new TTexVersion; if (!LoadFromTexpiaTag(hFile, FileInfo, ver)) goto next; WindowImageList->Add(FileInfo->Bitmap, NULL); pItem = WindowListView->Items->Add(); pItem->ImageIndex = imgindex; imgindex++; COUNT ++; // MainForm->ReOpen1->Enabled = true; CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE; if (ver) { delete ver; ver = NULL; } } Label1->Caption = IDS_NUMBER + IntToStr(COUNT); if (FileInfo) delete FileInfo; return; fail: EXCEPTION_MESSAGE_OK(ec); next: Label1->Caption = IDS_NUMBER + IntToStr(COUNT); if (FileInfo) delete FileInfo; if (ver) { delete ver; ver = NULL; } return; } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::FormClose(TObject *Sender, TCloseAction &Action) { // MainForm->WorkArea1->Checked = false; Visible = false; if (FOnUpdateMenu) FOnUpdateMenu(Sender); } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::FormCreate(TObject *Sender) { UpdateItems(); } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::ExitClick(TObject *Sender) { // MainForm->WorkArea1->Checked = false; Visible = false; if (FOnUpdateMenu) FOnUpdateMenu(Sender); } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if((Key == 65 || Key == 83 )) MainImageForm->iMainImageKeyDown(Key); //È®´ëÃà¼Ò ´ÜÃàŰ·Î if(Key == 46) delete1Click(this); } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::delete1Click(TObject *Sender) { int n; if (!WindowListView->Selected) return; n = WindowListView->Selected->Index; TRegIniFile *RegIniFile=NULL; RegIniFile = new TRegIniFile(RegFilename); RegIniFile->RootKey = HKEY_LOCAL_MACHINE; RegIniFile->OpenKey(RegFilename,true); AnsiString s; if (RegIniFile) { s = RegIniFile->ReadString("WorkArea", IntToStr(n), ""); DeleteFile(DirectoryItem + "\\" + s); DeleteFile(DirectoryItem + "\\" + s + "wa.tex"); RegIniFile->DeleteKey("WorkArea", IntToStr(n)); } pBITMAPHANDLE bh = MainImageForm->iMainImage->uBitmap->Handle; TMenuItem *item = new TMenuItem(NULL); AnsiString t, OldName, NewName; if (RegIniFile) { for(int i=StrToInt(s);i<9;i++){ t = RegIniFile->ReadString("WorkArea", IntToStr(i), ""); if(t != ""){ t = StrToInt(t); OldName = t; NewName = StrToInt(t) - 1; RegIniFile->WriteString("WorkArea", IntToStr(i-1), t-1); RegIniFile->DeleteKey("WorkArea", t-1); RenameFile(DirectoryItem + "\\" + OldName, DirectoryItem + "\\" + NewName); DeleteFile(DirectoryItem + "\\" + OldName); RenameFile(DirectoryItem + "\\" + OldName + "wa.tex", DirectoryItem + "\\" + NewName + "wa.tex"); DeleteFile(DirectoryItem + "\\" + OldName + "wa.tex"); } } delete RegIniFile; } UpdateItems(); } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::SetWindow() { int i, j; TCursor OldCursor; Byte *WBP=NULL, *MP=NULL; bool mbc = false, mmc = false; TPItemImage *Image = MainImageForm->iMainImage; TTexpiaBitmap *tempBitmap = NULL; // convert by celberus HDC tempDC = NULL; // convert by celberus OldCursor = Screen->Cursor; Screen->Cursor = crHourGlass; Image->SubEnabled = true; // if ((MainImageForm->window.Bitmap = new TUnionBitmap) == NULL) goto fail; // convert by celberus // if ((MainImageForm->window.Mask = new TTexpiaBitmap) == NULL) goto fail; MainImageForm->window.s.x = MainImageForm->WorkArea->Range.left; MainImageForm->window.s.y = MainImageForm->WorkArea->Range.top; MainImageForm->window.e.x = MainImageForm->WorkArea->Range.right; MainImageForm->window.e.y = MainImageForm->WorkArea->Range.bottom; MainImageForm->window.size.x = MainImageForm->window.e.x - MainImageForm->window.s.x; MainImageForm->window.size.y = MainImageForm->window.e.y - MainImageForm->window.s.y; if (Image->uBitmap->BitsPerPixel==8) { MainImageForm->Palette->ToRGBQUAD(rgb, 256); mbc = Image->SubBitmap->Create(MainImageForm->window.e.x - MainImageForm->window.s.x, MainImageForm->window.e.y - MainImageForm->window.s.y, 8, rgb); if (mbc == false) goto fail; mmc = Image->SubMask->Create(MainImageForm->window.e.x - MainImageForm->window.s.x, MainImageForm->window.e.y - MainImageForm->window.s.y, 8, rgb); if (mmc == false) goto fail; // HDC hDC = Image->SubMask->CreateDC(); // BitBlt(hDC,0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,NULL,0,0,WHITENESS); Image->SubMask->UnionBitBlt(NULL,0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,0,0,WHITENESS, true); Image->SubBitmap->UnionBitBlt(NULL, 0, 0, MainImageForm->window.size.x, MainImageForm->window.size.y, 0, 0, WHITENESS, true); // convert by celberus // Image->SubMask->DeleteDC(hDC); /* if (!Image->SubBitmap->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); for (j=0; jwindow.size.x; j++, WBP++, MP++) { *WBP =0xD0; } Image->SubBitmap->PutScanLine(i); } Image->SubBitmap->StopScanLine(); */ /* if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { MP = Image->SubMask->GetScanLine(i); for (j=0; jwindow.size.x; j++, MP++) { *MP =0xD0; } Image->SubMask->PutScanLine(i); } Image->SubMask->StopScanLine(); */ tempBitmap = new TTexpiaBitmap; // if(!tempBitmap->Create(Image->SubBitmap->Width, Image->SubBitmap->Height, // Image->SubBitmap->BitsPerPixel, Image->SubBitmap->RGB)) goto fail; // tempDC = tempBitmap->CreateDC(); BitBlt(tempDC,0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,NULL,0,0,WHITENESS); tempBitmap->DeleteDC(tempDC); if (!tempBitmap->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = tempBitmap->GetScanLine(i); for (j=0; jwindow.size.x; j++, WBP++) { *WBP =0xD0; } tempBitmap->PutScanLine(i); } tempBitmap->StopScanLine(); MainImageForm->WorkArea->LoadFromFile(tempBitmap->Handle, DirectoryItem + "\\" + MainForm->sWork, false); // convert by celberus Image->WAOutlineBitmapRgn(tempBitmap, false); // tempDC = tempBitmap->CreateDC(); // if(tempDC == NULL) goto fail; // if(!Image->SubBitmap->UnionBitBlt(tempDC, 0, 0, tempBitmap->Width, tempBitmap->Height, 0, 0, SRCCOPY, true)) goto fail; // tempBitmap->DeleteDC(tempDC); // // Image->WAOutlineBitmapRgn(MainImageForm->iMainImage->SubMask, false); // need-conversion if (!Image->SubBitmap->StartScanLine()) goto fail; if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); MP = Image->SubMask->GetScanLine(i); for (j=0; jwindow.size.x; j++, WBP++, MP++) { if (*WBP==0xD0) { *MP = 0xFF; } else { *MP = 0x00; } } Image->SubBitmap->PutScanLine(i); Image->SubMask->PutScanLine(i); } Image->SubBitmap->StopScanLine(); Image->SubMask->StopScanLine(); /* if (!Image->SubBitmap->StartScanLine()) goto fail; if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); MP = Image->SubMask->GetScanLine(i); for (j=0; jwindow.size.x; j++, WBP++, MP++) { if (*MP==0xD0) { *MP = 0xFF; *WBP = 0xD0; } else { *WBP = *MP; *MP = 0x00; } } Image->SubBitmap->PutScanLine(i); Image->SubMask->PutScanLine(i); } Image->SubBitmap->StopScanLine(); Image->SubMask->StopScanLine(); */ }else { PaletteForm->DIB256Palette->GetBGCOLORREF(24); mbc = Image->SubBitmap->Create(MainImageForm->window.e.x - MainImageForm->window.s.x, MainImageForm->window.e.y - MainImageForm->window.s.y, 24); if (mbc == false) goto fail; mmc = Image->SubMask->Create(MainImageForm->window.e.x - MainImageForm->window.s.x, MainImageForm->window.e.y - MainImageForm->window.s.y, 24); if (mmc == false) goto fail; // HDC hDC = Image->SubMask->CreateDC(); // BitBlt(hDC,0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,NULL,0,0,WHITENESS); Image->SubMask->UnionBitBlt(NULL, 0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,0,0,WHITENESS, true); // convert by celberus Image->SubBitmap->UnionBitBlt(NULL, 0, 0, MainImageForm->window.size.x, MainImageForm->window.size.y, 0, 0, WHITENESS, true); // convert by celberus // Image->SubMask->DeleteDC(hDC); /* if (!Image->SubBitmap->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); for (j=0; j<3*MainImageForm->window.size.x; j++, WBP++, MP++) { *WBP =0xD0; } Image->SubBitmap->PutScanLine(i); } Image->SubBitmap->StopScanLine(); */ /* if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { MP = Image->SubMask->GetScanLine(i); for (j=0; j<3*MainImageForm->window.size.x; j++, MP++) { *MP =0xD0; } Image->SubMask->PutScanLine(i); } Image->SubMask->StopScanLine(); */ tempBitmap = new TTexpiaBitmap; // if(!tempBitmap->Create(Image->SubBitmap->Width, Image->SubBitmap->Height, // Image->SubBitmap->BitsPerPixel, Image->SubBitmap->RGB)) goto fail; // tempDC = tempBitmap->CreateDC(); BitBlt(tempDC,0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,NULL,0,0,WHITENESS); tempBitmap->DeleteDC(tempDC); if (!tempBitmap->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = tempBitmap->GetScanLine(i); for (j=0; j<3*MainImageForm->window.size.x; j++, WBP++, MP++) { *WBP =0xD0; } tempBitmap->PutScanLine(i); } tempBitmap->StopScanLine(); MainImageForm->WorkArea->LoadFromFile(tempBitmap->Handle, DirectoryItem + "\\" + MainForm->sWork, false); // convert by celberus Image->WAOutlineBitmapRgn(tempBitmap, false); // tempDC = tempBitmap->CreateDC(); // if(tempDC == NULL) goto fail; // if(!Image->SubBitmap->UnionBitBlt(tempDC, 0, 0, tempBitmap->Width, tempBitmap->Height, 0, 0, SRCCOPY, true)) goto fail; // tempBitmap->DeleteDC(tempDC); // // MainImageForm->WorkArea->LoadFromFile(MainImageForm->iMainImage->SubMask->Handle, DirectoryItem + "\\" + MainForm->sWork, false); // Image->WAOutlineBitmapRgn(MainImageForm->iMainImage->SubBitmap, false); // Image->WAOutlineBitmapRgn(MainImageForm->iMainImage->SubMask, false); // need-conversion if (!Image->SubBitmap->StartScanLine()) goto fail; if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); MP = Image->SubMask->GetScanLine(i); for (j=0; j<3*MainImageForm->window.size.x; j++, WBP++, MP++) { if (*WBP==0xD0) { *MP = 0xFF; } else { *MP = 0x00; } } Image->SubBitmap->PutScanLine(i); Image->SubMask->PutScanLine(i); } Image->SubBitmap->StopScanLine(); Image->SubMask->StopScanLine(); /* if (!Image->SubBitmap->StartScanLine()) goto fail; if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); MP = Image->SubMask->GetScanLine(i); for (j=0; j<3*MainImageForm->window.size.x; j++, WBP++, MP++) { if (*MP==0xD0) { *MP = 0xFF; *WBP = 0xD0; } else { *WBP = *MP; *MP = 0x00; } } Image->SubBitmap->PutScanLine(i); Image->SubMask->PutScanLine(i); } Image->SubBitmap->StopScanLine(); Image->SubMask->StopScanLine(); */ } Screen->Cursor = OldCursor; if(tempBitmap) delete tempBitmap; return; fail: if(tempBitmap) { // if(tempDC) tempBitmap->DeleteDC(tempDC); // delete tempBitmap; // } // convert by celberus EXCEPTION_MESSAGE_OK(EC_MEMORY_LACK); PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::SetWindowWork() { int i, j; TCursor OldCursor; Byte *WBP=NULL, *MP=NULL; bool mbc = false, mmc = false; TTexpiaBitmap *tempBitmap = NULL; // convert by celberus HDC tempDC = NULL; // convert by celberus TPItemImage *Image = MainImageForm->iMainImage; OldCursor = Screen->Cursor; Screen->Cursor = crHourGlass; Image->SubEnabled = true; // if ((MainImageForm->window.Bitmap = new TUnionBitmap) == NULL) goto fail; // convert by celberus // if ((MainImageForm->window.Mask = new TTexpiaBitmap) == NULL) goto fail; MainImageForm->window.size.x = MainImageForm->waWidth;//MainImageForm->window.e.x - MainImageForm->window.s.x; MainImageForm->window.size.y = MainImageForm->waHeight;//MainImageForm->window.e.y - MainImageForm->window.s.y; if (Image->uBitmap->BitsPerPixel==8) { MainImageForm->Palette->ToRGBQUAD(rgb, 256); mbc = Image->SubBitmap->Create(MainImageForm->waWidth, MainImageForm->waHeight, 8, rgb); if (mbc == false) goto fail; mmc = Image->SubMask->Create(MainImageForm->waWidth, MainImageForm->waHeight, 8, rgb); if (mmc == false) goto fail; // HDC hDC = Image->SubMask->CreateDC(); // BitBlt(hDC,0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,NULL,0,0,WHITENESS); Image->SubMask->UnionBitBlt(NULL,0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,0,0,WHITENESS, true); // convert by celberus Image->SubBitmap->UnionBitBlt(NULL, 0, 0, MainImageForm->window.size.x, MainImageForm->window.size.y, 0, 0, WHITENESS, true); // convert by celberus // Image->SubMask->DeleteDC(hDC); /* if (!Image->SubBitmap->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); for (j=0; jwindow.size.x; j++, WBP++, MP++) { *WBP =0xD0; } Image->SubBitmap->PutScanLine(i); } Image->SubBitmap->StopScanLine(); */ /* if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { MP = Image->SubMask->GetScanLine(i); for (j=0; jwindow.size.x; j++, MP++) { *MP =0xD0; } Image->SubMask->PutScanLine(i); } Image->SubMask->StopScanLine(); */ tempBitmap = new TTexpiaBitmap; // if(!tempBitmap->Create(Image->SubBitmap->Width, Image->SubBitmap->Height, // Image->SubBitmap->BitsPerPixel, Image->SubBitmap->RGB)) goto fail; // tempDC = tempBitmap->CreateDC(); BitBlt(tempDC,0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,NULL,0,0,WHITENESS); tempBitmap->DeleteDC(tempDC); if (!tempBitmap->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = tempBitmap->GetScanLine(i); for (j=0; jwindow.size.x; j++, WBP++, MP++) { *WBP =0xD0; } tempBitmap->PutScanLine(i); } tempBitmap->StopScanLine(); MainImageForm->WorkArea->LoadFromFile(tempBitmap->Handle, DirectoryItem + "\\" + MainForm->sWork, false); // convert by celberus Image->WAOutlineBitmapRgn(tempBitmap, false); // tempDC = tempBitmap->CreateDC(); // if(tempDC == NULL) goto fail; // if(!Image->SubBitmap->UnionBitBlt(tempDC, 0, 0, tempBitmap->Width, tempBitmap->Height, 0, 0, SRCCOPY, true)) goto fail; // tempBitmap->DeleteDC(tempDC); // // MainImageForm->WorkArea->LoadFromFile(MainImageForm->iMainImage->SubMask->Handle, DirectoryItem + "\\" + MainForm->sWork, false); // Image->WAOutlineBitmapRgn(MainImageForm->iMainImage->SubBitmap, false); // Image->WAOutlineBitmapRgn(MainImageForm->iMainImage->SubMask, false); // need-conversion if (!Image->SubBitmap->StartScanLine()) goto fail; if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); MP = Image->SubMask->GetScanLine(i); for (j=0; jwindow.size.x; j++, WBP++, MP++) { if (*WBP==0xD0) { *MP = 0xFF; } else { *MP = 0x00; } } Image->SubBitmap->PutScanLine(i); Image->SubMask->PutScanLine(i); } Image->SubBitmap->StopScanLine(); Image->SubMask->StopScanLine(); /* if (!Image->SubBitmap->StartScanLine()) goto fail; if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); MP = Image->SubMask->GetScanLine(i); for (j=0; jwindow.size.x; j++, WBP++, MP++) { if (*MP==0xD0) { *MP = 0xFF; } else { *WBP = *MP; *MP = 0x00; } } Image->SubBitmap->PutScanLine(i); Image->SubMask->PutScanLine(i); } Image->SubBitmap->StopScanLine(); Image->SubMask->StopScanLine(); */ }else { PaletteForm->DIB256Palette->GetBGCOLORREF(24); mbc = Image->SubBitmap->Create(MainImageForm->waWidth, MainImageForm->waHeight, 24); if (mbc == false) goto fail; mmc = Image->SubMask->Create(MainImageForm->waWidth, MainImageForm->waHeight, 24); if (mmc == false) goto fail; // HDC hDC = Image->SubMask->CreateDC(); // BitBlt(hDC,0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,NULL,0,0,WHITENESS); Image->SubMask->UnionBitBlt(NULL, 0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,0,0,WHITENESS, true); // convert by celberus Image->SubBitmap->UnionBitBlt(NULL, 0, 0, MainImageForm->window.size.x, MainImageForm->window.size.y, 0, 0, WHITENESS, true); // convert by celberus // Image->SubMask->DeleteDC(hDC); /* if (!Image->SubBitmap->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); for (j=0; j<3*MainImageForm->window.size.x; j++, WBP++, MP++) { *WBP =0xD0; } Image->SubBitmap->PutScanLine(i); } Image->SubBitmap->StopScanLine(); */ /* if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { MP = Image->SubMask->GetScanLine(i); for (j=0; j<3*MainImageForm->window.size.x; j++, MP++) { *MP =0xD0; } Image->SubMask->PutScanLine(i); } Image->SubMask->StopScanLine(); */ tempBitmap = new TTexpiaBitmap; // if(!tempBitmap->Create(Image->SubBitmap->Width, Image->SubBitmap->Height, // Image->SubBitmap->BitsPerPixel, Image->SubBitmap->RGB)) goto fail; // tempDC = tempBitmap->CreateDC(); BitBlt(tempDC,0,0,MainImageForm->window.size.x, MainImageForm->window.size.y,NULL,0,0,WHITENESS); tempBitmap->DeleteDC(tempDC); if (!tempBitmap->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = tempBitmap->GetScanLine(i); for (j=0; j<3*MainImageForm->window.size.x; j++, WBP++, MP++) { *WBP =0xD0; } tempBitmap->PutScanLine(i); } tempBitmap->StopScanLine(); MainImageForm->WorkArea->LoadFromFile(tempBitmap->Handle, DirectoryItem + "\\" + MainForm->sWork, false); // convert by celberus Image->WAOutlineBitmapRgn(tempBitmap, false); // tempDC = tempBitmap->CreateDC(); // if(tempDC == NULL) goto fail; // if(!Image->SubBitmap->UnionBitBlt(tempDC, 0, 0, tempBitmap->Width, tempBitmap->Height, 0, 0, SRCCOPY, true)) goto fail; // tempBitmap->DeleteDC(tempDC); // // MainImageForm->WorkArea->LoadFromFile(MainImageForm->iMainImage->SubMask->Handle, DirectoryItem + "\\" + MainForm->sWork, false); // Image->WAOutlineBitmapRgn(MainImageForm->iMainImage->SubBitmap, false); // Image->WAOutlineBitmapRgn(MainImageForm->iMainImage->SubMask, false); //need-conversion if (!Image->SubBitmap->StartScanLine()) goto fail; if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); MP = Image->SubMask->GetScanLine(i); for (j=0; j<3*MainImageForm->window.size.x; j++, WBP++, MP++) { if (*WBP==0xD0) { *MP = 0xFF; } else { *MP = 0x00; } } Image->SubBitmap->PutScanLine(i); Image->SubMask->PutScanLine(i); } Image->SubBitmap->StopScanLine(); Image->SubMask->StopScanLine(); /* if (!Image->SubBitmap->StartScanLine()) goto fail; if (!Image->SubMask->StartScanLine()) goto fail; for (i=0; iwindow.size.y; i++) { WBP = Image->SubBitmap->GetScanLine(i); MP = Image->SubMask->GetScanLine(i); for (j=0; j<3*MainImageForm->window.size.x; j++, WBP++, MP++) { if (*MP==0xD0) { *MP = 0xFF; } else { *WBP = *MP; *MP = 0x00; } } Image->SubBitmap->PutScanLine(i); Image->SubMask->PutScanLine(i); } Image->SubBitmap->StopScanLine(); Image->SubMask->StopScanLine(); */ } Screen->Cursor = OldCursor; if(tempBitmap) delete tempBitmap; return; fail: if(tempBitmap) { // if(tempDC) tempBitmap->DeleteDC(tempDC); // delete tempBitmap; // } // convert by celberus EXCEPTION_MESSAGE_OK(EC_MEMORY_LACK); PostMessage(hWnd, TPM_EXITFUNCTION, 0, 0); } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::FormKeyPress(TObject *Sender, char &Key) { switch (Key) { case 23: // Ctrl+W ÀÛ¾÷±¸¿ª ¼¼À̺ê if (MainImageForm->WorkArea && MainImageForm->WorkArea->Mask) MainForm->SaveClick(this); break; } } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::ExitItem() { WindowForm->Step = 0; MainImageForm->TempLabel->Visible = false; WindowForm->sbShape->Down = false; WindowForm->sbIrregular->Down = false; WindowForm->sbOutline->Down = false; } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::Save(TObject *Sender) { if(!MainImageForm->WorkArea->Mask)return; pBITMAPHANDLE bh = MainImageForm->iMainImage->uBitmap->RgnBitmap->Handle; // convert by celberus TMenuItem *item = new TMenuItem(NULL); // while(MainForm->ReOpen1->Count>10){ // delete MainForm->ReOpen1->Items[MainForm->ReOpen1->Count-1]; // } TRegIniFile *RegIniFile = NULL; AnsiString s, OldName, NewName; RegIniFile = new TRegIniFile(RegFilename); RegIniFile->RootKey = HKEY_LOCAL_MACHINE; RegIniFile->OpenKey(RegFilename,true); if (RegIniFile) { for(int i=9;i>-1;i--){ s = RegIniFile->ReadString("WorkArea", IntToStr(i), ""); if(s!=""){ s = StrToInt(s) + 1; OldName = StrToInt(s) - 1; NewName = s; RegIniFile->WriteString("WorkArea", IntToStr(i+1), s); RenameFile(DirectoryItem + "\\" + OldName, DirectoryItem + "\\" + NewName); DeleteFile(DirectoryItem + "\\" + OldName); RenameFile(DirectoryItem + "\\" + OldName + "wa.tex", DirectoryItem + "\\" + NewName + "wa.tex"); DeleteFile(DirectoryItem + "\\" + OldName + "wa.tex"); } } DeleteFile(DirectoryItem + "\\11"); RegIniFile->WriteString("WorkArea", IntToStr(0), "1"); MainImageForm->WorkArea->SaveToFile(bh, DirectoryItem + "\\1"); //======================================================================== MainForm->sWork = NewName; SetWindow(); TPItemImage *Image = MainImageForm->iMainImage; TTexpiaBitmap *tag = NULL; TRect src; src.Left = 0; src.Top = 0; src.Right = Image->SubBitmap->Width; src.Bottom = Image->SubBitmap->Height; // tag = new TTexpiaBitmap; // MakeTexpiaTag(tag, Image->SubBitmap, src, 0); MainForm->WaSave = true; MainImageForm->SaveToFile (DirectoryItem , "1wa.tex", 1, 2); MainForm->WaSave = false; UpdateItems(); //======================================================================== delete RegIniFile; } } //---------------------------------------------------------------------------- void __fastcall TWindowLibForm::WDeleteAll(TObject *Sender) { TRegIniFile *RegIniFile=NULL; RegIniFile = new TRegIniFile(RegFilename); RegIniFile->RootKey = HKEY_LOCAL_MACHINE; RegIniFile->OpenKey(RegFilename,true); AnsiString s; if (RegIniFile) { for(int i=9;i>-1;i--){ s = RegIniFile->ReadString("WorkArea", IntToStr(i), ""); if(s!=""){ DeleteFile(DirectoryItem + "\\" + s); DeleteFile(DirectoryItem + "\\" + s + "wa.tex"); RegIniFile->DeleteKey("WorkArea", IntToStr(i)); } } delete RegIniFile; } UpdateItems(); } //---------------------------------------------------------------------------- void __fastcall TWindowLibForm::TEMPSaveClick(TObject *Sender) { pBITMAPHANDLE bh = MainImageForm->iMainImage->uBitmap->RgnBitmap->Handle; // convert by celberus MainImageForm->WorkArea->SaveToFile(bh, DirectoryItem + "\\temp"); } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::iMainImageMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { TCursor OldCursor; TPItemImage *Image = MainImageForm->iMainImage; int hw, hh, mx, my; TSize size; if(WindowForm->rbAddition->Checked)TEMPSaveClick(this); //ADD ¸¦ À§ÇØ ±×Àü ÀÛ¾÷±¸¿ª save size.cx = Image->SubBitmap->Width; size.cy = Image->SubBitmap->Height; hw = size.cx / 2.0; hh = size.cy / 2.0; //2·Î ³ª´©¾úÀ»¶§ ³ª¸ÓÁö °ªÀ» ó¸®ÇØÁÖ±â À§ÇØ...mx,my ¸¦ ÀÌ¿ë... mx = int(size.cx)%2; my = int(size.cy)%2; int x, y; pBITMAPHANDLE bh = MainImageForm->iMainImage->uBitmap->RgnBitmap->Handle; // convert by celberus MainImageForm->WorkArea->LoadFromFile(bh, DirectoryItem + "\\" + MainForm->sWork, false); Image->SubVisible = false; X = X - hw; Y = Y - hh; if(X<0 && Y<0){ X = 0; Y = 0; MainImageForm->WorkArea->Move (X - MainImageForm->WorkArea->Range.left, Y - MainImageForm->WorkArea->Range.top); }else if(X < 0 && Y + size.cy > Image->uBitmap->Height){ X = 0; Y = Image->uBitmap->Height - size.cy; MainImageForm->WorkArea->Move (X - MainImageForm->WorkArea->Range.left, Y - (MainImageForm->WorkArea->Range.bottom - size.cy)); }else if(X + size.cx > Image->uBitmap->Width && Y<0){ X = Image->uBitmap->Width - size.cx; Y = 0; MainImageForm->WorkArea->Move (X - (MainImageForm->WorkArea->Range.right - size.cx), Y - MainImageForm->WorkArea->Range.top); }else if(X + size.cx > Image->uBitmap->Width && Y + size.cy > Image->uBitmap->Height){ X = Image->uBitmap->Width - size.cx; Y = Image->uBitmap->Height - size.cy; MainImageForm->WorkArea->Move (X - (MainImageForm->WorkArea->Range.right - size.cx), Y - (MainImageForm->WorkArea->Range.bottom - size.cy)); }else if(X<0){ X = 0; MainImageForm->WorkArea->Move (X - MainImageForm->WorkArea->Range.left, Y - MainImageForm->WorkArea->Range.top - my); }else if(X + size.cx > Image->uBitmap->Width){ X = Image->uBitmap->Width - size.cx; MainImageForm->WorkArea->Move (X - (MainImageForm->WorkArea->Range.right - size.cx), Y - MainImageForm->WorkArea->Range.top - my); }else if(Y<0){ Y = 0; MainImageForm->WorkArea->Move (X - MainImageForm->WorkArea->Range.left - mx, Y - MainImageForm->WorkArea->Range.top); }else if(Y + size.cy > Image->uBitmap->Height){ Y = Image->uBitmap->Height - size.cy; MainImageForm->WorkArea->Move (X - MainImageForm->WorkArea->Range.left - mx, Y - (MainImageForm->WorkArea->Range.bottom - size.cy)); }else { MainImageForm->WorkArea->Move (X - MainImageForm->WorkArea->Range.left - mx, Y - MainImageForm->WorkArea->Range.top - my); } MainImageForm->WorkArea->Move (X - MainImageForm->WorkArea->Range.left, Y - MainImageForm->WorkArea->Range.top); Image->SubVisible = false; MainImageForm->WorkAreaChange(); if(WindowForm->rbAddition->Checked){ //ÀÛ¾÷±¸¿ª ADD Çҽà save ÇØ ³õÀº°Í LOAD WAtemp(); TEMPSaveClick(this); //ADD ¸¦ À§ÇØ ±×Àü ÀÛ¾÷±¸¿ª save WAtemp(); MainImageForm->WorkAreaChange(); } Screen->Cursor = OldCursor; } //--------------------------------------------------------------------------- void __fastcall TWindowLibForm::WAtemp() //2001.6.5. by lhskys ÀÛ¾÷±¸¿ª save { MainImageForm->WATEMP = true; pBITMAPHANDLE bh = MainImageForm->iMainImage->uBitmap->RgnBitmap->Handle; // convert by celberus MainImageForm->WorkArea->LoadFromFile(bh, DirectoryItem + "\\" + "temp"); MainImageForm->WATEMP = false; } //----------------------------------------------------------------------------- void __fastcall TWindowLibForm::FormShow(TObject *Sender) { Width = 200; Height = 731; UpdateItems(); } //---------------------------------------------------------------------------