﻿string sTableGuid;
int iDialog;
int iButtonRotate, iButtonEdit, iButtonEditMacro, iButtonTitle, iButtonHeading, iButtonSubHeading, iButtonNormal;
int iButtonCellsConnect, iButtonCellsDisconnect;
int iButtonAlignLT, iButtonAlignMT, iButtonAlignRT, iButtonAlignLM, iButtonAlignMM, iButtonAlignRM, iButtonAlignLB, iButtonAlignMB, iButtonAlignRB;
int iButtonSelectCells, iButtonSelectionCellsOnOff;
int iButtonOutlineOnAll, iButtonOutlineOffInside, iButtonOutlineOnInside, iButtonOutlineOnTinyInside, iButtonOutlineOffAll, iButtonOutlineOnLeft, iButtonOutlineOnTop, iButtonOutlineOnRight, iButtonOutlineOnBottom;
int iButtonRowHeight,iButtonRowHeightAuto, iButtonColumnWidth;
int iButtonScaleTable;
int iButtonSelectGUIDS, iButtonRunTableProgram, iButtonTableHelp, iButtonHelp, iButtonTableConfigure;
int iButtonAddRowOnTop, iButtonAddRowOnBottom, iButtonDeleteRow;
int iButtonAddColumnOnLeft, iButtonAddColumnOnRight, iButtonDeleteColumn;
int iButtonExpand;
int iButtonCopy, iButtonPaste;
string sBuffer;

int iHotKeyCode;
// диалог iDialogEdit
int iDialogEdit;
int iMuitilineEdit, iButtonEditOk, iButtonEditCancel;

int ii, jj;
double fontkoeff = 2.7; // коэффициент между редактором и элементом

string iconpathOk, iconpathCancel;

int buttonh=50, buttonw=50;
int texth = 25, textw = 65;
int calc_pos(int col, int row, int& buttonx, int& buttony, int& textx, int& texty) {
	int offsetx = 5; int offsety = 2; int offsetyy = 10;
	int startx = 5, starty = 5;

	buttonx = startx + (textw - buttonw) / 2 + (offsetx + textw) * (col - 1);
	buttony = starty + (offsetyy + buttonh + offsety + texth) * (row - 1);

	textx = startx +(offsetx + textw) * (col - 1);
	texty = starty + buttonh + offsety + (offsetyy + buttonh + offsety + texth) * (row-1);
}

int main()
{
	//cout << "\n";

	//char ch;
	////ch = 'A';
	//string st, strres;
	//st = "ABCDEF";
	//int iiret = strposcharget(st, 1, ch);
	//cout << ch << "\n";
	//iiret = strposcharset(st, 1, '0', strres);
	//cout << "strres=" << strres << "\n";
	//iiret = strposcharget(strres, 1, ch);
	//cout << ch << "\n";

	// 3. Создаем диалог
	int x, y, w, h, offs;

	object("create", "ts_dialog", iDialog);
	ts_dialog(iDialog, "init_dialog", "palette", 0, 0, 425, 355);
	ts_dialog(iDialog, "set_as_main_panel");
	ts_dialog(iDialog, "SetGrowType",0);

	ts_dialog(iDialog, "SetTitle", "Редактор таблиц LabPP_Table");
	ts_dialog(iDialog, "eventreaction", "Event_PanelHotKeyEvent");

	string iconpath;
	shell_func("get_path", "currentcppfiles", iconpath);
	if(iconpath == "\\files")
	{
		shell_func("get_path", "curdir", iconpath);
		iconpath += "\\files";
	}

	string iconpathr = iconpath + "\\rot.png";
	string iconpatht = iconpath + "\\t.png";
	string iconpathh = iconpath + "\\h.png";
	string iconpaths = iconpath + "\\s.png";
	string iconpathn = iconpath + "\\n.png";
	string iconpathconnect = iconpath + "\\connect.png";
	string iconpathdisconnect = iconpath + "\\disconnect.png";

	string iconpatheditmacro = iconpath + "\\editmacro.png";
	string iconpathscaletable = iconpath + "\\scale.png";
	iconpathOk = iconpath + "\\ok.png";
	iconpathCancel = iconpath + "\\cancel.png";
	string iconpathselectcells = iconpath + "\\selectcells.png";
	string iconpathunselectcells = iconpath + "\\unselectallcells.png";

	int col, row, buttonx, buttony, textx, texty;
	calc_pos(1, 1, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonEdit, "iButtonEdit");
	ts_dialogcontrol(iButtonEdit, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh,1,16);
	ts_dialogcontrol(iButtonEdit, "SetToolTip", "Редактировать текст в ячейке");
	ts_dialogcontrol(iButtonEdit, "seticon", iconpath + "\\edit_big.png");
	
	ts_dialogcontrol(iButtonEdit, "eventreaction", "Event_ButtonClicked");

	var_by_txt("init", "iCenterText", "int", "global", 0);
	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonEdit");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Редактировать\nячейку");


	calc_pos(2, 1, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonCellsConnect, "iButtonCellsConnect");
	ts_dialogcontrol(iButtonCellsConnect, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonCellsConnect, "SetToolTip", "Объединить ячейки");
	ts_dialogcontrol(iButtonCellsConnect, "seticon", iconpath + "\\join_cells.png");
	ts_dialogcontrol(iButtonCellsConnect, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonCellsConnect");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Объединить\nячейки");


	calc_pos(3, 1, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonCellsDisconnect, "iButtonCellsDisconnect");
	ts_dialogcontrol(iButtonCellsDisconnect, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonCellsDisconnect, "SetToolTip", "Разъединить ячейки в таблице");
	ts_dialogcontrol(iButtonCellsDisconnect, "seticon", iconpath + "\\separate_cells.png");
	ts_dialogcontrol(iButtonCellsDisconnect, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonCellsDisconnect");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Разъединить\nячейки");


	calc_pos(1, 2, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonDeleteRow, "iButtonDeleteRow");
	ts_dialogcontrol(iButtonDeleteRow, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonDeleteRow, "SetToolTip", "Удалить строку");
	ts_dialogcontrol(iButtonDeleteRow, "seticon", iconpath + "\\del_row.png");
	ts_dialogcontrol(iButtonDeleteRow, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonDeleteRow");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Удалить\nстроку");


	calc_pos(2, 2, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonDeleteColumn, "iButtonDeleteColumn");
	ts_dialogcontrol(iButtonDeleteColumn, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonDeleteColumn, "SetToolTip", "Удалить столбец");
	ts_dialogcontrol(iButtonDeleteColumn, "seticon", iconpath + "\\del_column.png");
	ts_dialogcontrol(iButtonDeleteColumn, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonDeleteColumn");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Удалить\nстолбец");


	calc_pos(3, 2, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonAddRowOnTop, "iButtonAddRowOnTop");
	ts_dialogcontrol(iButtonAddRowOnTop, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonAddRowOnTop, "SetToolTip", "Вставить строку сверху");
	ts_dialogcontrol(iButtonAddRowOnTop, "seticon", iconpath + "\\add_row_ontop.png");
	ts_dialogcontrol(iButtonAddRowOnTop, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonAddRowOnTop");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Вставить\nсверху");


	calc_pos(4, 2, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonAddRowOnBottom, "iButtonAddRowOnBottom");
	ts_dialogcontrol(iButtonAddRowOnBottom, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonAddRowOnBottom, "SetToolTip", "Вставить строку снизу");
	ts_dialogcontrol(iButtonAddRowOnBottom, "seticon", iconpath + "\\add_row_onbottom.png");
	ts_dialogcontrol(iButtonAddRowOnBottom, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonAddRowOnBottom");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "SetText", "Вставить\nснизу");


	calc_pos(5, 2, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonAddColumnOnLeft, "iButtonAddColumnOnLeft");
	ts_dialogcontrol(iButtonAddColumnOnLeft, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonAddColumnOnLeft, "SetToolTip", "Вставить столбец слева");
	ts_dialogcontrol(iButtonAddColumnOnLeft, "seticon", iconpath + "\\add_column_onleft.png");
	ts_dialogcontrol(iButtonAddColumnOnLeft, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonAddColumnOnLeft");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "SetText", "Вставить\nслева");


	calc_pos(6, 2, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonAddColumnOnRight, "iButtonAddColumnOnRight");
	ts_dialogcontrol(iButtonAddColumnOnRight, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonAddColumnOnRight, "SetToolTip", "Вставить столбец справа");
	ts_dialogcontrol(iButtonAddColumnOnRight, "seticon", iconpath + "\\add_column_onright.png");
	ts_dialogcontrol(iButtonAddColumnOnRight, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonAddColumnOnRight");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Вставить\nсправа");


	calc_pos(1, 3, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonRowHeight, "iButtonRowHeight");
	ts_dialogcontrol(iButtonRowHeight, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonRowHeight, "SetToolTip", "Задать высоту строки");
	ts_dialogcontrol(iButtonRowHeight, "seticon", iconpath + "\\hight_of_row.png");
	ts_dialogcontrol(iButtonRowHeight, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonRowHeight");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Высота\nстроки");


	calc_pos(2, 3, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonRowHeightAuto, "iButtonRowHeightAuto");
	ts_dialogcontrol(iButtonRowHeightAuto, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonRowHeightAuto, "SetToolTip", "Задать высоту строки автоматически");
	ts_dialogcontrol(iButtonRowHeightAuto, "seticon", iconpath + "\\hight_of_row_auto.png");
	ts_dialogcontrol(iButtonRowHeightAuto, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonRowHeightAuto");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Высота строки\nавтоматически");

	calc_pos(3, 3, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonColumnWidth, "iButtonColumnWidth");
	ts_dialogcontrol(iButtonColumnWidth, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonColumnWidth, "SetToolTip", "Задать ширину колонки");
	ts_dialogcontrol(iButtonColumnWidth, "seticon", iconpath + "\\width_of_column.png");
	ts_dialogcontrol(iButtonColumnWidth, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonColumnWidth");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "SetText", "Ширина\nколонки");

	//---->
	calc_pos(4, 3, buttonx, buttony, textx, texty);
	int h1 = 15, w1 = 15, o1=2;
	object("create", "ts_dialogcontrol", iButtonAlignLT, "iButtonAlignLT");
	ts_dialogcontrol(iButtonAlignLT, "init_control", "iconbutton", iDialog, buttonx, buttony, w1, h1);
	ts_dialogcontrol(iButtonAlignLT, "SetToolTip", "Выравнивание вверх влево");
	ts_dialogcontrol(iButtonAlignLT, "seticon", iconpath + "\\alignment_LT.png");
	ts_dialogcontrol(iButtonAlignLT, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignMT, "iButtonAlignMT");
	ts_dialogcontrol(iButtonAlignMT, "init_control", "iconbutton", iDialog, buttonx + o1 + w1, buttony, w1, h1);
	ts_dialogcontrol(iButtonAlignMT, "SetToolTip", "Выравнивание вверх по центру");
	ts_dialogcontrol(iButtonAlignMT, "seticon", iconpath + "\\alignment_TM.png");
	ts_dialogcontrol(iButtonAlignMT, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignRT, "iButtonAlignRT");
	ts_dialogcontrol(iButtonAlignRT, "init_control", "iconbutton", iDialog, buttonx + o1 + w1 + o1 + w1, buttony, w1, h1);
	ts_dialogcontrol(iButtonAlignRT, "SetToolTip", "Выравнивание вверх вправо");
	ts_dialogcontrol(iButtonAlignRT, "seticon", iconpath + "\\alignment_TR.png");
	ts_dialogcontrol(iButtonAlignRT, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignLM, "iButtonAlignLM");
	ts_dialogcontrol(iButtonAlignLM, "init_control", "iconbutton", iDialog, buttonx, buttony + o1 + w1, w1, h1);
	ts_dialogcontrol(iButtonAlignLM, "SetToolTip", "Выравнивание по середине влево");
	ts_dialogcontrol(iButtonAlignLM, "seticon", iconpath + "\\alignment_ML.png");
	ts_dialogcontrol(iButtonAlignLM, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignMM, "iButtonAlignMM");
	ts_dialogcontrol(iButtonAlignMM, "init_control", "iconbutton", iDialog, buttonx+o1+w1, buttony+o1+h1, w1, h1);
	ts_dialogcontrol(iButtonAlignMM, "SetToolTip", "Выравнивание по центру ячейки");
	ts_dialogcontrol(iButtonAlignMM, "seticon", iconpath + "\\alignment_MM.png");
	ts_dialogcontrol(iButtonAlignMM, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignRM, "iButtonAlignRM");
	ts_dialogcontrol(iButtonAlignRM, "init_control", "iconbutton", iDialog, buttonx + o1 + w1 + o1 + w1, buttony + o1 + h1, w1, h1);
	ts_dialogcontrol(iButtonAlignRM, "SetToolTip", "Выравнивание по середине вправо");
	ts_dialogcontrol(iButtonAlignRM, "seticon", iconpath + "\\alignment_MR.png");
	ts_dialogcontrol(iButtonAlignRM, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignLB, "iButtonAlignLB");
	ts_dialogcontrol(iButtonAlignLB, "init_control", "iconbutton", iDialog, buttonx, buttony + o1 + w1 + o1 + w1, w1, h1);
	ts_dialogcontrol(iButtonAlignLB, "SetToolTip", "Выравнивание внизу влево");
	ts_dialogcontrol(iButtonAlignLB, "seticon", iconpath + "\\alignment_BL.png");
	ts_dialogcontrol(iButtonAlignLB, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignMB, "iButtonAlignMB");
	ts_dialogcontrol(iButtonAlignMB, "init_control", "iconbutton", iDialog, buttonx+o1+w1, buttony+o1+h1 + o1 + w1, w1, h1);
	ts_dialogcontrol(iButtonAlignMB, "SetToolTip", "Выравнивание внизу по середине");
	ts_dialogcontrol(iButtonAlignMB, "seticon", iconpath + "\\alignment_MB.png");
	ts_dialogcontrol(iButtonAlignMB, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignRB, "iButtonAlignRB");
	ts_dialogcontrol(iButtonAlignRB, "init_control", "iconbutton", iDialog, buttonx + o1 + w1 + o1 + w1, buttony + o1 + h1 + o1 + w1, w1, h1);
	ts_dialogcontrol(iButtonAlignRB, "SetToolTip", "Выравнивание внизу вправо");
	ts_dialogcontrol(iButtonAlignRB, "seticon", iconpath + "\\alignment_BR.png");
	ts_dialogcontrol(iButtonAlignRB, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Выравнивание\nв ячейке");
	//<----
	calc_pos(5, 3, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonCopy, "iButtonCopy");
	ts_dialogcontrol(iButtonCopy, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonCopy, "SetToolTip", "Копировать");
	ts_dialogcontrol(iButtonCopy, "seticon", iconpath + "\\text_copy.png");
	ts_dialogcontrol(iButtonCopy, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonCopy");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Копировать\nтекст");

	calc_pos(6, 3, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonPaste, "iButtonPaste");
	ts_dialogcontrol(iButtonPaste, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonPaste, "SetToolTip", "Вставить");
	ts_dialogcontrol(iButtonPaste, "seticon", iconpath + "\\text_paste.png");
	ts_dialogcontrol(iButtonPaste, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonPaste");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Вставить\nтекст");

	int h2 = 24, w2 = 24, o2 = 2;
	calc_pos(1, 4, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonTitle, "iButtonTitle");
	ts_dialogcontrol(iButtonTitle, "init_control", "iconbutton", iDialog, buttonx, buttony, w2, h2);
	ts_dialogcontrol(iButtonTitle, "SetToolTip", "Титул");
	ts_dialogcontrol(iButtonTitle, "seticon", iconpath + "\\t.png");
	ts_dialogcontrol(iButtonTitle, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonHeading, "iButtonHeading");
	ts_dialogcontrol(iButtonHeading, "init_control", "iconbutton", iDialog, buttonx+o2+w2, buttony, w2, h2);
	ts_dialogcontrol(iButtonHeading, "SetToolTip", "Заголовок");
	ts_dialogcontrol(iButtonHeading, "seticon", iconpath + "\\h.png");
	ts_dialogcontrol(iButtonHeading, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonSubHeading, "iButtonSubHeading");
	ts_dialogcontrol(iButtonSubHeading, "init_control", "iconbutton", iDialog, buttonx, buttony + o2 + w2, w2, h2);
	ts_dialogcontrol(iButtonSubHeading, "SetToolTip", "Подзаголовок");
	ts_dialogcontrol(iButtonSubHeading, "seticon", iconpath + "\\s.png");
	ts_dialogcontrol(iButtonSubHeading, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonNormal, "iButtonNormal");
	ts_dialogcontrol(iButtonNormal, "init_control", "iconbutton", iDialog, buttonx + o2 + w2, buttony + o2 + w2, w2, h2);
	ts_dialogcontrol(iButtonNormal, "seticon", iconpath + "\\n.png");
	ts_dialogcontrol(iButtonNormal, "SetToolTip", "Обычный текст");
	ts_dialogcontrol(iButtonNormal, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "SetText", "Задать\nшрифт");

	calc_pos(2, 4, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonRotate, "iButtonRotate");
	ts_dialogcontrol(iButtonRotate, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonRotate, "SetToolTip", "Повернуть текст в ячейке");
	ts_dialogcontrol(iButtonRotate, "seticon", iconpath + "\\rotate_text.png");
	ts_dialogcontrol(iButtonRotate, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonRotate");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "SetText", "Повернуть\nтекст в ячейке");

	calc_pos(3, 4, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonOutlineOnInside, "iButtonOutlineOnInside");
	ts_dialogcontrol(iButtonOutlineOnInside, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonOutlineOnInside, "SetToolTip", "Внутренние линии толстые");
	ts_dialogcontrol(iButtonOutlineOnInside, "seticon", iconpath + "\\inside_lines.png");
	ts_dialogcontrol(iButtonOutlineOnInside, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonOutlineOnInside");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Врутренние\nлинии толстые");

	calc_pos(4, 4, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonOutlineOnTinyInside, "iButtonOutlineOnTinyInside");
	ts_dialogcontrol(iButtonOutlineOnTinyInside, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonOutlineOnTinyInside, "SetToolTip", "Внутренние линии тонкие");
	ts_dialogcontrol(iButtonOutlineOnTinyInside, "seticon", iconpath + "\\inside_line_thick.png");
	ts_dialogcontrol(iButtonOutlineOnTinyInside, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonOutlineOnTinyInside");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "SetText", "Внутренние\nлинии тонкие");

	calc_pos(5, 4, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonOutlineOffInside, "iButtonOutlineOffInside");
	ts_dialogcontrol(iButtonOutlineOffInside, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonOutlineOffInside, "SetToolTip", "Выключить внутренние линии");
	ts_dialogcontrol(iButtonOutlineOffInside, "seticon", iconpath + "\\inside_lines_off.png");
	ts_dialogcontrol(iButtonOutlineOffInside, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonOutlineOffInside");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "SetText", "Выключить\nвнутр.линии");

	calc_pos(6, 4, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonExpand, "iButtonExpand");
	ts_dialogcontrol(iButtonExpand, "init_control", "iconbutton", iDialog, buttonx+20, buttony+50, 20, 20);
	ts_dialogcontrol(iButtonExpand, "SetToolTip", "Показать/скрыть дополнительные кнопки");
	//ts_dialogcontrol(iButtonRotate, "seticon", iconpathr);
	ts_dialogcontrol(iButtonExpand, "eventreaction", "Event_ButtonClicked");

	// Скрытые кнопки
	calc_pos(1, 5, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonScaleTable, "iButtonScaleTable");
	ts_dialogcontrol(iButtonScaleTable, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonScaleTable, "SetToolTip", "Масштабировать таблицу");
	ts_dialogcontrol(iButtonScaleTable, "seticon", iconpath + "\\scale_big.png");
	ts_dialogcontrol(iButtonScaleTable, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonScaleTable");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "SetText", "Масштабир.\nтаблицу");

	calc_pos(2, 5, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonEditMacro, "iButtonEditMacro");
	ts_dialogcontrol(iButtonEditMacro, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonEditMacro, "SetToolTip", "Редактирование макроса в ячейке");
	ts_dialogcontrol(iButtonEditMacro, "seticon", iconpath + "\\edit_macros_big.png");
	ts_dialogcontrol(iButtonEditMacro, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText, "iButtonEditMacro");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked", "Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "SetText", "Редактир.\nмакрос");

	calc_pos(3, 5, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonRunTableProgram, "iButtonRunTableProgram");
	ts_dialogcontrol(iButtonRunTableProgram, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonRunTableProgram, "SetToolTip", "Обновление данных в таблице запуском внутренней программы (при наличии)");
	ts_dialogcontrol(iButtonRunTableProgram, "seticon", iconpath + "\\rerun_big.png");
	ts_dialogcontrol(iButtonRunTableProgram, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText,"iButtonRunTableProgram");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked","Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Редактир.\nмакрос");

	calc_pos(4, 5, buttonx, buttony, textx, texty);
	object("create", "ts_dialogcontrol", iButtonTableConfigure, "iButtonTableConfigure");
	ts_dialogcontrol(iButtonTableConfigure, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh, 1, 16);
	ts_dialogcontrol(iButtonTableConfigure, "SetToolTip", "Обновление данных в таблице запуском внутренней программы (при наличии)");
	ts_dialogcontrol(iButtonTableConfigure, "seticon", iconpath + "\\setup.png");
	ts_dialogcontrol(iButtonTableConfigure, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	object("set_name", iCenterText,"iButtonTableConfigure");
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "eventreaction", "Event_StaticTextClicked","Event_ButtonClicked");
	ts_dialogcontrol(iCenterText, "SetText", "Редактир.\nмакрос");

	/*
	object("create", "ts_dialogcontrol", iButtonRotate, "iButtonRotate");
	ts_dialogcontrol(iButtonRotate, "init_control", "iconbutton", iDialog, buttonx, buttony, buttonw, buttonh);
	ts_dialogcontrol(iButtonRotate, "SetToolTip", "Повернуть текст в ячейке");
	//ts_dialogcontrol(iButtonRotate, "seticon", iconpathr);
	ts_dialogcontrol(iButtonRotate, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iCenterText);
	ts_dialogcontrol(iCenterText, "init_control", "CenterText", iDialog, textx, texty, textw, texth);
	ts_dialogcontrol(iCenterText, "SetFontSizecodeStyle", 8, 0);
	ts_dialogcontrol(iCenterText, "settooltip", "Tool Tip Text");
	ts_dialogcontrol(iCenterText, "SetText", "Повернуть\nтекст в ячейке");*/

	/*
	x = 1; y = 2; w = 24; h = 24; offs = 1;

	object("create", "ts_dialogcontrol", iButtonEdit, "iButtonEdit");
	ts_dialogcontrol(iButtonEdit, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonEdit, "SetToolTip", "Редактировать текст в ячейке");
	ts_dialogcontrol(iButtonEdit, "seticon", iconpathedit);
	ts_dialogcontrol(iButtonEdit, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; y = 2; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonRotate, "iButtonRotate");
	ts_dialogcontrol(iButtonRotate, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonRotate, "SetToolTip", "Повернуть текст в ячейке");
	ts_dialogcontrol(iButtonRotate, "seticon", iconpathr);
	ts_dialogcontrol(iButtonRotate, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; y = 2; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonCellsConnect, "iButtonCellsConnect");
	ts_dialogcontrol(iButtonCellsConnect, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonCellsConnect, "SetToolTip", "Объединить ячейки");
	ts_dialogcontrol(iButtonCellsConnect, "seticon", iconpathconnect);
	ts_dialogcontrol(iButtonCellsConnect, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; y = 2; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonCellsDisconnect, "iButtonCellsDisconnect");
	ts_dialogcontrol(iButtonCellsDisconnect, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonCellsDisconnect, "SetToolTip", "Разъединить ячейки");
	ts_dialogcontrol(iButtonCellsDisconnect, "seticon", iconpathdisconnect);
	ts_dialogcontrol(iButtonCellsDisconnect, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; y = 2; w = 12; h = 12;
	object("create", "ts_dialogcontrol", iButtonTitle, "iButtonTitle");
	ts_dialogcontrol(iButtonTitle, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonTitle, "SetToolTip", "Задать шрифт наименование");
	ts_dialogcontrol(iButtonTitle, "seticon", iconpatht);
	ts_dialogcontrol(iButtonTitle, "eventreaction", "Event_ButtonClicked");

	w = 12; h = 12;
	object("create", "ts_dialogcontrol", iButtonHeading, "iButtonHeading");
	ts_dialogcontrol(iButtonHeading, "init_control", "iconbutton", iDialog, x+12, y, w, h);
	ts_dialogcontrol(iButtonHeading, "SetToolTip", "Задать шрифт заголовок");
	ts_dialogcontrol(iButtonHeading, "seticon", iconpathh);
	ts_dialogcontrol(iButtonHeading, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonSubHeading, "iButtonSubHeading");
	ts_dialogcontrol(iButtonSubHeading, "init_control", "iconbutton", iDialog, x, y+12, w, h);
	ts_dialogcontrol(iButtonSubHeading, "SetToolTip", "Задать шрифт подзаголовок");
	ts_dialogcontrol(iButtonSubHeading, "seticon", iconpaths);
	ts_dialogcontrol(iButtonSubHeading, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonNormal, "iButtonNormal");
	ts_dialogcontrol(iButtonNormal, "init_control", "iconbutton", iDialog, x + 12, y+12, w, h);
	ts_dialogcontrol(iButtonNormal, "SetToolTip", "Задать шрифт нормальный");
	ts_dialogcontrol(iButtonNormal, "seticon", iconpathn);
	ts_dialogcontrol(iButtonNormal, "eventreaction", "Event_ButtonClicked");

	w = 24;
	x = x + w + offs;
	w = 8; h = 8;
	object("create", "ts_dialogcontrol", iButtonAlighLT, "iButtonAlignLT");
	ts_dialogcontrol(iButtonAlighLT, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonAlighLT, "SetToolTip", "Выравнивание влево вверх");
	ts_dialogcontrol(iButtonAlighLT, "seticon", iconpathn);
	ts_dialogcontrol(iButtonAlighLT, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignMT, "iButtonAlignMT");
	ts_dialogcontrol(iButtonAlignMT, "init_control", "iconbutton", iDialog, x + 8, y, w, h);
	ts_dialogcontrol(iButtonAlignMT, "SetToolTip", "Выравнивание центр верх");
	ts_dialogcontrol(iButtonAlignMT, "seticon", iconpathn);
	ts_dialogcontrol(iButtonAlignMT, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignRT, "iButtonAlignRT");
	ts_dialogcontrol(iButtonAlignRT, "init_control", "iconbutton", iDialog, x + 16, y, w, h);
	ts_dialogcontrol(iButtonAlignRT, "SetToolTip", "Выравнивание право верх");
	ts_dialogcontrol(iButtonAlignRT, "seticon", iconpathn);
	ts_dialogcontrol(iButtonAlignRT, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignLM, "iButtonAlignLM");
	ts_dialogcontrol(iButtonAlignLM, "init_control", "iconbutton", iDialog, x, y+8, w, h);
	ts_dialogcontrol(iButtonAlignLM, "SetToolTip", "Выравнивание влево центр");
	ts_dialogcontrol(iButtonAlignLM, "seticon", iconpathn);
	ts_dialogcontrol(iButtonAlignLM, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignMM, "iButtonAlignMM");
	ts_dialogcontrol(iButtonAlignMM, "init_control", "iconbutton", iDialog, x + 8, y+8, w, h);
	ts_dialogcontrol(iButtonAlignMM, "SetToolTip", "Выравнивание центр центр");
	ts_dialogcontrol(iButtonAlignMM, "seticon", iconpathn);
	ts_dialogcontrol(iButtonAlignMM, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignRM, "iButtonAlignRM");
	ts_dialogcontrol(iButtonAlignRM, "init_control", "iconbutton", iDialog, x + 16, y+8, w, h);
	ts_dialogcontrol(iButtonAlignRM, "SetToolTip", "Выравнивание вправо центр");
	ts_dialogcontrol(iButtonAlignRM, "seticon", iconpathn);
	ts_dialogcontrol(iButtonAlignRM, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignLB, "iButtonAlignLB");
	ts_dialogcontrol(iButtonAlignLB, "init_control", "iconbutton", iDialog, x, y + 16, w, h);
	ts_dialogcontrol(iButtonAlignLB, "SetToolTip", "Выравнивание влево низ");
	ts_dialogcontrol(iButtonAlignLB, "seticon", iconpathn);
	ts_dialogcontrol(iButtonAlignLB, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignMB, "iButtonAlignMB");
	ts_dialogcontrol(iButtonAlignMB, "init_control", "iconbutton", iDialog, x + 8, y + 16, w, h);
	ts_dialogcontrol(iButtonAlignMB, "SetToolTip", "Выравнивание центр вниз");
	ts_dialogcontrol(iButtonAlignMB, "seticon", iconpathn);
	ts_dialogcontrol(iButtonAlignMB, "eventreaction", "Event_ButtonClicked");

	object("create", "ts_dialogcontrol", iButtonAlignRB, "iButtonAlignRB");
	ts_dialogcontrol(iButtonAlignRB, "init_control", "iconbutton", iDialog, x + 16, y + 16, w, h);
	ts_dialogcontrol(iButtonAlignRB, "SetToolTip", "Выравнивание право вниз");
	ts_dialogcontrol(iButtonAlignRB, "seticon", iconpathn);
	ts_dialogcontrol(iButtonAlignRB, "eventreaction", "Event_ButtonClicked");

	w = 24;
	x = x + w + offs; y = 2; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonSelectCells, "iButtonSelectCells");
	ts_dialogcontrol(iButtonSelectCells, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonSelectCells, "SetToolTip", "Выбор ячеек");
	ts_dialogcontrol(iButtonSelectCells, "seticon", iconpathselectcells);
	ts_dialogcontrol(iButtonSelectCells, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; y = 2; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonSelectionCellsOnOff, "iButtonSelectionCellsOnOff");
	ts_dialogcontrol(iButtonSelectionCellsOnOff, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonSelectionCellsOnOff, "SetToolTip", "Включить/выключить показ выбранных ячеек");
	ts_dialogcontrol(iButtonSelectionCellsOnOff, "seticon", iconpathunselectcells);
	ts_dialogcontrol(iButtonSelectionCellsOnOff, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; y = 2; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonSelectGUIDS, "iButtonSelectGUIDS");
	ts_dialogcontrol(iButtonSelectGUIDS, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonSelectGUIDS, "SetToolTip", "Выделить в проекте элементы, собранные в ячейке таблицы");
	ts_dialogcontrol(iButtonSelectGUIDS, "seticon", "32182");
	ts_dialogcontrol(iButtonSelectGUIDS, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; y = 2; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonTableHelp, "iButtonTableHelp");
	ts_dialogcontrol(iButtonTableHelp, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonTableHelp, "SetToolTip", "Помощь по работе с выбранной таблицей");
	ts_dialogcontrol(iButtonTableHelp, "seticon", "32184");
	ts_dialogcontrol(iButtonTableHelp, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; y = 2; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonHelp, "iButtonHelp");
	ts_dialogcontrol(iButtonHelp, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonHelp, "SetToolTip", "Помощь по работе с таблицами");
	ts_dialogcontrol(iButtonHelp, "seticon", "32185");
	ts_dialogcontrol(iButtonHelp, "eventreaction", "Event_ButtonClicked");

	// 2-й ряд
	x = 1; y = y + h + offs; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonOutlineOnInside, "iButtonOutlineOnInside");
	ts_dialogcontrol(iButtonOutlineOnInside, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonOutlineOnInside, "SetToolTip", "Включить внутренние линии - все толстые");
	ts_dialogcontrol(iButtonOutlineOnInside, "seticon", iconpath + "\\outlineinsideon.png");
	ts_dialogcontrol(iButtonOutlineOnInside, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonOutlineOnTinyInside, "iButtonOutlineOnTinyInside");
	ts_dialogcontrol(iButtonOutlineOnTinyInside, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonOutlineOnTinyInside, "SetToolTip", "Включить внутренние линии - горизонтальные - тонкие");
	ts_dialogcontrol(iButtonOutlineOnTinyInside, "seticon", iconpath + "\\outlineinsideonthin.png");
	ts_dialogcontrol(iButtonOutlineOnTinyInside, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonOutlineOffInside, "iButtonOutlineOffInside");
	ts_dialogcontrol(iButtonOutlineOffInside, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonOutlineOffInside, "SetToolTip", "Выключить внутренние линии");
	ts_dialogcontrol(iButtonOutlineOffInside, "seticon", iconpath + "\\outlineinsideoff.png");
	ts_dialogcontrol(iButtonOutlineOffInside, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonRowHeight, "iButtonRowHeight");
	ts_dialogcontrol(iButtonRowHeight, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonRowHeight, "SetToolTip", "Задать высоту строки");
	ts_dialogcontrol(iButtonRowHeight, "seticon", iconpath + "\\cell_height.png");
	ts_dialogcontrol(iButtonRowHeight, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonRowHeightAuto, "iButtonRowHeightAuto");
	ts_dialogcontrol(iButtonRowHeightAuto, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonRowHeightAuto, "SetToolTip", "Задать высоту строки автоматически");
	ts_dialogcontrol(iButtonRowHeightAuto, "seticon", iconpath + "\\cell_height_auto.png");
	ts_dialogcontrol(iButtonRowHeightAuto, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonColumnWidth, "iButtonColumnWidth");
	ts_dialogcontrol(iButtonColumnWidth, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonColumnWidth, "SetToolTip", "Задать ширину колонки");
	ts_dialogcontrol(iButtonColumnWidth, "seticon", iconpath + "\\cell_width.png");
	ts_dialogcontrol(iButtonColumnWidth, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonEditMacro, "iButtonEditMacro");
	ts_dialogcontrol(iButtonEditMacro, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonEditMacro, "SetToolTip", "Редактирование ячейки макроса для показа рисунков из GDL элементов");
	ts_dialogcontrol(iButtonEditMacro, "seticon", iconpatheditmacro);
	ts_dialogcontrol(iButtonEditMacro, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonRunTableProgram, "iButtonRunTableProgram");
	ts_dialogcontrol(iButtonRunTableProgram, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonRunTableProgram, "SetToolTip", "Обновление данных в таблице запуском внутренней программы (при наличии)");
	ts_dialogcontrol(iButtonRunTableProgram, "seticon", "32132");
	ts_dialogcontrol(iButtonRunTableProgram, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonTableConfigure, "iButtonTableConfigure");
	ts_dialogcontrol(iButtonTableConfigure, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonTableConfigure, "SetToolTip", "Настройка выбранной таблицы");
	ts_dialogcontrol(iButtonTableConfigure, "seticon", "32183");
	ts_dialogcontrol(iButtonTableConfigure, "eventreaction", "Event_ButtonClicked");

	x = x + w + offs; w = 24; h = 24;
	object("create", "ts_dialogcontrol", iButtonAddRowOnTop, "iButtonAddRowOnTop");
	ts_dialogcontrol(iButtonAddRowOnTop, "init_control", "iconbutton", iDialog, x, y, w, h);
	ts_dialogcontrol(iButtonAddRowOnTop, "SetToolTip", "Добавить строку сверху");
//	ts_dialogcontrol(iButtonAddRowOnTop, "seticon", "32183");
	ts_dialogcontrol(iButtonAddRowOnTop, "eventreaction", "Event_ButtonClicked");
	*/
	bool bCtrl = 0;
	bool bAlt = 0;
	bool bShift = 0;

	char charres;
	strposcharget("Т", 0, charres); // 1058 - не назначается
	strposcharget("т", 0, charres); // 

	int keyCode = charres;
	//coutvar << keyCode;
	iHotKeyCode = ts_dialog(iDialog, "RegisterHotKey", bCtrl, bAlt, bShift, keyCode);
	//coutvar << iHotKeyCode;

	bool bres;
	ts_dialog(iDialog, "invoke", bres);

    return 0;
}

int Event_PanelHotKeyEvent(int iDescr, string sDescr)
{
	int iKey;
	ts_dialog(iDescr, "get_pressed_hotkeycode", iKey);
	coutvar << iKey;
	if (iHotKeyCode == iKey)
	{
		do_iButtonEdit();
	}
}

int Event_ButtonClicked(int iDescr, string sDescr)
{
	cout << "clicked" << "\n";
	cout << sDescr << "\n";
	if (sDescr == "iButtonRotate")
	{
		do_iButtonRotate();
	}
	else if (sDescr == "iButtonEdit")
	{
		do_iButtonEdit();
	}
	else if (sDescr == "iButtonSelectGUIDS")
	{
		do_iButtonSelectGUIDS();
	}
	else if (sDescr == "iButtonRunTableProgram") 	{ 		do_iButtonReRun("Run Table Program");	}
	else if (sDescr == "iButtonTableConfigure")	{		do_iButtonReRun("Table Configure");	}

	else if (sDescr == "iButtonTableHelp")	{		do_iButtonReRun("Table Help");	}
	else if (sDescr == "iButtonEditMacro")
	{
		do_iButtonEditMacro();
	}
	else if (sDescr == "iButtonTitle")
	{
		cout << "t" << "\n";
		do_SetStyle('t',5);
	}
	else if (sDescr == "iButtonHeading")
	{
		cout << "h" << "\n";
		do_SetStyle('h', 5);
	}
	else if (sDescr == "iButtonSubHeading")
	{
		cout << "s" << "\n";
		do_SetStyle('s',5);
	}
	else if (sDescr == "iButtonNormal")
	{
		cout << "n" << "\n";
		do_SetStyle('n', 5);
	}
	else if (sDescr == "iButtonAlignLT")
	{
		cout << "lt" << "\n";
		do_SetStyle2('l', 7,'t',8);
	}
	else if (sDescr == "iButtonAlignMT")
	{
		cout << "mt" << "\n";
		do_SetStyle2('m', 7, 't', 8);
	}
	else if (sDescr == "iButtonAlignRT")
	{
		cout << "rt" << "\n";
		do_SetStyle2('r', 7, 't', 8);
	}
	else if (sDescr == "iButtonAlignLM")
	{
		do_SetStyle2('l', 7, 'm', 8);
	}
	else if (sDescr == "iButtonAlignMM")
	{
		do_SetStyle2('m', 7, 'm', 8);
	}
	else if (sDescr == "iButtonAlignRM")
	{
		do_SetStyle2('r', 7, 'm', 8);
	}
	else if (sDescr == "iButtonAlignLB")
	{
		do_SetStyle2('l', 7, 'b', 8);
	}
	else if (sDescr == "iButtonAlignMB")
	{
		do_SetStyle2('m', 7, 'b', 8);
	}
	else if (sDescr == "iButtonAlignRB")
	{
		do_SetStyle2('r', 7, 'b', 8);
	}
	else if (sDescr == "iButtonEditCancel")
	{
		ts_dialog(iDialogEdit, "PostCloseRequest", "cancel");
	}
	else if (sDescr == "iButtonEditOk")
	{
		ts_dialog(iDialogEdit, "PostCloseRequest", "ok");
	}
	else if (sDescr == "iButtonCellsConnect")
	{
		do_iButtonCellsConnect();
	}
	else if (sDescr == "iButtonCellsDisconnect")
	{
		do_iButtonCellsDisconnect();
	}
	else if (sDescr == "iButtonSelectCells")
	{
		do_iButtonSelectCells(true);
	}
	else if (sDescr == "iButtonSelectionCellsOnOff")
	{
		do_iButtonSelectionCellsOnOff();
	}
	else if (sDescr == "iButtonOutlineOnInside")
	{
		do_iButtonOutlineOnInside(1); 	// iwhat = 0/1/2 - выключить/гор-толстые/горизонтальные - тонкие
	}
	else if (sDescr == "iButtonOutlineOffInside")
	{
		do_iButtonOutlineOnInside(0); 	// iwhat = 0/1/2 - выключить/гор-толстые/горизонтальные - тонкие
	}
	else if (sDescr == "iButtonOutlineOnTinyInside")
	{
		do_iButtonOutlineOnInside(2); 	// iwhat = 0/1/2 - выключить/гор-толстые/горизонтальные - тонкие
	}
	else if (sDescr == "iButtonColumnWidth")
	{
		do_iButtonColumnWidth(); 
	}
	else if (sDescr == "iButtonRowHeight")
	{
		do_iButtonRowHeight(); 
	}
	else if (sDescr == "iButtonRowHeightAuto")
	{
		do_iButtonRowHeightAuto(); 
	}
	else if (sDescr == "iButtonScaleTable")
	{
		do_iButtonScaleTable();
	}
	else if (sDescr == "iButtonHelp")
	{
		shell_func("shellexecute", "open", "https://www.labpp.net/TSHelp/LabPP_Automat/RUS/LABPP_TableARCHICAD.html");
	}
	else if (sDescr == "iButtonExpand")
	{
		int w, h;
		ts_dialog(iDialog,"GetClientWH",w,h);
		if (h == 355) {
			h = 460;
		}
		else
		{
			h = 355;
		}
		ts_dialog(iDialog, "SetClientWH", w, h);
	}
	else if (sDescr == "iButtonAddRowOnTop") { do_iButtonAddRow(0); }
	else if (sDescr == "iButtonAddRowOnBottom") { do_iButtonAddRow(1); }
	else if (sDescr == "iButtonDeleteRow") { do_iButtonAddRow(2); }

	else if (sDescr == "iButtonAddColumnOnLeft") { do_iButtonAddColumn(0); }
	else if (sDescr == "iButtonAddColumnOnRight") { do_iButtonAddColumn(1); }
	else if (sDescr == "iButtonDeleteColumn") { do_iButtonAddColumn(2); }

	else if (sDescr == "iButtonCopy") { do_iButtonCopy(0); }
	else if (sDescr == "iButtonPaste") { do_iButtonCopy(1); }
}
int load_tableobject()
{
	int ires = ac_request("load_elements_list_from_selection", 4, "ObjectType", "MainFilter", 2, "ObjectName", "LABPP_Table");
	ires = ac_request("get_loaded_elements_list_count", 4);
	int icount = ac_getnumvalue();
	cout << "\nвсего выбрано элементов=" << icount << "\n";
	if (icount == 0)
	{
		if (sTableGuid == "")
		{
			tsalert(-3,"Сообщение", "Сначала выберите, пожалуйста, элемент таблицы","LABPP_Table","Ok");
			return -1;
		}
		ac_request("set_element_by_guidstr_as_current", sTableGuid);
		ac_request("store_current_element_to_list", 4, -1);
		ac_request("select_elements_from_list", 4, true);
	}
	ires = ac_request("set_current_element_from_list", 4, 0);
	ac_request_special("get_element_value", "EP", "GuidAsText");
	sTableGuid = ac_getstrvalue();
	return ires;
}
int do_iButtonRotate()
{
	cout << "rotate";

	if (load_tableobject() != 0)
	{
		return -1;
	}

	int ires;

	int iTable;
	object("create", "ts_table", iTable);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, ii, jj;
	int i;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int index = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if (index >= 0)
	{
		cout << "index=" << index << "\n";
		ts_table(iTableXY, "select_row", index);
		ts_table(iTableXY, "get_value_of", 4, ii);
		ts_table(iTableXY, "get_value_of", 5, jj);
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable);
		string str;
		ts_table(iTable, "select_row", ii - 1);
		ts_table(iTable, "get_value_of", jj - 1, str);
		char chaaa;
		ires = strposcharget(str, 4, chaaa);
		cout << " chaaa=" << chaaa << "\n";
		cout << str << " ii=" << ii << " jj=" << jj << "\n";
		if (chaaa != 'a')
		{
			strposcharset(str, 4, 'a', str);
		}
		else
		{
			strposcharset(str, 4, ' ', str);
		}
		cout << "str=" << str;
		ts_table(iTable, "set_value_of", jj - 1, str);
		ires = ac_request("set_object_property_value", "TS_Cells_poscode", iTable);
	}
	object("delete", iTable);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}
int do_iButtonCopy(int imode)  // 0/1 копировать/вставить
{
	cout << "copy/paste";
	int ires;

	int iTable;
	object("create", "ts_table", iTable);
	int iTable2;
	object("create", "ts_table", iTable2);
	//ires = ac_request("load_elements_list_from_selection", 4, "ObjectType", "MainFilter", 2);
	load_tableobject();
	ires = ac_request("get_loaded_elements_list_count", 4);
	int icount = ac_getnumvalue();
	cout << "\nвсего выбрано элементов=" << icount << "\n";
	if (icount == 0)
	{
		cout << "не выбраны элементы\n";
		return -1;
	}

	ires = ac_request("set_current_element_from_list", 4, 0);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, ii, jj;
	int i;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int index = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if (index >= 0)
	{
		cout << "index=" << index;
		ts_table(iTableXY, "select_row", index);
		ts_table(iTableXY, "get_value_of", 4, ii);
		ts_table(iTableXY, "get_value_of", 5, jj);
		ac_request("get_object_property_value", "TS_Cells_value", iTable);
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable2);
		string str;
		ts_table(iTable, "select_row", ii - 1);
		ts_table(iTable, "get_value_of", jj - 1, str);
		string strcode;
		ts_table(iTable2, "select_row", ii - 1);
		ts_table(iTable2, "get_value_of", jj - 1, strcode);
		if (imode == 0)
		{
			sBuffer = str;
		}
		else // imode == 1
		{
			str = sBuffer;
			cout << str << "\n";
			str = strreplace(str, ctos(13), "", 0, 0, -1);
			ts_table(iTable, "set_value_of", jj - 1, str);
			string mystr = ">\n<";
			ires = ac_request("set_object_property_value", "LABPP_NewStringSymbol", mystr);
			ires = ac_request("set_object_property_value", "TS_Cells_value", iTable);

			ires = ac_request("set_object_property_value", "ts_rowstart", ii);
			ires = ac_request("set_object_property_value", "ts_columnsnumlist", itoa(jj));
			ires = ac_request("set_object_property_value", "ts_operationtodo", "Форматировать текст в ячейках");
		}
	}
	object("delete", iTable);
	object("delete", iTable2);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}

int do_iButtonEdit()
{
	cout << "edit";
	int ires;

	int iTable;
	object("create", "ts_table", iTable);
	int iTable2;
	object("create", "ts_table", iTable2);
	//ires = ac_request("load_elements_list_from_selection", 4, "ObjectType", "MainFilter", 2);
	load_tableobject();
	ires = ac_request("get_loaded_elements_list_count", 4);
	int icount = ac_getnumvalue();
	cout << "\nвсего выбрано элементов=" << icount << "\n";
	if (icount == 0)
	{
		cout << "не выбраны элементы\n";
		return -1;
	}

	ires = ac_request("set_current_element_from_list", 4, 0);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, ii, jj;
	int i;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int index = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if (index >= 0)
	{
		cout << "index=" << index;
		ts_table(iTableXY, "select_row", index);
		ts_table(iTableXY, "get_value_of", 4, ii);
		ts_table(iTableXY, "get_value_of", 5, jj);
		ac_request("get_object_property_value", "TS_Cells_value", iTable);
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable2);
		string str;
		ts_table(iTable, "select_row", ii - 1);
		ts_table(iTable, "get_value_of", jj - 1, str);
		string strcode;
		ts_table(iTable2, "select_row", ii - 1);
		ts_table(iTable2, "get_value_of", jj - 1, strcode);

		// диалог
		object("create", "ts_dialog", iDialogEdit);
		ts_dialog(iDialogEdit, "init_dialog","modaldialog",0,0,400,175);
		ts_dialog(iDialogEdit, "SetTitle", "Редактор текста");
		
		int x, y, h, w, offs;
		object("create", "ts_dialogcontrol", iMuitilineEdit, "iMuitilineEdit");
		h = 100;
		x = 1; y = 2; w = 400-2; h = 140;
		ts_dialogcontrol(iMuitilineEdit, "init_control", "richedit", iDialogEdit, x, y, w, h, 6144);
		ts_dialogcontrol(iMuitilineEdit, "SetAnchorToPanelResize", 0, 0, 1, 1);

		// задать размер и имя шрифта
		char chaaafont;
		ires = strposcharget(strcode, 5, chaaafont);
		string fontname;
		double fontsize;
		if (chaaafont == 't')
		{
			ac_request("get_object_property_value", "TS_FontName_Title");
			fontname = ac_getstrvalue();
			ac_request("get_object_property_value", "TS_FontSize_Title");
			fontsize = ac_getnumvalue();
		}
		else if (chaaafont == 'h')
		{
			ac_request("get_object_property_value", "TS_FontName_Heading");
			fontname = ac_getstrvalue();
			ac_request("get_object_property_value", "TS_FontSize_Heading");
			fontsize = ac_getnumvalue();
		}
		else if (chaaafont == 's')
		{
			ac_request("get_object_property_value", "TS_FontName_SubHeading");
			fontname = ac_getstrvalue();
			ac_request("get_object_property_value", "TS_FontSize_SubHeading");
			fontsize = ac_getnumvalue();
		}
		else
		{
			ac_request("get_object_property_value", "TS_FontName_Normal");
			fontname = ac_getstrvalue();
			ac_request("get_object_property_value", "TS_FontSize_Normal");
			fontsize = ac_getnumvalue();
		}
		cout << "fontname=" << fontname << " fontsize=" << fontsize*1000 << "\n";
		fontsize = 3;
		fontkoeff = 100;
		//ts_dialogcontrol(iMuitilineEdit, "SetFontAngleSizeStyleName", 0, fontsize*1000/ fontkoeff, 0, fontname);
		ts_dialogcontrol(iMuitilineEdit, "SetText", str);

		x = 150+200; y = 148; w = 24; h = 24;
		x = x + w + offs;
		object("create", "ts_dialogcontrol", iButtonEditOk, "iButtonEditOk");
		ts_dialogcontrol(iButtonEditOk, "init_control", "iconbutton", iDialogEdit, x, y, w, h);
		ts_dialogcontrol(iButtonEditOk, "seticon", iconpathOk);
		ts_dialogcontrol(iButtonEditOk, "eventreaction", "Event_ButtonClicked");
		ts_dialogcontrol(iButtonEditOk, "SetAnchorToPanelResize", 1, 1, 0, 0);

		x = 150+200; y = 148; w = 24; h = 24;
		object("create", "ts_dialogcontrol", iButtonEditCancel, "iButtonEditCancel");
		ts_dialogcontrol(iButtonEditCancel, "init_control", "iconbutton", iDialogEdit, x, y, w, h);
		ts_dialogcontrol(iButtonEditCancel, "seticon", iconpathCancel);
		ts_dialogcontrol(iButtonEditCancel, "eventreaction", "Event_ButtonClicked");
		ts_dialogcontrol(iButtonEditCancel, "SetAnchorToPanelResize", 1, 1, 0, 0);
		h = 22;
		x = 1; y = y + h + offs + 2; w = 200; h = 150;
		bool bres;
		ts_dialog(iDialogEdit, "SetGrowType", 3);
		ts_dialog(iDialogEdit, "invoke", bres);
		//int index;
		//if (bres == true)
		//{
		//	if (side == 0)
		//	{
		//		ts_dialogcontrol(iLSysReshPopUp, "GetItemIndexByText", sWizResultSys, index);
		//		if (index == 0) { index = 1; }
		//		ts_dialogcontrol(iLSysReshPopUp, "SelectItem", index);
		//		reset_defaults_for_sys(iLSysReshPopUp);
		//	}
		//	else
		//	{
		//		ts_dialogcontrol(iRSysReshPopUp, "GetItemIndexByText", sWizResultSys, index);
		//		if (index == 0) { index = 1; }
		//		ts_dialogcontrol(iRSysReshPopUp, "SelectItem", index);
		//		reset_defaults_for_sys(iRSysReshPopUp);
		//	}
		//	refresh_PopUpsVisibilityBy_edit_type();
		//}

		//int res = ac_request("editstringdialog", "Введите текст", str);
		//

		if (bres != 0)
		{
			ts_dialogcontrol(iMuitilineEdit, "GetText", str);
			cout << str << "\n";
			str = strreplace(str, ctos(13), "", 0, 0, -1);
			ts_table(iTable, "set_value_of", jj - 1, str);
			string mystr = ">\n<";
			ires = ac_request("set_object_property_value", "LABPP_NewStringSymbol", mystr);
			ires = ac_request("set_object_property_value", "TS_Cells_value", iTable);

			ires = ac_request("set_object_property_value", "ts_rowstart", ii);
			ires = ac_request("set_object_property_value", "ts_columnsnumlist", itoa(jj));
			ires = ac_request("set_object_property_value", "ts_operationtodo", "Форматировать текст в ячейках");
		}
		object("delete", iDialogEdit);
	}
	object("delete", iTable);
	object("delete", iTable2);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}
int do_iButtonEditMacro()
{
	cout << "edit macro";
	int ires;

	int iTable;
	object("create", "ts_table", iTable);
	int iTable2;
	object("create", "ts_table", iTable2);
	//ires = ac_request("load_elements_list_from_selection", 4, "ObjectType", "MainFilter", 2);
	load_tableobject();
	ires = ac_request("get_loaded_elements_list_count", 4);
	int icount = ac_getnumvalue();
	cout << "\nвсего выбрано элементов=" << icount << "\n";
	if (icount == 0)
	{
		cout << "не выбраны элементы\n";
		return -1;
	}

	ires = ac_request("set_current_element_from_list", 4, 0);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, ii, jj;
	int i;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int index = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if (index >= 0)
	{
		cout << "index=" << index;
		ts_table(iTableXY, "select_row", index);
		ts_table(iTableXY, "get_value_of", 4, ii);
		ts_table(iTableXY, "get_value_of", 5, jj);
		ac_request("get_object_property_value", "TS_Cells_macro", iTable);
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable2);
		string str;
		ts_table(iTable, "select_row", ii - 1);
		ts_table(iTable, "get_value_of", jj - 1, str);
		string strcode;
		ts_table(iTable2, "select_row", ii - 1);
		ts_table(iTable2, "get_value_of", jj - 1, strcode);

		// диалог
		object("create", "ts_dialog", iDialogEdit);
		ts_dialog(iDialogEdit, "init_dialog", "modaldialog", 0, 0, 400, 175);
		ts_dialog(iDialogEdit, "SetTitle", "Редактор текста");

		int x, y, h, w, offs;
		object("create", "ts_dialogcontrol", iMuitilineEdit, "iMuitilineEdit");
		h = 100;
		x = 1; y = 2; w = 400-2; h = 140;
		ts_dialogcontrol(iMuitilineEdit, "init_control", "richedit", iDialogEdit, x, y, w, h, 6144);
		ts_dialogcontrol(iMuitilineEdit, "SetAnchorToPanelResize", 0, 0, 1, 1);

		ts_dialogcontrol(iMuitilineEdit, "SetText", str);

		x = 150 + 200; y = 148; w = 24; h = 24;
		x = x + w + offs;
		object("create", "ts_dialogcontrol", iButtonEditOk, "iButtonEditOk");
		ts_dialogcontrol(iButtonEditOk, "init_control", "iconbutton", iDialogEdit, x, y, w, h);
		ts_dialogcontrol(iButtonEditOk, "seticon", iconpathOk);
		ts_dialogcontrol(iButtonEditOk, "eventreaction", "Event_ButtonClicked");
		ts_dialogcontrol(iButtonEditOk, "SetAnchorToPanelResize", 1, 1, 0, 0);

		x = 150 + 200; y = 148; w = 24; h = 24;
		object("create", "ts_dialogcontrol", iButtonEditCancel, "iButtonEditCancel");
		ts_dialogcontrol(iButtonEditCancel, "init_control", "iconbutton", iDialogEdit, x, y, w, h);
		ts_dialogcontrol(iButtonEditCancel, "seticon", iconpathCancel);
		ts_dialogcontrol(iButtonEditCancel, "eventreaction", "Event_ButtonClicked");
		ts_dialogcontrol(iButtonEditCancel, "SetAnchorToPanelResize", 1, 1, 0, 0);
		h = 22;
		x = 1; y = y + h + offs + 2; w = 200; h = 150;
		bool bres;
		ts_dialog(iDialogEdit, "SetGrowType", 3);
		ts_dialog(iDialogEdit, "invoke", bres);
		//int index;
		//if (bres == true)
		//{
		//	if (side == 0)
		//	{
		//		ts_dialogcontrol(iLSysReshPopUp, "GetItemIndexByText", sWizResultSys, index);
		//		if (index == 0) { index = 1; }
		//		ts_dialogcontrol(iLSysReshPopUp, "SelectItem", index);
		//		reset_defaults_for_sys(iLSysReshPopUp);
		//	}
		//	else
		//	{
		//		ts_dialogcontrol(iRSysReshPopUp, "GetItemIndexByText", sWizResultSys, index);
		//		if (index == 0) { index = 1; }
		//		ts_dialogcontrol(iRSysReshPopUp, "SelectItem", index);
		//		reset_defaults_for_sys(iRSysReshPopUp);
		//	}
		//	refresh_PopUpsVisibilityBy_edit_type();
		//}

		//int res = ac_request("editstringdialog", "Введите текст", str);
		//

		if (bres != 0)
		{
			ts_dialogcontrol(iMuitilineEdit, "GetText", str);
			cout << str << "\n";
			str = strreplace(str, ctos(13), "", 0, 0, -1);
			ts_table(iTable, "set_value_of", jj - 1, str);
			ires = ac_request("set_object_property_value", "TS_Cells_macro", iTable);
		}
		object("delete", iDialogEdit);
	}
	object("delete", iTable);
	object("delete", iTable2);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}
int do_iButtonSelectGUIDS()
{
	cout << "edit guids";
	int ires;

	int iTable;
	object("create", "ts_table", iTable);
	int iTable2;
	object("create", "ts_table", iTable2);
	//ires = ac_request("load_elements_list_from_selection", 4, "ObjectType", "MainFilter", 2);
	load_tableobject();
	ires = ac_request("get_loaded_elements_list_count", 4);
	int icount = ac_getnumvalue();
	cout << "\nвсего выбрано элементов=" << icount << "\n";
	if (icount == 0)
	{
		cout << "не выбраны элементы\n";
		return -1;
	}

	ires = ac_request("set_current_element_from_list", 4, 0);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, ii, jj;
	int i;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int index = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if (index >= 0)
	{
		cout << "index=" << index;
		ts_table(iTableXY, "select_row", index);
		ts_table(iTableXY, "get_value_of", 4, ii);
		ts_table(iTableXY, "get_value_of", 5, jj);
		ac_request("get_object_property_value", "TS_CellsGUIDS", iTable);
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable2);
		string str;
		ts_table(iTable, "select_row", ii - 1);
		ts_table(iTable, "get_value_of", jj - 1, str);
		string strcode;
		ts_table(iTable2, "select_row", ii - 1);
		ts_table(iTable2, "get_value_of", jj - 1, strcode);

		programcodegen("show_bimmaster_and_fill_elemselection", str);
		coutvar << str;
	}
	object("delete", iTable);
	object("delete", iTable2);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}

int do_SetStyle(char chaaa, int ipos)
{
	cout << "style";
	int ires;

	int iTable;
	object("create", "ts_table", iTable);
	//ires = ac_request("load_elements_list_from_selection", 4, "ObjectType", "MainFilter", 2);
	load_tableobject();
	ires = ac_request("get_loaded_elements_list_count", 4);
	int icount = ac_getnumvalue();
	cout << "\nвсего выбрано элементов=" << icount << "\n";
	if (icount == 0)
	{
		cout << "не выбраны элементы\n";
		return -1;
	}

	ires = ac_request("set_current_element_from_list", 4, 0);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, ii, jj;
	int i;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int index = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if (index >= 0)
	{
		cout << "index=" << index << "\n";
		ts_table(iTableXY, "select_row", index);
		ts_table(iTableXY, "get_value_of", 4, ii);
		ts_table(iTableXY, "get_value_of", 5, jj);
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable);
		string str;
		ts_table(iTable, "select_row", ii - 1);
		ts_table(iTable, "get_value_of", jj - 1, str);
		ires = strposcharset(str, ipos, chaaa, str);
		cout << str;
		cout << " ires = " << ires << "\n";
		cout << str << " ii=" << ii << " jj=" << jj << "\n";

		cout << "str=" << str;
		ts_table(iTable, "set_value_of", jj - 1, str);
		ires = ac_request("set_object_property_value", "TS_Cells_poscode", iTable);
	}
	object("delete", iTable);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}
int do_SetStyle2(char chaaa, int ipos, char chaaa2, int ipos2)
{
	cout << "style";
	int ires;

	int iTable;
	object("create", "ts_table", iTable);
	//ires = ac_request("load_elements_list_from_selection", 4, "ObjectType", "MainFilter", 2);
	load_tableobject();
	ires = ac_request("get_loaded_elements_list_count", 4);
	int icount = ac_getnumvalue();
	cout << "\nвсего выбрано элементов=" << icount << "\n";
	if (icount == 0)
	{
		cout << "не выбраны элементы\n";
		return -1;
	}

	ires = ac_request("set_current_element_from_list", 4, 0);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, ii, jj;
	int i;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int index = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if (index >= 0)
	{
		cout << "index=" << index << "\n";
		ts_table(iTableXY, "select_row", index);
		ts_table(iTableXY, "get_value_of", 4, ii);
		ts_table(iTableXY, "get_value_of", 5, jj);
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable);
		string str;
		ts_table(iTable, "select_row", ii - 1);
		ts_table(iTable, "get_value_of", jj - 1, str);
		ires = strposcharset(str, ipos, chaaa, str);
		if (ipos >= 0)
		{
			ires = strposcharset(str, ipos2, chaaa2, str);
		}
		cout << str;
		cout << " ires = " << ires << "\n";
		cout << str << " ii=" << ii << " jj=" << jj << "\n";

		cout << "str=" << str;
		ts_table(iTable, "set_value_of", jj - 1, str);
		ires = ac_request("set_object_property_value", "TS_Cells_poscode", iTable);
	}
	object("delete", iTable);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}

int do_iButtonScaleTable()
{
	cout << "iButtonScaleTable";

	if (load_tableobject() != 0)
	{
		return -1;
	}

	int ires;

	double dScale = 1.00;
	ires = ac_request("editdoubledialog", "Задайте масштабный коэффициент", dScale);
	if (ires == 0)
	{
		// пользователь отказался
		return -1;
	}
	dScale = ac_getnumvalue();
	coutvar << dScale;
	ires = ac_request("set_object_property_value", "TS_ScaleCoefficient", dScale);
	ires = ac_request("set_object_property_value", "TS_OperationToDo", "Масштабировать");
	ires = ac_request("set_object_property_value", "TS_DoRecalcAll", 1);
	ac_request_special("RunGDLParScript");
	cout << "Завершение работы\n";
	return 0;
}

int do_iButtonColumnWidth()
{
	cout << "iButtonColumnWidth";

	if (load_tableobject() != 0)
	{
		return -1;
	}

	int ires;

	int iTableXY;
	object("create", "ts_table", iTableXY);
	int iTableColumnsW;
	object("create", "ts_table", iTableColumnsW);

	ac_request("get_object_property_value", "TS_ColumnsW", iTableColumnsW);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, iiLT, jjLT, iiBR, jjBR;
	int i, j;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку левой верхней ячейки", ssX, ssY);
	double ssX2, ssY2;
	ires = ac_request("interface_input2dpoint", "Укажите точку правой нижней ячейки", ssX2, ssY2);
	if (ires != 0)
	{
		return -1;
	}

	double dColumnWidth = 100;
	ires = ac_request("editdoubledialog", "Задайте ширину колонки", dColumnWidth);
	cout << "Ширина="<< dColumnWidth << "\n";
	if (ires == 0)
	{
		// пользователь отказался
		return -1;
	}
	dColumnWidth = ac_getnumvalue();

	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	ssX2 = ssX2 - posX;
	ssY2 = ssY2 - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;
	double checkcoordX2 = ssX2;
	double checkcoordY2 = ssY2;

	int indexLT = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	int indexBR = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX2, checkcoordY2, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if ((indexLT >= 0) && (indexBR >= 0))
	{
		cout << "indexLT=" << indexLT << "\n";
		cout << "indexBR=" << indexBR << "\n";
		ts_table(iTableXY, "select_row", indexLT);
		ts_table(iTableXY, "get_value_of", 4, iiLT);
		ts_table(iTableXY, "get_value_of", 5, jjLT);
		ts_table(iTableXY, "select_row", indexBR);
		ts_table(iTableXY, "get_value_of", 4, iiBR);
		ts_table(iTableXY, "get_value_of", 5, jjBR); // i - по строкам, j - по колонкам
//		cout << "iiLT=" << iiLT << " iiBR=" << iiBR << "\n";
		cout << "jjLT=" << jjLT << " jjBR=" << jjBR << "\n";
		
		for (j = jjLT; j <= jjBR; j++)
		{
			ts_table(iTableColumnsW, "select_row", j-1);
			ts_table(iTableColumnsW, "set_value_of", 0, dColumnWidth/1000);
		}

		ires = ac_request("set_object_property_value", "TS_ColumnsW", iTableColumnsW);
		ires = ac_request("set_object_property_value", "TS_DoRecalcAll", 1);
		ac_request_special("RunGDLParScript");
	}
	object("delete", iTableXY);
	object("delete", iTableColumnsW);
	cout << "Завершение работы\n";
	return 0;
}

// Вставить сверху, снизу или удалить строку (0/1/2)
int do_iButtonAddRow(int iwhatdo)
{
	if (load_tableobject() != 0)
	{
		return -1;
	}

	double ssX, ssY;
	int ires = ac_request("interface_input2dpoint", "Укажите строку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}

	int iTable;
	object("create", "ts_table", iTable);
	int iTable2;
	object("create", "ts_table", iTable2);

	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	int iTableRowsH;
	object("create", "ts_table", iTableRowsH);
	ac_request("get_object_property_value", "TS_RowsH", iTableRowsH);

	int index = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	int ii, jj;
	string str, strcode;
	int irow, icolumn;
	if (index >= 0)
	{
		ts_table(iTableXY, "select_row", index);
		ts_table(iTableXY, "get_value_of", 4, ii);
		ts_table(iTableXY, "get_value_of", 5, jj);
		if (iwhatdo == 1) {
			ii++; 
		}
		coutvar << ii;
		coutvar << jj;

		ac_request("get_object_property_value", "TS_Cells_value", iTable);
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable2);

		ac_request("get_object_property_value", "TS_RowsUsedCount");
		int TS_RowsUsedCount = ac_getnumvalue();
		ac_request("get_object_property_value", "TS_ColumnsUsedCount");
		int TS_ColumnsUsedCount = ac_getnumvalue();
		double rowH;
		if (iwhatdo != 2) // если вставить строку
		{
			for (irow = TS_RowsUsedCount + 1; irow >= ii; irow--)
			{
				if (irow == ii)
				{
					ts_table(iTableRowsH, "select_row", irow - 1);
				}
				else
				{
					ts_table(iTableRowsH, "select_row", irow - 2);
				}

				ts_table(iTableRowsH, "get_value_of", 0, rowH);
				ts_table(iTableRowsH, "select_row", irow - 1);
				ts_table(iTableRowsH, "set_value_of", 0, rowH);
				coutvar << irow;
				for (icolumn = 1; icolumn <= TS_ColumnsUsedCount; icolumn++)
				{
					if (irow == ii)
					{
						ts_table(iTable, "select_row", irow - 1);
						str = "";
					}
					else
					{
						ts_table(iTable, "select_row", irow - 2);
						ts_table(iTable, "get_value_of", icolumn - 1, str);
					}
					ts_table(iTable, "select_row", irow - 1);
					ts_table(iTable, "set_value_of", icolumn - 1, str);

					if (irow == ii)
					{
						ts_table(iTable2, "select_row", irow - 1);
					}
					else
					{
						ts_table(iTable2, "select_row", irow - 2);
					}
					ts_table(iTable2, "get_value_of", icolumn - 1, strcode);
					ts_table(iTable2, "select_row", irow - 1);
					ts_table(iTable2, "set_value_of", icolumn - 1, strcode);
				}
			}
			TS_RowsUsedCount++;
		}
		else // если удалить строку
		{
			for (irow = ii; irow <= TS_RowsUsedCount; irow++)
			{
				ts_table(iTableRowsH, "select_row", irow);
				ts_table(iTableRowsH, "get_value_of", 0, rowH);
				ts_table(iTableRowsH, "select_row", irow-1);
				ts_table(iTableRowsH, "set_value_of", 0, rowH);
				coutvar << irow;
				for (icolumn = 1; icolumn <= TS_ColumnsUsedCount; icolumn++)
				{
					ts_table(iTable, "select_row", irow);
					ts_table(iTable, "get_value_of", icolumn - 1, str);
					ts_table(iTable, "select_row", irow-1);
					ts_table(iTable, "set_value_of", icolumn - 1, str);

					ts_table(iTable2, "select_row", irow);
					ts_table(iTable2, "get_value_of", icolumn - 1, strcode);
					ts_table(iTable2, "select_row", irow-1);
					ts_table(iTable2, "set_value_of", icolumn - 1, strcode);
				}
			}
			TS_RowsUsedCount--;
		}
		ac_request("set_object_property_value", "TS_RowsH", iTableRowsH);
		ac_request("set_object_property_value", "TS_Cells_value", iTable);
		ac_request("set_object_property_value", "TS_Cells_poscode", iTable2);

		ires = ac_request("set_object_property_value", "TS_RowsUsedCount", TS_RowsUsedCount);
		coutvar << TS_RowsUsedCount;
		ires = ac_request("set_object_property_value", "TS_DoRecalcAll", 1);

	}
	object("delete", iTableXY);
	object("delete", iTable);
	object("delete", iTable2);
	object("delete", iTableRowsH);
}
// Вставить колонку слева, справа или удалить колонку (0/1/2)
int do_iButtonAddColumn(int iwhatdo)
{
	if (load_tableobject() != 0)
	{
		return -1;
	}

	double ssX, ssY;
	int ires = ac_request("interface_input2dpoint", "Укажите колонку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}

	int iTable;
	object("create", "ts_table", iTable);
	int iTable2;
	object("create", "ts_table", iTable2);

	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	int iTableColumnsW;
	object("create", "ts_table", iTableColumnsW);
	ac_request("get_object_property_value", "TS_ColumnsW", iTableColumnsW);

	int index = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	int ii, jj;
	string str, strcode;
	int irow, icol;
	if (index >= 0)
	{
		ts_table(iTableXY, "select_row", index);
		ts_table(iTableXY, "get_value_of", 4, ii);
		ts_table(iTableXY, "get_value_of", 5, jj);
		if (iwhatdo == 1) {
			jj++;
		}
		coutvar << ii;
		coutvar << jj;

		ac_request("get_object_property_value", "TS_Cells_value", iTable);
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable2);

		ac_request("get_object_property_value", "TS_RowsUsedCount");
		int TS_RowsUsedCount = ac_getnumvalue();
		ac_request("get_object_property_value", "TS_ColumnsUsedCount");
		int TS_ColumnsUsedCount = ac_getnumvalue();
		double colW;
		if (iwhatdo != 2) // если вставить колонку
		{
			for (icol = TS_ColumnsUsedCount + 1; icol >= jj; icol--)
			{
				if (icol == jj)
				{
					ts_table(iTableColumnsW, "select_row", icol - 1);
				}
				else
				{
					ts_table(iTableColumnsW, "select_row", icol - 2);
				}

				ts_table(iTableColumnsW, "get_value_of", 0, colW);
				ts_table(iTableColumnsW, "select_row", icol - 1);
				ts_table(iTableColumnsW, "set_value_of", 0, colW);
				coutvar << icol;
				for (irow = 1; irow <= TS_RowsUsedCount; irow++)
				{
					ts_table(iTable, "select_row", irow - 1);
					if (icol == jj)
					{
//						ts_table(iTable, "select_row", icol - 1);
						ts_table(iTable, "get_value_of", icol - 1, str);
						str = "";
					}
					else
					{
						//ts_table(iTable, "select_row", icol - 2);
						//ts_table(iTable, "get_value_of", irow - 1, str);
						ts_table(iTable, "get_value_of", icol - 2, str);
					}
					//ts_table(iTable, "select_row", icol - 1);
					ts_table(iTable, "set_value_of", icol - 1, str);

					ts_table(iTable2, "select_row", irow - 1);
					if (icol == jj)
					{
						//ts_table(iTable2, "select_row", icol - 1);
						ts_table(iTable2, "get_value_of", icol - 1, strcode);
					}
					else
					{
						//ts_table(iTable2, "select_row", icol - 2);
						ts_table(iTable2, "get_value_of", icol - 2, strcode);
					}
					//ts_table(iTable2, "get_value_of", irow - 1, strcode);
					//ts_table(iTable2, "select_row", icol - 1);
					ts_table(iTable2, "set_value_of", icol - 1, strcode);
				}
			}
			TS_ColumnsUsedCount++;
		}
		else // если удалить колонку
		{
			for (icol = jj; icol <= TS_ColumnsUsedCount; icol++)
			{
				ts_table(iTableColumnsW, "select_row", icol);
				ts_table(iTableColumnsW, "get_value_of", 0, colW);
				ts_table(iTableColumnsW, "select_row", icol - 1);
				ts_table(iTableColumnsW, "set_value_of", 0, colW);
				coutvar << icol;
				for (irow = 1; irow <= TS_RowsUsedCount; irow++)
				{
					ts_table(iTable, "select_row", irow-1);
					ts_table(iTable, "get_value_of", icol, str);
					ts_table(iTable, "set_value_of", icol - 1, str);

					ts_table(iTable2, "select_row", irow-1);
					ts_table(iTable2, "get_value_of", icol, strcode);
					ts_table(iTable2, "set_value_of", icol - 1, strcode);
				}
			}
			TS_ColumnsUsedCount--;
		}
		ac_request("set_object_property_value", "TS_ColumnsW", iTableColumnsW);
		ac_request("set_object_property_value", "TS_Cells_value", iTable);
		ac_request("set_object_property_value", "TS_Cells_poscode", iTable2);

		ires = ac_request("set_object_property_value", "TS_ColumnsUsedCount", TS_ColumnsUsedCount);
		coutvar << TS_RowsUsedCount;
		ires = ac_request("set_object_property_value", "TS_DoRecalcAll", 1);

	}
	object("delete", iTableXY);
	object("delete", iTable);
	object("delete", iTable2);
	object("delete", iTableColumnsW);
}

int do_iButtonRowHeight()
{
	cout << "iButtonRowHeight";

	if (load_tableobject() != 0)
	{
		return -1;
	}

	int ires;

	int iTableXY;
	object("create", "ts_table", iTableXY);
	int iTableRowsH;
	object("create", "ts_table", iTableRowsH);

	ac_request("get_object_property_value", "TS_RowsH", iTableRowsH);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, iiLT, jjLT, iiBR, jjBR;
	int i, j;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку левой верхней ячейки", ssX, ssY);
	double ssX2, ssY2;
	ires = ac_request("interface_input2dpoint", "Укажите точку правой нижней ячейки", ssX2, ssY2);
	if (ires != 0)
	{
		return -1;
	}

	double dRowsHeight = 100;
	ires = ac_request("editdoubledialog", "Задайте ширину колонки", dRowsHeight);
	if (ires == 0)
	{
		// пользователь отказался
		return -1;
	}
	dRowsHeight = ac_getnumvalue();

	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	ssX2 = ssX2 - posX;
	ssY2 = ssY2 - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;
	double checkcoordX2 = ssX2;
	double checkcoordY2 = ssY2;

	int indexLT = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	int indexBR = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX2, checkcoordY2, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if ((indexLT >= 0) && (indexBR >= 0))
	{
		cout << "indexLT=" << indexLT << "\n";
		cout << "indexBR=" << indexBR << "\n";
		ts_table(iTableXY, "select_row", indexLT);
		ts_table(iTableXY, "get_value_of", 4, iiLT);
		ts_table(iTableXY, "get_value_of", 5, jjLT);
		ts_table(iTableXY, "select_row", indexBR);
		ts_table(iTableXY, "get_value_of", 4, iiBR);
		ts_table(iTableXY, "get_value_of", 5, jjBR); // i - по строкам, j - по колонкам
		cout << "iiLT=" << iiLT << " iiBR=" << iiBR << "\n";

		for (i = iiLT; i <= iiBR; i++)
		{
			ts_table(iTableRowsH, "select_row", i - 1);
			ts_table(iTableRowsH, "set_value_of", 0, dRowsHeight / 1000);
		}
		ires = ac_request("set_object_property_value", "TS_RowsH", iTableRowsH);
		ires = ac_request("set_object_property_value", "TS_DoRecalcAll", 1);
		ac_request_special("RunGDLParScript");
	}
	object("delete", iTableXY);
	object("delete", iTableRowsH);
	cout << "Завершение работы\n";
	return 0;
}
int do_iButtonRowHeightAuto()
{
	cout << "iButtonRowHeight";

	if (load_tableobject() != 0)
	{
		return -1;
	}

	int ires;

	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, iiLT, jjLT, iiBR, jjBR;
	int i, j;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку левой верхней ячейки", ssX, ssY);
	double ssX2, ssY2;
	ires = ac_request("interface_input2dpoint", "Укажите точку правой нижней ячейки", ssX2, ssY2);
	if (ires != 0)
	{
		return -1;
	}

	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	ssX2 = ssX2 - posX;
	ssY2 = ssY2 - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;
	double checkcoordX2 = ssX2;
	double checkcoordY2 = ssY2;

	int indexLT = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	int indexBR = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX2, checkcoordY2, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if ((indexLT >= 0) && (indexBR >= 0))
	{
		cout << "indexLT=" << indexLT << "\n";
		cout << "indexBR=" << indexBR << "\n";
		ts_table(iTableXY, "select_row", indexLT);
		ts_table(iTableXY, "get_value_of", 4, iiLT);
		ts_table(iTableXY, "get_value_of", 5, jjLT);
		ts_table(iTableXY, "select_row", indexBR);
		ts_table(iTableXY, "get_value_of", 4, iiBR);
		ts_table(iTableXY, "get_value_of", 5, jjBR); // i - по строкам, j - по колонкам
		cout << "iiLT=" << iiLT << " iiBR=" << iiBR << "\n";

		ires = ac_request("set_object_property_value", "ts_rowstart", iiLT);
		ires = ac_request("set_object_property_value", "ts_rowend", iiBR);
		ires = ac_request("set_object_property_value", "ts_columnsnumlist", itoa(jjLT) + "-" + itoa(jjBR));
		string mystr = ">\n<";
		ires = ac_request("set_object_property_value", "LABPP_NewStringSymbol", mystr);
		ires = ac_request("set_object_property_value", "ts_operationtodo", "Подогнать высоту строк по тексту");
		ires = ac_request("set_object_property_value", "TS_DoRecalcAll", 1);
	}
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}

int get_iijj()
{
	int ires;

	ires = ac_request("load_elements_list_from_selection", 4, "ObjectType", "MainFilter", 2);
	ires = ac_request("get_loaded_elements_list_count", 4);
	int icount = ac_getnumvalue();
	cout << "\nвсего выбрано элементов=" << icount << "\n";
	if (icount == 0)
	{
		cout << "не выбраны элементы\n";
		return -1;
	}

	ires = ac_request("set_current_element_from_list", 4, 0);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, ii, jj;
	int i;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int index = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if (index >= 0)
	{
		cout << "index=" << index;
		ts_table(iTableXY, "select_row", index);
		ts_table(iTableXY, "get_value_of", 4, ii);
		ts_table(iTableXY, "get_value_of", 5, jj);
		ac_request("get_object_property_value", "TS_Cells_value", iTable);
		string str;
		ts_table(iTable, "select_row", ii - 1);
		ts_table(iTable, "get_value_of", jj - 1, str);

		int res = ac_request("editstringdialog", "Введите текст", str);

		if (res != 0)
		{
			str = ac_getstrvalue();
			ts_table(iTable, "set_value_of", jj - 1, str);
			res = ac_request("set_object_property_value", "TS_Cells_value", iTable);
		}
	}
	//ts_table(iTable, "select_row", 4);
	//ts_table(iTable, "get_value_of", 3, str);
	//cout << "str=" << str;

	//ts_table(iTable, "set_value_of", 8, "11111111111111111-1111111111111111 222222222222222222-2222222222222222 33333333-333333333333-3333333333333-33333333333 11111111-1111111-11111111-1111111111 2222222222222222222222222222222222 33333333333333-333333333333333333-333333333333 111111111-111111111111111-111111111 22222222-2222222222222222-2222222222 33333-333333333333333333333-333333333333333333 88 55555555555555555555555555555555555555555555 66666666667 7777777777777777777 9 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 88 5555555555-5555555555-55555555555-5555555555555 66666666667 777777-777777-7777777 99\
	//	11111111111111111 - 1111111111111111 222222222222222222 - 2222222222222222 33333333 - 333333333333 - 3333333333333 - 33333333333 11111111 - 1111111 - 11111111 - 1111111111 2222222222222222222222222222222222 33333333333333 - 333333333333333333 - 333333333333 111111111 - 111111111111111 - 111111111 22222222 - 2222222222222222 - 2222222222 33333 - 333333333333333333333 - 333333333333333333 88 55555555555555555555555555555555555555555555 66666666667 7777777777777777777 9 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 88 5555555555 - 5555555555 - 55555555555 - 5555555555555 66666666667 777777 - 777777 - 7777777 99\
	//	11111111111111111 - 1111111111111111 222222222222222222 - 2222222222222222 33333333 - 333333333333 - 3333333333333 - 33333333333 11111111 - 1111111 - 11111111 - 1111111111 2222222222222222222222222222222222 33333333333333 - 333333333333333333 - 333333333333 111111111 - 111111111111111 - 111111111 22222222 - 2222222222222222 - 2222222222 33333 - 333333333333333333333 - 333333333333333333 88 55555555555555555555555555555555555555555555 66666666667 7777777777777777777 9 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 88 5555555555 - 5555555555 - 55555555555 - 5555555555555 66666666667 777777 - 777777 - 7777777 99");
	//ts_table(iTable, "set_value_of", 5, "111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 111111111111111111111111111111111 2222222222222222222222222222222222 33333333333333333333333333333333333333333333 88");
	//ts_table(iTable, "print_to_str", str);
	//cout << "str=" << str;
	//ires = ac_request("set_object_property_value", "TS_Cells_value",iTable);
	//cout << "ires=" << ires;
	object("delete", iTable);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}

// Объединить ячейки
// rowLT / colLT - номер строки и колонки у ячейки LT
// rowBR / colBR - номер строки и колонки у ячейки BR
// iTable_TS_Cells_poscode - дескриптор таблицы TS_Cells_poscode
// если успешно объединены - возвращает 0, если есть уже объединенные ячейки - возвращает -1
int ts_table_CellsConnect(int rowLT, int colLT, int rowBR, int colBR, int iTable_TS_Cells_poscode)
{
	int ires;
	int width = colBR - colLT + 1;
	int height = rowBR - rowLT + 1;
	string str;
	char L, T, R, B;
	bool bAllreadyConnected = false;
	int i, j;
	for (i = rowLT; i <= rowBR; i++)
	{
		//ts_table(iTableXY, "select_row", i);
		for (j = colLT; j <= colBR; j++)
		{
			//cout << "rowLT=" << rowLT << " rowBR=" << rowBR << "colLT=" << colLT << " colBR=" << colBR << "\n";
			ts_table(iTable_TS_Cells_poscode, "select_row", i - 1);
			ts_table(iTable_TS_Cells_poscode, "get_value_of", j - 1, str);
			strposcharget(str, 0, L);
			strposcharget(str, 1, T);
			strposcharget(str, 2, R);
			strposcharget(str, 3, B);
			bAllreadyConnected = false;
			if (((L != 'L') || (T != 'T')) || ((R != 'R') || (B != 'B')))
			{
				bAllreadyConnected = true;
				cout << "L=" << L << " T=" << T << " R=" << R << " B=" << B << "\n";
				cout << "rowLT=" << rowLT << " rowBR=" << rowBR << "colLT=" << colLT << " colBR=" << colBR << "\n";
				cout << "Невозможно объединить ячейки\n";
				breakpoint(111);
				break;
			}

			if (width > 1)
			{
				if (j < colBR)
				{
					strposcharset(str, 2, '_', str); // R
				}
				if (j > colLT)
				{
					strposcharset(str, 0, '_', str); // L
				}
			}

			if (height > 1)
			{
				if (i > rowLT)
				{
					strposcharset(str, 1, '_', str); // T
				}
				if (i < rowBR)
				{
					strposcharset(str, 3, '_', str); // B
				}
			}
			ts_table(iTable_TS_Cells_poscode, "set_value_of", j - 1, str);
		}
		if (bAllreadyConnected)
		{
			break;
		}
	}
	if (bAllreadyConnected)
	{
		return -1;
	}
	return 0;
}

int do_iButtonCellsConnect()
{
	cout << "conn";

	if (load_tableobject() != 0)
	{
		return -1;
	}

	int ires;
	int iTable;
	object("create", "ts_table", iTable);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, iiLT, jjLT, iiBR, jjBR;
	int i,j;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку левой верхней ячейки", ssX, ssY);
	double ssX2, ssY2;
	ires = ac_request("interface_input2dpoint", "Укажите точку правой нижней ячейки", ssX2, ssY2);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	ssX2 = ssX2 - posX;
	ssY2 = ssY2 - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;
	double checkcoordX2 = ssX2;
	double checkcoordY2 = ssY2;

	int indexLT = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	int indexBR = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX2, checkcoordY2, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if ((indexLT >= 0)&&(indexBR>=0))
	{
		cout << "indexLT=" << indexLT << "\n";
		cout << "indexBR=" << indexBR << "\n";
		ts_table(iTableXY, "select_row", indexLT);
		ts_table(iTableXY, "get_value_of", 4, iiLT);
		ts_table(iTableXY, "get_value_of", 5, jjLT);
		ts_table(iTableXY, "select_row", indexBR);
		ts_table(iTableXY, "get_value_of", 4, iiBR);
		ts_table(iTableXY, "get_value_of", 5, jjBR);
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable);
		ires = ts_table_CellsConnect(iiLT, jjLT, iiBR, jjBR, iTable);
		if (ires == 0)
		{
			ires = ac_request("set_object_property_value", "TS_Cells_poscode", iTable);
			ires = ac_request("set_object_property_value", "TS_DoRecalcAll", 1);
			ac_request_special("RunGDLParScript");
		}
	}
	object("delete", iTable);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}
