Тема: Как можно создать диалог с таблицей

Народ подскажите как можно сделать диалог и чтобы в нем была какая нить таблица ну чтото вроде:
===========================
= Заголовок1 = Заголовок2 =
===========================
= значение 1 = значение 2 =
= значение 1 = значение 2 =
= значение 1 = значение 2 =
= значение 1 = значение 2 =
===========================
и если возможно чтобы можно было менять порядок столбцов перетаскиванием мыши

Re: Как можно создать диалог с таблицей

В DCL это невозможно. Если еще можно создать псевдоколонки включением спецсимволов, то настоящую таблицу - нельзя. Все равно будут просто строки, с которыми еще сложнее разбираться.
Подобные диалоги делают в COM-серверах или на VBA.

Re: Как можно создать диалог с таблицей

Кое что, все-таки, можно:

test: dialog{label="TABLE";
spacer;
:row{
  :list_box{horizontal_margin=none; height=4; edit_width=9; list=" \n  Column 0"; is_enabled=false;}
  :list_box{horizontal_margin=none; height=4;  edit_width=9; list=" \n  Column 1"; is_enabled=false;}
  :list_box{horizontal_margin=none; height=4;  edit_width=9; list=" \n  Column 2"; is_enabled=false;}
}
:column{
  :row{
    :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=9; key="a0";}
    :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=9; key="a1";}
    :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=9; key="a2";}
  }
  :row{
    :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=9; key="b0";}
    :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=9; key="b1";}
    :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=9; key="b2";}
  }
  :row{
    :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=9; key="c0";}
    :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=9; key="c1";}
    :edit_box{vertical_margin=none; horizontal_margin=none; edit_width=9; key="c2";}
  }
}
spacer;
ok_button;
}

Поля LIST_BOX, используемые в качестве строки заголовка, вовсе не обязательно делать недоступными (is_enabled=false), т.к. прямое редактирование текста в них все-равно невозможно.
Написать комплект функций управления подобной таблицей - дело техники.

Re: Как можно создать диалог с таблицей

> Пастух
Это просто грубая визуальная имитация, издали отделенно напоминающая настоящий ListBox. Да еще с фиксированным количеством отдельных элементов.
Можно сделать лучше - см.
showurls в aceturl.dcl из Express. Там для формирования "колонок" используются tabs

showurls : dialog {
  label = "SHOWURLS - Show objects with attached URLs";
  fixed_width=true;
  width=82;
  : list_box {
    key = "lst_hdr";
    tabs="58 72";
    height = 2;
    fixed_height = true;
    tab_truncate = true;
  }
  : list_box {
    multiple_select=true;
    key="url_list";
    tabs="58 72";
    tab_truncate = true;
    is_default=true;
  }
  : row {
    : spacer {}
    : button {
      fixed_width=true;
      width=11;
      key="accept";
      label= "Show URL";
      mnemonic = "S";
    }
    : button {
      fixed_width=true;
      width=11;
      key="edit";
      label= "Edit";
      mnemonic = "E";
      is_default = true;
    }
    : button {
      fixed_width=true;
      width=11;
      key="replace";
      label= "Replace";
      mnemonic = "R";
    }
    : button {
      fixed_width=true;
      width=11;
      is_cancel=true;
      key="cancel";
      label= "Close";
      mnemonic = "C";
    }
    : button {
      fixed_width=true;
      width=11;
      key="help";
      label= "&Help";
      is_help=true;
    }
    : spacer {}
  } // row
  : text_part {
    key="error";
    label="";
  }
}

Но это, пожалуй, максимум, что можно выжать. И далеко от желаемого.
Надо же нечто наподобие
http://cad.kurganobl.ru/assets/images/r … ip0023.gif
Чтоб и заголовок и колонки были "живыми" (сортировка, перетаскивание, изменение ширины)

Re: Как можно создать диалог с таблицей

Зуеву Сергею Александровичу.
1.
В приведенной мною заготовке таблицы физически присутствует самое главное - ячейки. Каждая ячейка - это маленький объект, к которому пользователь может обратиться непосредственно: ввести значение или отредактировать существующее.  Каждой такой ячейкой легко управлять программно, т.к у неё есть отдельный адрес (ключ). Можно, например, сделать её недоступной для редактирования. Можно программно организовать логические связи между ячейками (формулы) или обеспечить это право пользователю.
В приведенном Вами примере из EXPRESSTOOLS невозможно самое главное - непосредственное редактирование содержимого ячеек. Или попробуйте сделать недоступной, скажем, ячейку на пересечении N-го столбца и M-й строки, да так, чтобы пользователь это сразу видел.
Поскольку пользователь может выделить только строку целиком, то появляется необходимость в наличии, как минимум, двух кнопок рядом с таблицей: кнопки, обеспечивающей навигацию в пределах строки и кнопки, вызывающей маленькое окно для редактирования значений якобы ячеек (что мы и наблюдаем в Вашем примере). По той же причине, программное управление содержимым осложнено дополнительным анализом строк на предмет поиска знаков табуляции \t - суть разделителей полей.
2.
В моей таблице в качестве заголовков столбцов использованы поля LIST_BOX. У каждого столбца - свой. У этих полей имеется возможность обработки двойного щелчка мышкой. При желании, можно в качестве реакции на это событие выполнить сортировку столбца. Или же по двойному щелчку временно заполнить поле списком всех имеющихся столбцов и выбрав один из них получить новый заголовок столбца (поменять местами два столбца) Т.е сортировка и перемещение столбцов потенциально доступны и не требуют дополнительных элементов управления.
В приведенном Вами примере из EXPRESSTOOLS сортировка и перемещение возможны, опять таки, лишь с помощью дополнительного ряда управляющих кнопок.
3.
Если количество записей в моей таблице больше чем число строк на экране, то на помощь легко и органично придет обычный SLIDER. Так что и тут всё решаемо.
И потому:
Грубая визуальная имитация - это приведенный Вами, Сергей Александрович, пример из EXPRESSTOOLS, а моя таблица, пусть и совсем незатейливая, но все-таки настоящая.
P.S.
A вообще-то я, всего лишь, хотел показать, как можно использовать атрибуты horizontal_margin и vertical_margin (о которых далеко не все знают) для того, чтобы поля расположенные в ряд (столбец) выглядели слитно.

Re: Как можно создать диалог с таблицей

> Ivspec
Поиск рулит!
Было как-то давно обсуждение, писал там
http://dwg.ru/forum/viewtopic.php?t=3897

Re: Как можно создать диалог с таблицей

> Пастух
Autodesk не рекомендует использовать атрибут horizontal_margin и другие, имеющиеся в файле base.dcl и отсутствующие в документации. Возможно, это связано с какими-то внутренними ограничениями.

Re: Как можно создать диалог с таблицей

ObjectDCL!!!