On-line: tnsr2, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
gfilatov
модератор




Пост N: 699
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)


Начало темы находится здесь, а теперь

АНОНС * АНОНС * АНОНС * АНОНС * АНОНС

Готовится к опубликованию новая сборка №48, которая выйдет в конце недели.
Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне

Кратко, что нового:

- исправление обнаруженных ошибок и неточностей кода;
- новый класс HEADERIMAGE для Grid и Browse;
- свойство Address в Hyperlink может теперь открывать папку или файл на диске;
- добавлен NOTABSTOP класс для Browse;
- поддержка пользовательских компонентов (заимствована из оффициального релиза);
- расширения и исправления в библиотеках TsBrowse и PropGrid;
- обновлены сборки Харбор и HMGS-IDE;
- новые и обновленные старые примеры (как обычно ).




Спасибо: 5 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


SergKis
постоянный участник




Пост N: 3405
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.10.20 12:29. Заголовок: Игорь Мне думается, ..


Игорь
Мне думается, что дело не в скорости прорисовки строк тсб, а в скорости выполнения перемещений по базе и заполнения
буферов записи rdd, т.е. много dbSkip() подводов вперед-назад. Если прочитать записи отображения 1 раз в буфер-массив и
потом отображаить\рисовать их, то скорость работы тсб увеличится, даже при 4х кратной прорисовке окна тсб

Спасибо: 0 
Профиль
kkg



Пост N: 22
Зарегистрирован: 29.11.19
ссылка на сообщение  Отправлено: 02.10.20 12:31. Заголовок: коллеги, лишние прор..


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

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 3406
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.10.20 12:39. Заголовок: kkg Вы почти правы,..


kkg
Вы почти правы, если отбросить 20 элементов обработки цветов в колонках.
Если повторите мои исправления в тсб и пример, то увидите, что придраться к отработке событий прорисовки в логе
почти не к чему. Основной тормоз это перемещения по файлу, осуществляемое при каждой прорисовке, сначала от
текущей записи к первой потом от нее к последней, потом опять на текущую, с учетом событий got\lost focus как записи
так и колонки

Спасибо: 0 
Профиль
kkg



Пост N: 23
Зарегистрирован: 29.11.19
ссылка на сообщение  Отправлено: 02.10.20 12:55. Заголовок: SergKis я бы согла..


SergKis
я бы согласился, но тормоза присутствуют и на массивах (кстати файлы тоже кешированны)

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 3407
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.10.20 13:07. Заголовок: kkg пишет я бы согла..


kkg пишет
 цитата:
я бы согласился, но тормоза присутствуют и на массивах (кстати файлы тоже кешированны)


Работа блоков кода на колонках по преобразованию данных (цветов ...) не убирается, создайте массив строковый сразу - будет чуть лучше. А создайте массив сразу с объектами oTScell будет совсем хорошо.

Спасибо: 0 
Профиль
kkg



Пост N: 24
Зарегистрирован: 29.11.19
ссылка на сообщение  Отправлено: 02.10.20 13:36. Заголовок: SergKis Вы не понял..


SergKis
Вы не поняли, я и предложил не создавать каждый раз, а использовать цвет пикселей экрана (прямоугольник) который уже просчитан и на экране,
просто эту область переместить на нужные координаты и дорисовать строку или колонку которой не хватает

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 3408
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.10.20 13:51. Заголовок: kkg пишет просто эту..


kkg пишет
 цитата:
просто эту область переместить на нужные координаты и дорисовать строку или колонку которой не хватает


Я все понял. Сейчас тсб переотображая страницу покажет и изменившиеся значения в др. колонках при общем доступе с учетом цветов bmp и т.д. Ваш этого не учтет. В некоторых вариантах это необходимо, конечно. Но ...
Вы предлагайте конкретно по тексту, берем тут, правим так или так.
Игорь, как раз и смотрит, где можно что отсечь, к примеру с помощью доп. переменной.
Меня лично скорость тсб устраивает, т.к. нет у меня MoreFields, практически все колонки помещаю на один экран (методика в примере Tsb_MoreFields\demo.prg) + выборки из базы (letodb) короткие только нужные колонки (для связи на letodb и доп. тек. индексов) и т.д.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1796
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.10.20 16:50. Заголовок: Всем кому это интересно


SergKis пишет:

 цитата:
Игорь, как раз и смотрит, где можно что отсечь, к примеру с помощью доп. переменной.


Для этих целей добавил в класс TSBrowse переменную lFastDraw

 цитата:
DATA lFastDraw AS LOGICAL INIT .F.


Пример использования в методе GoRight():
 
If ! ::lFastDraw
lRefresh := ( ::lCanAppend .or. ::lIsArr )
EndIf


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1621
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.10.20 20:28. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Пример использования в методе GoRight():

Григорий, тут эта строка лишняя на все 100. В goleft(), к примеру, нет подобного.
К сожалению сегодня не удалось дальше поразбираться, но продолжу. О результатах буду писать здесь.
Переменная нужна, она позволит оценить разницу в прорисовке не затрагивая стабильность работы.

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1622
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.10.20 20:35. Заголовок: SergKis пишет: Мне ..


SergKis пишет:

 цитата:
Мне думается, что дело не в скорости прорисовки строк тсб, а в скорости выполнения перемещений по базе и заполнения

безусловно, но тормоза в прорисовке тоже большие. У меня в тестовом проекте значения для показа в ячейке берутся из справочника по ID, после первого показа уже из hash. Скорость возрастает в разы! Словно режим турбо включили, но когда на экране более 5 связных бровсов , тот тут только прорисовка и даже видно как все происходит. Сначала один бровс, потом остальные. Вот и хочу понять где.

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1623
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.10.20 20:42. Заголовок: SergKis пишет: Меня..


