Функции CreateWindow() и InsertRow()

Страницы: 1
RSS
Функции CreateWindow() и InsertRow()
 
Вопрос - в первую очередь - к разработчикам.

Уже давно наблюдаю странную вещь.
Допустим, в скрипте создана таблица рабочего места QUIK:
t_id = AllocTable(),
далее в таблицу добавлены столбцы серией вызовов AddColumn().
Если я после этого добавлю в таблицу несколько строк по InsertRow(), после чего произведу вызов:
CreateWindow(t_id), то никаких добавленных в таблицу строк у меня отображаться не будет.
И для того, чтобы строки отображались, необходимо, чтобы вызов CreateWindow() производился ДО процедуры добавления строк в таблицу.

Странно: для того, чтобы добавить в таблицу столбцы, вызов CreateWindow() - необязателен. Т.е. вроде как мы имеем дело с образом таблицы в памяти. Но для того, чтобы добавить строки, необходимо наличие именно ОТКРЫТОГО ОКНА таблицы - по команде CreateWindow(), и лишь потом можно добавлять строки, иначе результат - нулевой.

Почему нельзя добавлять строки в таблицу до открытия окна таблицы - аналогично добавлению столбцов?
 
Здравствуйте,
Такова текущая реализация.
Уточните зачем Вам это? Какая задача решается?
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Такова текущая реализация.
Уточните зачем Вам это? Какая задача решается?
Это относится к задаче оптимизации работы скриптов.
Стандартная практика в программировании - это формирование образа данных в памяти и лишь затем отображение содержимого. Если у меня имеется функция по добавлению строк, которая может быть вызвана из разных мест скрипта, то при текущем положении дел мне требуется каждый раз осуществлять либо контролирующий вызов IsWindowClosed(), либо иным образом отслеживать наличие открытого окна таблицы. К чему это приводит:
1) дополнительные ненужные затраты времени - что, возможно, не так заметно при нативном коде, но существенно увеличивает затраты в случае, когда используется скриптовый код, виртуальная машина и имеется необходимость обеспечивать максимальное быстродействие кода в режиме реального времени, а также с учетом возможных многократных - за короткий промежуток времени - операций добавления/удаления строк в таблице.
2) нарушение стандартной логики ООП, когда механизм отображения/обновления данных не связан с процессом удаления/добавления данных в объект.
 
Цитата
Andrei2016 написал:
Стандартная практика в программировании - это формирование образа данных в памяти и лишь затем отображение содержимого.
Но строки вполне честно могут быть добавлены и после появления таблицы. Собственно оно так и работает (и не только в Lua таблицах)

1) есть сравнительный анализ?
2) не вижу нарушений логики.
 
Цитата
Sergey Gorokhov написал:
Цитата
Andrei2016   написал:
Стандартная практика в программировании - это формирование образа данных в памяти и лишь затем отображение содержимого.
Но строки вполне честно могут быть добавлены и после появления таблицы. Собственно оно так и работает (и не только в Lua таблицах)

1) есть сравнительный анализ?
2) не вижу нарушений логики.

Сергей, вы не совсем правильно меня поняли.
Вопрос не в том, что нельзя добавить строки после появления таблицы, а в том, что несмотря на СОЗДАННУЮ  и, соответственно уже существующую в памяти таблицу, добавлять в нее строки  можно только при открытом окне. Т.е., даже в целиком созданную и зарегистрированную таблицу нельзя добавить строки, если эта таблица не отображена на экране. А этого быть не должно, поскольку вопрос отображения - это вопрос перерисовки инвалидированной области, и никак не связан с логикой добавления/удаления строк. Вот, про это я и писал.

Поскольку в терминале сейчас используется иная логика, то прошу зарегистрировать пожелание по снятию зависимости добавления (а также удаления) строк таблицы от факта присутствия открытого окна таблицы на экране.

Кстати, в ваших комментариях к функции IsWindowClosed() указана любопытная вещь, что если окно таблицы было закрыто - т.е. исчезло из области видимости на экране, то его вновь можно вернуть в открытый вид функцией CreatreWindow(). Это означает, что до вызова DestroyTable() таблица - как логический объект - в области данных терминала существует. В этой ситуации вообще становится странным, почему фактор наличия открытого окна каким-то образом влияет на добавление новых строк в область данных терминала (они же уже есть и прекрасно себя чувствуют!).
 
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
Я согласен с Сергеем и хочу добавить, что, господа, если вы считаете, что это так и должно быть, то будьте добры, задокументируйте данное поведение. На текущий момент документация, мягко говоря, сильно оставляет желать лучшего.
 
Цитата
Илья написал:
Я согласен с Сергеем и хочу добавить, что, господа, если вы считаете, что это так и должно быть, то будьте добры,  задокументируйте  данное поведение. На текущий момент документация, мягко говоря, сильно оставляет желать лучшего.
Пардон, не с Сергеем, а с Андреем. С Сергеем не согласен :D
 
Цитата
Илья написал:
На текущий момент документация, мягко говоря, сильно оставляет желать лучшего.
На это разработчикам не раз указывали, а воз и ныне там.
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
Такова текущая реализация.
Цитата
Илья написал:
Я согласен с Сергеем и хочу добавить, что, господа, если вы считаете, что это так и должно быть, то будьте добры,  задокументируйте  данное поведение. На текущий момент документация, мягко говоря, сильно оставляет желать лучшего.
Сидел как идиот пол часа искал ошибку в своём коде... уже начал думать, что с ума сошёл, пока не полез в Яндекс и не нашёл эту ветку... даже не хочется писать на тему «зачем» так сделано, но вот то, что за прошедший год не исправили документацию в этой части, это весьма прискорбно... (
 
Согласен с автором темы. Был удивлён подобному поведению библиотеки. Такие контр-интуитивные вещи нужно по крайней мере документировать.
Страницы: 1
Читают тему
Наверх