// iwhat = 0/1/2 - выключить/гор-толстые/горизонтальные - тонкие
int do_iButtonOutlineOnInside(int iwhat)
{
	cout << "outlines ";

	if (load_tableobject() != 0)
	{
		return -1;
	}

	int ires;

	int iTable;
	object("create", "ts_table", iTable);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, iiLT, jjLT, iiBR, jjBR;
	int i, j;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку левой верхней ячейки", ssX, ssY);
	double ssX2, ssY2;
	ires = ac_request("interface_input2dpoint", "Укажите точку правой нижней ячейки", ssX2, ssY2);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	ssX2 = ssX2 - posX;
	ssY2 = ssY2 - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;
	double checkcoordX2 = ssX2;
	double checkcoordY2 = ssY2;

	int indexLT = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	int indexBR = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX2, checkcoordY2, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if ((indexLT >= 0) && (indexBR >= 0))
	{
		cout << "indexLT=" << indexLT << "\n";
		cout << "indexBR=" << indexBR << "\n";
		ts_table(iTableXY, "select_row", indexLT);
		ts_table(iTableXY, "get_value_of", 4, iiLT);
		ts_table(iTableXY, "get_value_of", 5, jjLT);
		ts_table(iTableXY, "select_row", indexBR);
		ts_table(iTableXY, "get_value_of", 4, iiBR);
		ts_table(iTableXY, "get_value_of", 5, jjBR);
		int width = jjBR - jjLT + 1;
		int height = iiBR - iiLT + 1;
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable);
		string str;
		char L, T, R, B;
		for (i = iiLT; i <= iiBR; i++)
		{
			//ts_table(iTableXY, "select_row", i);
			for (j = jjLT; j <= jjBR; j++)
			{
				//cout << "iiLT=" << iiLT << " iiBR=" << iiBR << "jjLT=" << jjLT << " jjBR=" << jjBR << "\n";
				ts_table(iTable, "select_row", i - 1);
				ts_table(iTable, "get_value_of", j - 1, str);
				strposcharget(str, 10-1, L);
				strposcharget(str, 11-1, T);
				strposcharget(str, 12-1, R);
				strposcharget(str, 13-1, B);
				//cout << "L=" << L << " T=" << T << " R=" << R << " B=" << B << "\n";

				if (width > 1)
				{
					if (j < jjBR)
					{
						if (iwhat == 0) 
						{
							strposcharset(str, 12 - 1, '0', str); // R
						}
						else
						{
							strposcharset(str, 12 - 1, '1', str); // R
						}
					}
					if (j > jjLT)
					{
						if (iwhat == 0) 
						{
							strposcharset(str, 10 - 1, '0', str); // L
						}
						else 
						{
							strposcharset(str, 10 - 1, '1', str); // L
						}
					}
				}

				if (height > 1)
				{
					if (i > iiLT)
					{
						if (iwhat == 0)
						{
							strposcharset(str, 11 - 1, '0', str); // T
						}
						else if (iwhat == 1)
						{
							strposcharset(str, 11 - 1, '1', str); // T
						}
						else
						{
							strposcharset(str, 11 - 1, '2', str); // T
						}
					}
					if (i < iiBR)
					{
						if (iwhat == 0)
						{
							strposcharset(str, 13 - 1, '0', str); // B
						}
						else if(iwhat == 1)
						{
							strposcharset(str, 13 - 1, '1', str); // B
						}
						else
						{
							strposcharset(str, 13 - 1, '2', str); // B
						}
					}
				}
				ts_table(iTable, "set_value_of", j - 1, str);
			}
		}
		ires = ac_request("set_object_property_value", "TS_Cells_poscode", iTable);
//			ires = ac_request("set_object_property_value", "TS_DoRecalcAll", 1);
//		ac_request_special("RunGDLParScript");
	}
	object("delete", iTable);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}
int do_iButtonCellsDisconnect()
{
	cout << "disc";
	if (load_tableobject() != 0)
	{
		return -1;
	}

	int ires;

	int iTable;
	object("create", "ts_table", iTable);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, iiLT, jjLT, iiBR, jjBR;
	int i, j;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите ячейку", ssX, ssY);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;

	int indexLT = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	cout << "indexLT=" << indexLT << "\n";
	if (indexLT >= 0)
	{
		ts_table(iTableXY, "select_row", indexLT);
		ts_table(iTableXY, "get_value_of", 4, iiLT);
		ts_table(iTableXY, "get_value_of", 5, jjLT);
		int width;
		int height;
		ts_table(iTableXY, "get_value_of", 13, width);
		ts_table(iTableXY, "get_value_of", 12, height);
		cout << "width=" << width << " height=" << height<<"\n";
		jjBR = jjLT + width - 1;
		iiBR = iiLT + height - 1;
		ac_request("get_object_property_value", "TS_Cells_poscode", iTable);
		string str;
		for (i = iiLT; i <= iiBR; i++)
		{
			//ts_table(iTableXY, "select_row", i);
			for (j = jjLT; j <= jjBR; j++)
			{
				ts_table(iTable, "select_row", i - 1);
				ts_table(iTable, "get_value_of", j - 1, str);
				strposcharset(str, 0, 'L', str);
				strposcharset(str, 1, 'T', str);
				strposcharset(str, 2, 'R', str);
				strposcharset(str, 3, 'B', str);
				ts_table(iTable, "set_value_of", j - 1, str);
			}
		}
		ires = ac_request("set_object_property_value", "TS_Cells_poscode", iTable);
		ires = ac_request("set_object_property_value", "TS_DoRecalcAll", 1);
	}
	object("delete", iTable);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}
int do_iButtonSelectCells(bool bDoUnselectFirst)
{
	cout << "conn";

	if (load_tableobject() != 0)
	{
		return -1;
	}

	int ires;

	int iTable;
	object("create", "ts_table", iTable);
	int iTableXY;
	object("create", "ts_table", iTableXY);
	ac_request("get_object_property_value", "TS_RealCells", iTableXY);
	ac_request("get_object_property_value", "TS_RealCellsCount");
	int dccount = ac_getnumvalue();
	double sx, sy, ex, ey, iiLT, jjLT, iiBR, jjBR;
	int i, j;
	double ssX, ssY;
	ires = ac_request("interface_input2dpoint", "Укажите точку левой верхней ячейки", ssX, ssY);
	double ssX2, ssY2;
	ires = ac_request("interface_input2dpoint", "Укажите точку правой нижней ячейки", ssX2, ssY2);
	if (ires != 0)
	{
		return -1;
	}
	double posX, posY;
	ac_request("get_object_property_value", "pos.X");
	posX = ac_getnumvalue();
	ac_request("get_object_property_value", "pos.Y");
	posY = ac_getnumvalue();
	ssX = ssX - posX;
	ssY = ssY - posY;
	ssX2 = ssX2 - posX;
	ssY2 = ssY2 - posY;
	cout << ssX << " " << ssY << "\n";
	double checkcoordX = ssX;
	double checkcoordY = ssY;
	double checkcoordX2 = ssX2;
	double checkcoordY2 = ssY2;

	int indexLT = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX, checkcoordY, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	int indexBR = ts_table(iTableXY, "search_bounds", 0, 1, 2, 3, checkcoordX2, checkcoordY2, 0, dccount); // возвращает -1 если не нашлось или индекс/ endrow -1 - значит до конца
	if ((indexLT >= 0) && (indexBR >= 0))
	{
		cout << "indexLT=" << indexLT << "\n";
		cout << "indexBR=" << indexBR << "\n";
		ts_table(iTableXY, "select_row", indexLT);
		ts_table(iTableXY, "get_value_of", 4, iiLT);
		ts_table(iTableXY, "get_value_of", 5, jjLT);
		ts_table(iTableXY, "select_row", indexBR);
		ts_table(iTableXY, "get_value_of", 4, iiBR);
		ts_table(iTableXY, "get_value_of", 5, jjBR);
		int width = jjBR - jjLT + 1;
		int height = iiBR - iiLT + 1;
		string str;
		char L, T, R, B;
		bool bAllreadyConnected = false;
		for (i = iiLT; i <= iiBR; i++)
		{
			//ts_table(iTableXY, "select_row", i);
			for (j = jjLT; j <= jjBR; j++)
			{
			}
		}
		int ii, jj;
		for (i = 0; i < dccount; i++)
		{
			ts_table(iTableXY, "select_row", i);
			ts_table(iTableXY, "get_value_of", 5-1, ii);
			ts_table(iTableXY, "get_value_of", 6-1, jj);

			if (bDoUnselectFirst)
			{
				ts_table(iTableXY, "set_value_of", 17 - 1, false);
			}
			if ((ii >= iiLT) && (ii <= iiBR))
			{
				if ((jj >= jjLT) && (jj <= jjBR))
				{
					ts_table(iTableXY, "set_value_of", 17 - 1, true);
				}
			}
		}
		
		ires = ac_request("set_object_property_value", "TS_RealCells", iTableXY);
	}
	object("delete", iTable);
	object("delete", iTableXY);
	cout << "Завершение работы\n";
	return 0;
}
int do_iButtonSelectionCellsOnOff()
{
	if (load_tableobject() != 0)
	{
		return -1;
	}
	cout << "unselect\n";
	ac_request("get_object_property_value", "TS_ShowSelection");
	int onoff = ac_getnumvalue();
	if (onoff == 0)
	{
		ac_request("set_object_property_value", "TS_ShowSelection", 1);
	}
	else
	{
		ac_request("set_object_property_value", "TS_ShowSelection", 0);
	}
	cout << "Завершение работы\n";
	return 0;
}

int SelectAndZoom(string sGuidsByRows)
{
	coutvar << sGuidsByRows;

	if (sGuidsByRows == "") {
		return -1;
	}
	ac_request("clear_list", 2);

	string sLeft;
	string sRight = sGuidsByRows;
	int iGuid, i;
	string sguid;
	object("create", "ac_element_guid", iGuid);
	for (i=0;i<500;i++)
	{
		if (strcontains(sRight,"\n")) {
			sLeft = strleft(sRight, "\n");
			sRight = strright(sRight, "\n");
		}
		else {
			sLeft = sRight;
			sRight = "";
		}
		if (sLeft != "")
		{
			sguid = sLeft;
			coutvar << sguid;
			ts_guid(iGuid, "ConvertFromString", sguid);
			ac_request("set_current_element_from_descr", iGuid);
			ac_request("store_current_element_to_list", 2, -1);
		}
		if (sRight == "") {
			break;
		}
	}
	ac_request("select_elements_from_list", 2, 1);
	ac_request("Automate", "ZoomToElements", 2);
	object("delete", iGuid);
	return 0;
}

// smode = "Table Help", "Run Table Program", "Table Configure"
int do_iButtonReRun(string sRunMode)
{
	cout << sRunMode;
	int ires;

	//ires = ac_request("load_elements_list_from_selection", 4, "ObjectType", "MainFilter", 2);
	load_tableobject();
	ires = ac_request("get_loaded_elements_list_count", 4);
	int icount = ac_getnumvalue();
	cout << "\nвсего выбрано элементов таблиц=" << icount << "\n";
	if (icount == 0)
	{
		cout << "не выбраны элементы\n";
		return -1;
	}

	ires = ac_request("set_current_element_from_list", 4, 0);
	string sProgram;
	ac_request("get_object_property_value", "TS_Program");
	sProgram = ac_getstrvalue();
	if (sProgram == "") {
		cout << "\nNo Program Present\n";
	}

	ac_request("get_object_property_value", "TS_DoRequestBeforReRun");
	bool TS_DoRequestBeforReRun = ac_getnumvalue();
	
	if ((sRunMode == "Run Table Program")&&(TS_DoRequestBeforReRun==true))
	{
		ires = tsalert(-2, "Уточнение", "Вы уверены, что хотите обновить данные в выбранной таблице?", "", "Да", "Нет");
		if (ires == 2) {
			return;
		}
	}

	string sTableHelpText = "";
	var_extern_set("TableHelpText", sTableHelpText);
	cout << "\nProgram start\n----------------------------------\n";
	if (str_regex_search(sProgram, ".*cpp$"))
	{
		string path_tsprg;
		shell_func("get_path", "tsprg", path_tsprg);
		ires = run_cpp("run_from_file", path_tsprg+"\\"+sProgram, 10 * 1, 1.1, sRunMode);
	}
	else
	{
		ires = run_cpp("run_from_variable", sProgram, 10 * 1, 1.1, sRunMode);
	}
	cout << "\n----------------------------------\nProgram end with code = "<<ires;

	if (sRunMode == "Table Help")
	{
		var_extern_get("TableHelpText", sTableHelpText);
		if (sTableHelpText != "")
		{
			HelpWindow("Помощь по работе с таблицей",sTableHelpText);
		}
	}
	return 0;
}

int HelpWindow(string sHeader, string sHelpText)
{
	int iDialogEdit;
	int iMultilineEdit;

	// диалог
	object("create", "ts_dialog", iDialogEdit);
	ts_dialog(iDialogEdit, "init_dialog", "palette", 0, 0, 400 + 250, 175 - 30);
	ts_dialog(iDialogEdit, "SetTitle", sHeader);

	int x, y, h, w, offs;
	object("create", "ts_dialogcontrol", iMultilineEdit, "iMuitilineEdit");
	h = 100;
	x = 1; y = 2; w = 400 + 250; h = 140;
	ts_dialogcontrol(iMultilineEdit, "init_control", "multilineedit", iDialogEdit, x, y, w, h, 3072);
	ts_dialogcontrol(iMultilineEdit, "SetAnchorToPanelResize", 0, 0, 1, 1);
	ts_dialogcontrol(iMultilineEdit, "SetText", sHelpText);

	bool bres;
	ts_dialog(iDialogEdit, "SetGrowType", 3);
	ts_dialog(iDialogEdit, "invoke", bres);
}