SergKis пишет:

 цитата:
Меня лично скорость тсб устраивает, т.к. нет у меня MoreFields,

в понедельник постараюсь накидать пример из нескольких бровсов. Уверен проблема обозначиться яснее.
Суть в подчиненности таблиц, в зависимости от стройки в первой имеем выборку во второй ... и так далее. Прорисовка на экране идет волной более чем заметной. Возможно это тормозит метод :reset(). Вобщем постараюсь... накидать если по работе без форс мажора будет

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1624
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.10.20 20:49. Заголовок: kkg пишет: мне каже..


kkg пишет:

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


Нужно переделывать сдвиги в сторону на скролл окна, как при движении вверх или вниз. Текущий алгоритм унаследован со времен клиппер. Скорость прорисовки возрастет кратно, но не отобразит на скроллируемом куске изменения данных другими пользователями ( так и есть при вверх вниз) и думаю это нормально. Сергей реализовал класс cell, на основe которого можно сделать :refreshscreen() который будет перерисовывать изменившиеся ячейки видимой части бровсв.

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 3409
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.10.20 22:17. Заголовок: Haz пишет класс cell..


Haz пишет
 цитата:
класс cell, на основe которого можно сделать :refreshscreen() который будет перерисовывать изменившиеся ячейки видимой части бровсв.


Это будет давать эффект, если иметь массив таких TSBcell объектов для всех строк экрана\окна тсб, для одной, как сейчас ничего не решит. Т.е. рисуем запоминаем объекты TSBcell, потом используем при повторных прорисовках

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 3410
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.10.20 22:37. Заголовок: Haz пишет но когда н..


Haz пишет
 цитата:
но когда на экране более 5 связных бровсов , тот тут только прорисовка и даже видно как все происходит. Сначала один бровс, потом остальные. Вот и хочу понять где.


Посмотрев лог примера выше, скажу так, если тсб на окне несколько, то на каждом срабатывает прорисовка от обычного режима +2, т.е. добавляются прорисовки GotFocus, LostFocus. Вот пример лога вход тсб + 2 раза pgdn и переключение на Far и обратно и выход
Скрытый текст

добавил еще время прорисовки с учетом вывода в лог, т.е.
 
:Cargo:nSeconds := Seconds()
:bOnDrawLine := {|ob,xrow|
Local nRow := ob:nRowPos
Local nPos := ob:nCell
Local nLen := Len(ob:aRowPosAtRec)
ob:Cargo:nSeconds := Seconds()
...
:bTSDrawCell := {|ob,oc,ok|
If oc:nDrawType == 0
? myproc(1),procline(1),myproc(2),procline(2),myproc(3),procline(3),myproc(4),procline(4),myproc(5),procline(5)
?? oc:lDrawLine,"Col =",oc:nCell, ok:cName, Seconds() - ob:Cargo:nSeconds
EndIf
Return Nil
}
...



Спасибо: 0 
Профиль
kkg



Пост N: 25
Зарегистрирован: 29.11.19
ссылка на сообщение  Отправлено: 03.10.20 22:31. Заголовок: SergKis Вы предлага..


SergKis

 цитата:
Вы предлагайте конкретно по тексту, берем тут, правим так или так.


"поигрался" на реальных данных из "тяжёлых" отчётов,
на удивление мерцание текста вызывает не DrawLine, а DrawSelect
путём "кастрации" в метод DrawCell и его использования в GoRight GoLeft
мерцание текста потушил, но у меня не совсем стандартное использование,
попробуйте у себя
Скрытый текст



Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 3411
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.10.20 09:53. Заголовок: kkg пишет попробуйте..


kkg пишет
 цитата:
попробуйте у себя


Попробовал, поправил только
::DrawCell( /*::nAt*/, ::nOldCell)
::DrawCell( /*::nAt*/, ::nCell)
т.к. :nAt это номер текущей строки отображения, т.е. для массива номер элемента, для dbf номер записи
Разницы в работе не увидел (мониторы 14",15")
Тут примеры https://TransFiles.ru/po4kc
DemoMdi0.exe - это родной вариант
DemoMdi.exe - это ваш

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 3412
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.10.20 09:59. Заголовок: PS Разве что в приме..


PS
Разве что в примере Tsb_Array_2 немного подрагивания меньше при горизонтальном движении вправо, но поставил ваше
lRefresh := ( ::lCanAppend /*.or. ::lIsArr*/ )
и оно пропало

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1625
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.10.20 11:58. Заголовок: SergKis пишет: lCan..


SergKis пишет:

 цитата:
lCanAppend

писал выше, нужно убрать всю строку целиком, не забыв проинициализировать переменную в . f. в начале метода. Просто не врубаюсь как связаны lCanAppend и goRight.
С понедельника по не многу продолжу

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 3413
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.10.20 12:05. Заголовок: Haz пишет нужно убра..


Haz пишет
 цитата:
нужно убрать всю строку целиком, не забыв проинициализировать переменную в . f. в начале метода. Просто не врубаюсь как связаны lCanAppend и goRight.


У меня lCanAppend всегда .F., потому без разницы где инициализировать. А вдруг, кто то врубается , а мы сломаем

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 1626
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.10.20 13:04. Заголовок: SergKis пишет: А вд..


SergKis пишет:

 цитата:
А вдруг, кто то врубается , а мы сломаем

CanAppend разрешает skip ниже последней строки и делает Append . как это должно влиять на goright не пойму. В goLeft такого нет. Так что не сломаем, а если сломаем то починим.

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 24
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет