//---------------------------------------------------------------------------
// Кнопка "Выполнить"
//---------------------------------------------------------------------------
void __fastcall TFormFrameBuild::OkClick(TObject *Sender)
{
if (IsActive == 1) return;
int isalias = 0;
if ((mapIsSiteFromServer(Hmap,Hmap) != 0) || (mapIsNormalPathUn(SourceMap) == 0)) // 15/12/17 KVN
{
// Определить путь к папке пользовательской карты
mapGetSitePathUn(Hmap, Hmap, SourceMap, sizeof(SourceMap));
isalias = 1;
}
IsActive = 1;
IsQuit = 0;
WCHAR drive_s[MAX_PATH_LONG],dir_s[MAX_PATH_LONG],file_s[MAX_PATH_LONG];
WCHAR newdrive[MAX_PATH_LONG];
::SplitThePath(SourceMap,drive_s,dir_s,file_s,NULL);
WcsCat(dir_s,L"FRAME\\",sizeof(dir_s));
::MakeThePath(newdrive,drive_s,dir_s,NULL,NULL);
CreateTheDirectory(newdrive);
WcsCopy(LogFile,newdrive,sizeof(LogFile));
WcsCat(LogFile,L"Frame.log",sizeof(LogFile));
if(RewriteCheck->Checked == true)
frmErrorMessageUn(L"****************************************",0,LogFile,0);
else
frmErrorMessageUn(L"****************************************",0,LogFile,1);
WCHAR message[MAX_PATH_LONG] = {0};
TDateTime datetime;
TDateTime currenttime = datetime.CurrentDateTime();
String time = currenttime.DateTimeString();
frmErrorMessageUn(L" ",0,LogFile,0);
message[0]=0;
WcsCat(message,time.c_str(),sizeof(message));
frmErrorMessageUn(message,0,LogFile,0);
WCHAR filename[MAX_PATH_LONG];
if (isalias == 0)
mapGetSiteFileNameUn(Hmap, Hmap, filename, sizeof(filename));
else
mapGetSitePathUn(Hmap, Hmap, filename, sizeof(filename)); // 15/12/17 KVN
message[0]=0;
WcsCat(message,_prptxt(78),sizeof(message)); // "ОФОРМЛЕНИЕ КАРТЫ: "
WcsCat(message,filename,sizeof(message));
frmErrorMessageUn(message,0,LogFile,0);
message[0]=0;
WcsCat(message,_prptxt(79),sizeof(message)); // "ПО ШАБЛОНУ : "
WcsCat(message,FrameTemp,sizeof(message));
frmErrorMessageUn(message,0,LogFile,0);
int mestarget = 0;
if(MessageCheck->Checked == true)mestarget = 2;
else mestarget = 0;
int flagSit = 0;
int condSit = 0;
int flagFrame = 0;
int condFrame = 0;
int flagLegend = 0;
WCHAR commondir[MAX_PATH_LONG] = {0};
WcsCopy(commondir,dir_s,sizeof(commondir));
int begN,endN;
if(AllCheckBox->Checked == false)
{
int number = SheetList->ItemIndex;
begN = (int)(SheetList->Items->Objects[number]);
endN = begN;
}
else
{
begN = 1;
endN = mapGetListCount(Hmap);
}
int count = endN-begN+1;
ProgressBar1->Max = count;
ProgressBar1->Position = 0;
Cancel->Caption = _prptxt(10); // "Прервать"
// Для последующего закрытия созданных карт
HSITE legsit[MAX_PATH]; // 15/12/17
// ПРОЦЕСС ОФОРМЛЕНИЯ
for(int i = begN; i <= endN; i++)
{
double angle = 0.0; // 15/12/17
RetrieveMsg();
if (IsQuit == 1)
break;
// Вычислить угол поворота листа
if (AngleCheck->Checked && frmGetRotateAngle(Hmap, i, &angle) == 0) continue; // 15/12/17
ProgressBar1->Position ++;
WCHAR sheetname[256];
mapGetListNameUn(Hmap,i,sheetname,sizeof(sheetname));
frmErrorMessageUn(L"=============================",0,LogFile,0);
message[0]=0;
WcsCat(message,_prptxt(80),sizeof(message)); // "ЛИСТ : "
WcsCat(message,sheetname,sizeof(message));
frmErrorMessageUn(message,0,LogFile,0);
WcsCopy(dir_s,commondir,sizeof(dir_s));
// Создать директорию для оформления текущего листа
char nomenclature[32];
// Удобнее создавать каталоги по номенклатуре на латинице с арабскими цифрами
mapGetSiteNomenclature(Hmap,Hmap,i,nomenclature,sizeof(nomenclature)); // 10/12/17
StringToUnicode(nomenclature,sheetname,sizeof(sheetname));
WcsCat(dir_s,sheetname,sizeof(dir_s));
WcsCat(dir_s,L"\\",sizeof(dir_s));
::MakeThePath(newdrive,drive_s,dir_s,NULL,NULL);
CreateTheDirectory(newdrive);
::MakeThePath(RotateSit,drive_s,dir_s,L"Sheet",L"sit");
::MakeThePath(FrameSit,drive_s,dir_s,L"Frame",L"sit");
// Если требуется проверка наличия повернутого листа на диске
if (RscChangeCheck->Checked) // 15/12/17
{
if (ExistTheFile(RotateSit))
{
if (flagSit == 0)
{
flagSit = 1;
WcsCopy(message,RotateSit,sizeof(message));
WcsCat(message,_prptxt(39),sizeof(message)); // "Файл уже существует. Заменить файл ?"
if (MessageBox(0,message,_prptxt(61),MB_YESNO | MB_ICONQUESTION | MB_TASKMODAL) == ID_NO)
{
condSit = 1;
}
}
if (condSit == 1) continue;
}
if (ExistTheFile(FrameSit))
{
if (flagFrame == 0)
{
flagFrame = 1;
WcsCopy(message,FrameSit,sizeof(message));
WcsCat(message,_prptxt(39),sizeof(message)); // "Файл уже существует. Заменить файл ?"
if (::MessageBoxW(0,message,_prptxt(61),MB_YESNO | MB_ICONQUESTION | MB_TASKMODAL) == ID_NO)
{
condFrame = 1;
}
}
if (condFrame == 1) continue;
}
}
HSITE rsit = 0;
HSITE frmsit = 0;
int sitecount = mapGetSiteCount(Hmap);
// Поиск карт оформления в открытом документе
for (int k = 0; k <= sitecount; k++) // 15/12/17
{
HSITE cursite = mapGetSiteIdent(Hmap,k);
WCHAR name[MAX_PATH_LONG];
name[0] = 0;
if (isalias == 0)
mapGetSiteFileNameUn(Hmap, cursite, name, sizeof(name));
else
mapGetSitePathUn(Hmap, cursite, name, sizeof(name)); // 15/12/17 KVN
if (wcsncmp(name,RotateSit,wcslen(name)) == 0)
{
rsit = mapGetSiteIdent(Hmap,k);
mapLogAccess(Hmap,rsit,0);
mapClearSite(Hmap,rsit); // 15/12/17
}
if (wcsncmp(name,FrameSit,wcslen(name)) == 0)
{
frmsit = mapGetSiteIdent(Hmap,k);
mapLogAccess(Hmap,frmsit,0);
mapClearSite(Hmap,frmsit); // 15/12/17
}
}
CREATESITEUN createsite;
memset(&createsite,0,sizeof(CREATESITEUN));
createsite.Length = sizeof(CREATESITEUN); // Длина записи структуры CREATESITEUN
// Имя района
WcsCopy(createsite.MapName,_prptxt(81),sizeof(createsite.MapName)); // "ПОВЕРНУТЫЙ ЛИСТ"
createsite.MapType = -1; // Обобщенный тип карты
createsite.MaterialProjection = -1; // Проекция исх. материала
createsite.Scale = mapGetMapScale(Hmap); // Знаменатель масштаба карты
WCHAR testfile[MAX_PATH_LONG];
WCHAR testname[MAX_PATH_LONG];
WCHAR rscfilename[MAX_PATH_LONG];
if (rsit == 0) // Не нашли среди открытых
{
SplitThePath(SourceRsc,NULL,NULL,testfile,NULL);
MakeThePath(testname,drive_s,dir_s,testfile,L"rsc");
if(ExistTheFile(testname))
WcsCopy(rscfilename,testname,sizeof(rscfilename));
else
WcsCopy(rscfilename,SourceRsc,sizeof(rscfilename));
// Создать повёрнутый лист
rsit = mapCreateAndAppendSiteUn(Hmap, RotateSit, rscfilename, &createsite);
}
if (rsit == 0) continue;
mapLogAccess(Hmap,rsit,0);
_prptxt(81, message, sizeof(message)); // "ПОВЕРНУТЫЙ ЛИСТ"
WcsCat(message,L": ",sizeof(message));
WcsCat(message,RotateSit,sizeof(message));
frmErrorMessageUn(message,0,LogFile,0);
// Оформление
if (frmsit == 0) // Не нашли среди открытых
{
// Имя района
_prptxt(82, createsite.MapName, sizeof(createsite.MapName)); // "ОФОРМЛЕНИЕ"
if (FrameRsc[0] == 0)
{
MessageBox(0, _prptxt(83), // "Не задано имя файла классификатора для оформления"
_prptxt(61), // "Формирование зарамочного оформления"
MB_OK | MB_ICONINFORMATION | MB_TASKMODAL);
IsActive = 0;
mapCloseSiteForMap(Hmap, rsit); // 15/12/17
return;
}
SplitThePath(FrameRsc,NULL,NULL,testfile,NULL);
MakeThePath(testname,drive_s,dir_s,testfile,L"rsc");
if(ExistTheFile(testname))
WcsCopy(rscfilename,testname,sizeof(rscfilename));
else
WcsCopy(rscfilename,FrameRsc,sizeof(rscfilename));
// Карта зарамочного оформления
frmsit = mapCreateAndAppendSiteUn(Hmap,FrameSit,rscfilename,&createsite);
_prptxt(82, message, sizeof(message)); // "ОФОРМЛЕНИЕ"
WcsCat(message,L" : ",sizeof(message));
WcsCat(message,FrameSit,sizeof(message));
frmErrorMessageUn(message,0,LogFile,0);
}
if (frmsit == 0)
{
mapCloseSiteForMap(Hmap, rsit); // 15/12/17
continue;
}
mapLogAccess(Hmap,frmsit,0);
// СОЗДАТЬ ПОВЕРНУТЫЙ ЛИСТ
if (frmTurnSheet(TaskParm, Hmap, i, angle, rsit) == 0)
{
mapCloseSiteForMap(Hmap, rsit); // 15/12/17
mapCloseSiteForMap(Hmap, frmsit);
break;
}
// НАНЕСТИ ЗАРАМОЧНОЕ ОФОРМЛЕНИЕ
if (CreateBorder(Hmap, i, rsit, frmsit, angle) == 0)
{
mapCloseSiteForMap(Hmap, rsit); // 15/12/17
mapCloseSiteForMap(Hmap, frmsit);
break;
}
mapCloseSiteForMap(Hmap, rsit); // 15/12/17
mapCloseSiteForMap(Hmap, frmsit);
// НАНЕСТИ ЛЕГЕНДЫ
memset(legsit,0,sizeof(legsit));
for (int j = 0; j < LegendCount; j++)
{
String region = _prptxt(84) + String(j); // "ЛЕГЕНДА "
#ifdef UNICODE11
WcsCopy(createsite.MapName,region.c_str(),sizeof(createsite.MapName));
#else
region.WideChar(createsite.MapName, sizeof(createsite.MapName));
#endif
WCHAR file[256];
WCHAR legfilename[256];
if (Legends[j].SiteName[0] == 0)
{
::MessageBoxW(0, _prptxt(85), // "Отсутствует имя файла легенды"
_prptxt(61), // "Формирование зарамочного оформления"
MB_OK | MB_ICONINFORMATION | MB_TASKMODAL);
continue;
}
::SplitThePath(Legends[j].SiteName,NULL,NULL,file,NULL);
::MakeThePath(legfilename,drive_s,dir_s,file,L"sit");
// Для последующего открытия легенд
WcsCopy(Legends[j].SiteName, legfilename, sizeof(Legends[j].SiteName));
SplitThePath(Legends[j].RscName,NULL,NULL,testfile,NULL);
MakeThePath(testname,drive_s,dir_s,testfile,L"rsc");
if (ExistTheFile(testname))
WcsCopy(rscfilename,testname,sizeof(rscfilename));
else
{
if(Legends[j].RscName[0] == 0)
{
if (flagLegend == 0)
{
MessageBox(0,_prptxt(86), // "В шаблоне легенды отсутствует имя файла RSC"
_prptxt(61), // "Формирование зарамочного оформления"
MB_OK | MB_ICONINFORMATION | MB_TASKMODAL);
flagLegend = 1;
}
continue;
}
WcsCopy(rscfilename, Legends[j].RscName, sizeof(rscfilename));
}
// Создать пользовательскую карту по открытой карте
legsit[j] = mapCreateAndAppendSiteUn(Hmap, legfilename, rscfilename, &createsite);
if (legsit[j] == 0) continue;
mapLogAccess(Hmap,legsit[j],0);
frmErrorMessageUn(L"--------------",0,LogFile,0);
_prptxt(84, message, sizeof(message)); // "ЛЕГЕНДА "
WcsCat(message,L" : ",sizeof(message));
WcsCat(message,legfilename,sizeof(message));
frmErrorMessageUn(message,0,LogFile,0);
_prptxt(87, message, sizeof(message)); // "КЛАССИФИКАТОР"
WcsCat(message,L": ",sizeof(message));
WcsCat(message,Legends[j].RscName,sizeof(message));
frmErrorMessageUn(message,0,LogFile,0);
_prptxt(88, message, sizeof(message)); // "ШАБЛОН"
WcsCat(message,L" : ",sizeof(message));
WcsCat(message,Legends[j].FileName,sizeof(message));
frmErrorMessageUn(message,0,LogFile,0);
// Нанесение легенды зарамочного оформления
frmCreateLegendPro(Hmap, i, rsit, legsit[j], Legends[j].FileName, angle, LogFile, mestarget);
mapCloseSiteForMap(Hmap, legsit[j]); // 15/12/17
} // НАНЕСЕНИЕ ЛЕГЕНД - КОНЕЦ
} // ПРОЦЕСС ОФОРМЛЕНИЯ - конец
if (ViewLogCheck->Checked == true)
{
TFormFrameLog *logview = 0;
try
{
logview = new TFormFrameLog(Application,LogFile);
if (logview)
{
logview->ShowModal();
}
}
catch (...)
{
}
if (logview) delete logview;
}
// Сохранить в INI имена "по умолчанию"
try
{
TIniFile *ini = new TIniFile(TaskParm->IniName);
if(!ini) return;
AnsiString scale = AnsiString(mapGetMapScale(Hmap)) + "_FRM_RSC";
ini->WriteString("FRAME",scale,FrameRsc);
scale = AnsiString(mapGetMapScale(Hmap)) + "_FRM_FRM";
ini->WriteString("FRAME",scale,FrameTemp);
delete ini;
}
catch(...)
{
;
}
IsActive = 0;
Cancel->Caption = _prptxt(19); // "Выход"
Close();
// Открываем созданные карты в новом документе
//-----------------------------------------------------------------------------
// Откроем главную - карту повёрнутого листа RotateSit
HMAP hFrame;
hFrame = mapOpenMapUn(RotateSit);
if (hFrame == 0) return;
// Добавим карту зарамочного оформления
mapOpenSiteForMapUn(hFrame, FrameSit, 0);
// Добавим карты легенд
for (int j = 0; j < LegendCount; j++)
{
mapOpenSiteForMapUn(hFrame, Legends[j].SiteName, 0);
}
// Сохранить текущие параметры окна карты в INI-файл карты
mapSaveMapState(hFrame, 0);
// Закрыть документ
mapCloseData(hFrame);
// Открыть документ
::SendMessage(TaskParm->Handle, AW_OPENDOCUN, (WPARAM)RotateSit, 0);
//-----------------------------------------------------------------------------
}
//---------------------------------------------------------------------------
// Нанести зарамочное оформление
//---------------------------------------------------------------------------
int TFormFrameBuild::CreateBorder(HMAP hmap, int sheet, HSITE rotsit, HSITE frmsit, double angle) // 15/12/17
{
if (MessageCheck->Checked == true)
return frmCreateBorderPro(Hmap,sheet,rotsit,frmsit,FrameTemp,angle,LogFile,2);
return frmCreateBorderPro(Hmap,sheet,rotsit,frmsit,FrameTemp,angle,LogFile,0);
} |