OberonCore
https://forum.oberoncore.ru/

Table Control
https://forum.oberoncore.ru/viewtopic.php?f=24&t=133
Страница 1 из 1

Автор:  Прохожий [ Воскресенье, 19 Март, 2006 17:43 ]
Заголовок сообщения:  Table Control

Здравствуйте, уважаемые. С переменной какого типа соединяется Table Control? Смотрел в документации, но там эта штука не рассматривается.

Автор:  Илья Ермаков [ Вторник, 21 Март, 2006 12:42 ]
Заголовок сообщения: 

Здравствуйте!

Если Вы имеете в виду Table Control подсистемы Sql, то они соединяются с переменной типа SqlDB.Table. Подводный камень - SqlDB.Table - это POINTER, поэтому Ваш интерактор нужно проинициализировать ДО открытия окошка с привязанной к нему таблицей. Потом Вы меняете не сам POINTER, а содержимое этой таблицы через ее Exec.
Лучше всего создайте все таблицы-интеракторы сразу после подключения к базе.

Автор:  Прохожий [ Суббота, 01 Апрель, 2006 17:19 ]
Заголовок сообщения: 

А я, наивный, хотел ее употреблять для вывода массивов и прочих пустяков. Видимо для этого придется использовать обычные документы.

Автор:  Ира [ Вторник, 18 Апрель, 2006 15:56 ]
Заголовок сообщения: 

Необходимо вывести неизвестное количество таблиц (StdTables.Table), каждая в отдельное окно. Пользуюсь способом описанным в примере к подсистеме CtlsxTestTables.CrateMultiTable следующим образом:

PROCEDURE NextTable (OUT link: ARRAY OF CHAR; VAR n: INTEGER);
VAR tab: POINTER TO ARRAY OF CT.Table;
i: INTEGER;
str: Dialog.String;
BEGIN
IF tables = NIL THEN NEW(tab, 1); n:=0;
ELSE n:=LEN(tables); NEW(tab, n+1);
FOR i:=0 TO n-1 DO tab[i]:=tables[i] END
END;
tables:=tab;
Strings.IntToString(n, str);
link:='ArmshnData.tables[' + str + ']'
END NextTable;

PROCEDURE (this: PacketList) CreateTable(), NEW;
VAR link: Dialog.String;
el: Data;
i: INTEGER;
p: Controls.Prop;
v: Views.View;
BEGIN
NextTable(link, this.index);
tables[this.index].SetSize(this.rows, this.packet.data_count);
el:=this.packet.data; i:=0;
WHILE (i < this.packet.data_count) & (el # NIL) DO
tables[this.index].SetLabel(i, el.name);
INC(i);
el:=el.next
END;
NEW(p); p.link:=link$; p.label:=''; p.guard:=''; p.notifier:='';
p.level:=0; p.opt[Controls.sorted]:=FALSE;
Views.Deposit(CT.dir.NewControl(p));
Views.Fetch(v);
StdDialog.Open(v, this.id, NIL, '', NIL, FALSE, TRUE, FALSE, FALSE, FALSE);
END CreateTable;

(*äåéñòâèÿ ïðè íàæàòèè êíîïêè Open äèàëîãîâîãî îêíà main*)
PROCEDURE OpenTable*();
VAR str: Dialog.String;
el: PacketList;
BEGIN
dialog.list.GetItem(dialog.list.index, str); (*âûäåëåííàÿ ñòðîêà â ñïèñêå òèïîâ ïàêåòîâ*)
el:=packet;
WHILE el # NIL DO
IF el.id$ = str$ THEN el.CreateTable(); RETURN END;
el:=el.next
END
END OpenTable;

При нажатии кнопки для создания вызывается процедура OpenTable, которая должна открыть таблицу в новом окне, соответствующую выделенной строке в списке dialog.list. Данные в таблице периодически должны обновляться при обновлении информации об отображаемой ими модели. Но обновляется всегда только последняя открытая таблица, хотя (как было проверено) сообщение Dialog.Update(table[this.index]) передаю всем открытым в данный момент таблицам.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/