OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 16:21

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: StdTables.Table
СообщениеДобавлено: Вторник, 10 Июль, 2007 11:55 

Зарегистрирован: Вторник, 10 Январь, 2006 23:40
Сообщения: 5
Откуда: USSR
Как программно изменить ширину столбцов у экземпляра StdTables.Table?
И заодно, как изменить выравнивание текста в ячейке?
Заранее спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 12 Июль, 2007 21:25 

Зарегистрирован: Вторник, 10 Январь, 2006 23:40
Сообщения: 5
Откуда: USSR
Судя по всему заданный вопрос либо слишком сложный (никто не знает ответа), либо слишком простой (стыдно отвечать).
Ковырял исходники. Ширину столбцов по умолчанию менять можно правкой исходника (константа defColW), но для всех стобцов сразу. Пробовал добавить одельный расшаренный массив в модуль StdTables и в процедуре SetupControl ширину стобцов брать из этого массива, а массив заполняю в своем модуле. Однако это работает только при создании контрола таблицы (при его размещении на форме), т.е. это не выход и выглядит как-то ... не эстетично что ли. Отсюда еще вопрос.
Как связаны между собой Table Control и StdTables.Table? Или хотябы где копать - где RTFM?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 12 Июль, 2007 22:04 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Значит, так...
Поглядев внимательно, видим, что StdTables не поддерживают программное изменение размера столбцов. Поэтому что можно сказать точно - нужно переделывать под себя. Только не правьте стандартный модуль, нехорошо это, только путаницу разведёте у себя. Сделайте копию в своей подсистеме какой-нибудь, и там уже правьте.

Как править?
StdTables.Table - это, как Вы понимаете, не контрол (не графический объект), а интерактор - модель, данные, которые контрол (и сколько угодно контролов сразу) отображают. Поэтому вешать на неё задачи по хранению размера столбцов некрасиво. Таблица как объект данных просто не имеет таких атрибутов как "ширина столбца", т.к. даже не знает, что кто-то её будет когда-то отображать.

Размеры столбцов хранит отображение-контрол. В данном случае - это скрытый тип StdTables.Control - видите, у него есть два массива - width и mode, как раз то, что Вам нужно. Если нужно сделать быстро и для себя - в своём варианте элементарно экспортируйте тип Control и добавьте к нему какой-нибудь метод SetColumnParam...
Вам надо будет только добраться как-то до конкретного контрола (например, через фокусированное окно или как-то ещё, это можно обсудить отдельно, смотря что Вы хотите).

Если делать красиво и грамотно, то надо вводить эти параметры не через метод и не экспортируя Control, а добавляя поддержку соответствующих свойств (Properties) и их обработку, как это сделано со свойствами layoutEditable, dataEditable, selectionStyle в StdTables.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: StdTables.Table
СообщениеДобавлено: Вторник, 24 Июль, 2007 22:20 

Зарегистрирован: Вторник, 10 Январь, 2006 23:40
Сообщения: 5
Откуда: USSR
Добрый день Всем!
Вот мое решение.
Знаю что так делать ненадо, однако быстро и главное работает, может кому пригодится.

Правил модуль 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?

С уважением, Игорь.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB