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/ |