OberonCore https://forum.oberoncore.ru/ |
|
StdTables.Table https://forum.oberoncore.ru/viewtopic.php?f=24&t=557 |
Страница 1 из 1 |
Автор: | rogiram [ Вторник, 10 Июль, 2007 11:55 ] |
Заголовок сообщения: | StdTables.Table |
Как программно изменить ширину столбцов у экземпляра StdTables.Table? И заодно, как изменить выравнивание текста в ячейке? Заранее спасибо! |
Автор: | rogiram [ Четверг, 12 Июль, 2007 21:25 ] |
Заголовок сообщения: | |
Судя по всему заданный вопрос либо слишком сложный (никто не знает ответа), либо слишком простой (стыдно отвечать). Ковырял исходники. Ширину столбцов по умолчанию менять можно правкой исходника (константа defColW), но для всех стобцов сразу. Пробовал добавить одельный расшаренный массив в модуль StdTables и в процедуре SetupControl ширину стобцов брать из этого массива, а массив заполняю в своем модуле. Однако это работает только при создании контрола таблицы (при его размещении на форме), т.е. это не выход и выглядит как-то ... не эстетично что ли. Отсюда еще вопрос. Как связаны между собой Table Control и StdTables.Table? Или хотябы где копать - где RTFM? |
Автор: | Илья Ермаков [ Четверг, 12 Июль, 2007 22:04 ] |
Заголовок сообщения: | |
Значит, так... Поглядев внимательно, видим, что StdTables не поддерживают программное изменение размера столбцов. Поэтому что можно сказать точно - нужно переделывать под себя. Только не правьте стандартный модуль, нехорошо это, только путаницу разведёте у себя. Сделайте копию в своей подсистеме какой-нибудь, и там уже правьте. Как править? StdTables.Table - это, как Вы понимаете, не контрол (не графический объект), а интерактор - модель, данные, которые контрол (и сколько угодно контролов сразу) отображают. Поэтому вешать на неё задачи по хранению размера столбцов некрасиво. Таблица как объект данных просто не имеет таких атрибутов как "ширина столбца", т.к. даже не знает, что кто-то её будет когда-то отображать. Размеры столбцов хранит отображение-контрол. В данном случае - это скрытый тип StdTables.Control - видите, у него есть два массива - width и mode, как раз то, что Вам нужно. Если нужно сделать быстро и для себя - в своём варианте элементарно экспортируйте тип Control и добавьте к нему какой-нибудь метод SetColumnParam... Вам надо будет только добраться как-то до конкретного контрола (например, через фокусированное окно или как-то ещё, это можно обсудить отдельно, смотря что Вы хотите). Если делать красиво и грамотно, то надо вводить эти параметры не через метод и не экспортируя Control, а добавляя поддержку соответствующих свойств (Properties) и их обработку, как это сделано со свойствами layoutEditable, dataEditable, selectionStyle в StdTables. |
Автор: | rogiram [ Вторник, 24 Июль, 2007 22:20 ] |
Заголовок сообщения: | Re: StdTables.Table |
Добрый день Всем! Вот мое решение. Знаю что так делать ненадо, однако быстро и главное работает, может кому пригодится. Правил модуль StdTables. 1. К записи Table добавил поля ColWidth, ColWidthNb: INTEGER; 2. Добавил метод Код: PROCEDURE (VAR tab: Table) SetColWidth* (ColNb, ColWidth: INTEGER), NEW; BEGIN tab.ColWidthNb:=ColNb; tab.ColWidth:=ColWidth END SetColWidth; 3. изменил метод Control.Update Код: PROCEDURE (c: Control) Update (f: Views.Frame; op, from, to: INTEGER); VAR t: TableValue; b: BOOLEAN; BEGIN IF c.item.Valid() THEN c.item.GetVal(t, b); IF (t.t.ColWidth>0)&(t.t.ColWidthNb<t.t.cols) THEN c.width[t.t.ColWidthNb]:=t.t.ColWidth * Ports.mm; END END; Views.Update(c, Views.keepFrames) END Update; Аналогично с Control.mode Обращаясь к Илье Ермакову. Согласен с Вами - стандартный модуль править не хорошо. Только что-то у меня не получилось сделать отдельную подсистему, поэтому "срезал угол". Может потом научусь. Согласен также что StdTables.Table - не конрол, но тогда зачем в описании Table свойства weights, styles, colors? С уважением, Игорь. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |