On-line: PSP, Haz, гостей 4. Всего: 6 [подробнее..]
АвторСообщение
Vlad04
постоянный участник


Пост N: 420
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)


TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений
К примеру

 цитата:

DEFINE TBROWSE oBrw2 ;
AT 60,450 ;
ALIAS cAlias ;
OF Form1 ;
WIDTH 330 ;
HEIGHT 340 ;
FONT "Verdana" ;
SIZE 9 ;
ON DBLCLICK CopyRec();
ON GOTFOCUS fModelo_Hab(2) ;
AUTOFILTER ;
CELLED EDIT;
VALUE nRec;
GRID


Здесь я собрал параметры из разных tBrows
Можно или нет и какие парметры заменить
выражением ( и каким) ?
oBrw2:....
oBrw2:....



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


Dima
администратор




Пост N: 6197
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.12.16 18:56. Заголовок: Долго играть не приш..


Долго играть не пришлось.
Открыл бровс. Показания BITMAP в GDIVIEW 234 [0]
Опустился стрелкой вниз на 5 строк в бровсе , получил 234 [+56]
Еще 5 строк , 472 [+274]
Похоже утечка с показом иконок и картинок в TsBrowse , но спешить с выводами не буду
и проверю на примерах из поставки Минигуи.

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




Пост N: 6198
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.12.16 14:58. Заголовок: Поигрался в свое про..


Поигрался в свое проге + GDIVIEW
В некоторых полях использую вывод BMP из ресурса.
Заявлено примерно так
 
oBrw3:GetColumn( "dels" ):uBmpCell :={|| if( (oBrw3:calias)->dels,LOADIMAGE("wcanc"),NIL) }
.........
oBrw3:GetColumn( "prm" ):uBmpCell :={|| if( !empty((oBrw3:calias)->prime),LOADIMAGE("rss_brw"),NIL) }

В этом случае в GDIVIEW в колонке BitMap цифра постоянно растет , даже если закрыть окно
с бровсом а после войти туда снова. При езде по самому бровсу эта цифра так же растет.
Пробнул в LoadImage сунуть имя не существующего ресурса , показа картинок в этом случае
нет что и понятно , но и утечки нет однако.
Поюзал в такой связке примеры из Минигуи где картинка в бровс помещается не из ресурса
а из файла на диске , в этом случае утечки так же нет.

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




Пост N: 6199
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.12.16 15:42. Заголовок: Кажись понял :sm12:..


Кажись понял
Вот так не совсем верно
oBrw3:GetColumn( "dels" ):uBmpCell :={|| if( (oBrw3:calias)->dels,LOADIMAGE("wcanc"),NIL) }

Необходимо в самом начале проги сделать примерно так
Public abmp3:={LOADIMAGE("wcanc"),LOADIMAGE("rss_brw")}

а далее
oBrw3:GetColumn( "dels" ):uBmpCell :={|| if( (oBrw3:calias)->dels,abmp3[1],NIL) }

В этом случае таких глобальных утечек не будет.
А так при езде по бровсу без этих изменений постоянно грузился новый экземпляр пикчи.

PS
Лень делать проверку , но думаю если устроить цикл от 1 до 5 тыщ (может больше) и в нем грузить одну
и туже пикчу из ресурса с помощью LOADIMAGE , то прога "ляжет".....
Примеры типа TSB_CURSOR если долго их "напрягать" тоже лягут , так как при любом сдвиге
записи в таблице постоянно грузится новый экземпляр Calendar.BMP , это хорошо видно в GDIVIEW.

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


Пост N: 260
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 15.12.16 16:24. Заголовок: Петр пишет: И что н..


Петр пишет:

 цитата:
И что не нашли?


TsBrows перестали использовать т.к. появился xBrows и вопросы отпали :)

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




Пост N: 1055
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.12.16 16:50. Заголовок: Dima пишет: Примеры..


Dima пишет:

 цитата:
Примеры типа TSB_CURSOR если долго их "напрягать" тоже лягут


Благодарю за сообщение!
Поправил этот пример для новой сборки (см.ниже)
Скрытый текст


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


Пост N: 1376
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 16.12.16 19:15. Заголовок: Dima пишет: Кажись ..


Dima пишет:

 цитата:
Кажись понял



Глюки ушли совсем?

P.S. Поздравляю с освоением нового инструмента - GDIVIEW

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




Пост N: 5253
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.12.16 19:15. Заголовок: ММК пишет: т.к. поя..


ММК пишет:

 цитата:
т.к. появился xBrows и вопросы отпали



А портировать xBrows в МиниГуи возможно ?
Ну там лицензия и т.д.

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


Пост N: 1377
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 16.12.16 19:22. Заголовок: Andrey пишет: А по..



Andrey пишет:

 цитата:
А портировать xBrows в МиниГуи возможно ?
Ну там лицензия и т.д.



Если у вас есть такая возможность, то портируйте, пожалуйста,

click here

или

click here

Там и лицензия позволяет, и многие были бы вам благодарны


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




Пост N: 6210
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.12.16 19:39. Заголовок: Петр пишет: Глюки у..


Петр пишет:

 цитата:
Глюки ушли совсем?

P.S. Поздравляю с освоением нового инструмента - GDIVIEW


Косяков больше не смог найти . Долго "ездил" , глюков нет.
Отдал заказчику , пусть обкатают.
Спасибо за наводку

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


Пост N: 1378
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 16.12.16 20:01. Заголовок: Dima пишет: Косяков..


Dima пишет:

 цитата:
Косяков больше не смог найти . Долго "ездил" , глюков нет.



Извините, конечно, за назойливость
Костыль в виде таймера убран? Или еще нужен?


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




Пост N: 6211
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.12.16 22:34. Заголовок: Петр пишет: Костыль..


Петр пишет:

 цитата:
Костыль в виде таймера убран? Или еще нужен?


Как бы костыля и не было. Изначально таймер жил в Tsbrowse а после поселился в окне где живут
дружно два бровса TS.
Вся ситуация как бы была описана выше.
На что намекаешь то ? :)
Косяков и утечек не увидел.

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




Пост N: 1061
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.12.16 23:06. Заголовок: Да по сути это и е..


Да по сути это и есть костыль т. к. заменяет обработку "отпускания" кнопки.
И пока этот костыль нужен. и вариантов кроме таймера не предвидится
Без этого "костыля" не понятно как организовать перерисовку подчиненных бровсоов,
а если их "сто пятьсот" - главный бровс возмет приз Гинеса по тормозам при скипе



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


Пост N: 1379
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 16.12.16 23:12. Заголовок: Dima пишет: На что ..


Dima пишет:

 цитата:
На что намекаешь то ? :)


Ни на что. Честно !

Если таймер используется только для синхронизации, то такое решение имеет право на существование.


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


Пост N: 1380
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 16.12.16 23:16. Заголовок: Haz пишет: Без этог..


Haz пишет:

 цитата:
Без этого "костыля" не понятно как организовать перерисовку подчиненных бровсоов,



Как бы задумывалось через SyncChild, а вот рациональный алгоритм для наступления этого события
продумать не мешало бы.

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




Пост N: 1062
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.12.16 00:10. Заголовок: Петр пишет: продума..


Петр пишет:

 цитата:
продумать не мешало бы.


Петр, да ктож против. Мы все локально и у себя, пытаемся этот алгоритм найти.
Многое предложил Сергей, кое что по мелочам я накидал, проф поправки есть и от тебя
(сорь на брудершафт пока не пили, уверен не обидел) . Это все не системно.
Может открыть тему Проблема TS - варианты - решение. Григорий один не вытянет.
К примеру подтема "как сделать отображение подчиненного бровса по ОТПУСКАНЮ
кнопки или отрыву пальца от колеса мыши?
Один из вариантов - именно таймер, но ведь есть и другие. Вот в этой теме их и собирать.
Пока по факту TS один из самых сильных инструментов в Minigui и.... один из самых непредсказуемых,
применрно половина времени на разработку ПО уходит на борьбу с его сюрпризами





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




Пост N: 1340
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.12.16 01:16. Заголовок: Петр пишет Как бы за..


Петр пишет
 цитата:
Как бы задумывалось через SyncChild, а вот рациональный алгоритм для наступления этого события
продумать не мешало бы.


SyncChild метод ставит ::bChange, т.е. портит установленный, а практически в каждом тсб он занят.
Даже этого достаточно, что бы метод не использовать.
Haz пишет
 цитата:
К примеру подтема "как сделать отображение подчиненного бровса по ОТПУСКАНЮ
кнопки или отрыву пальца от колеса мыши?


Тут больше гемороя, т.к. надо знать какому тсб и в какой ситуации, что посылать.
По мне, наличие таймера на контроле (тсб в частности), вполне приемлемое решение.
Принцип "все свое ношу с собой" в объекте, т.е. каждый тсб знает, что и при каких условиях надо делать\переотображать.

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




Пост N: 1341
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.12.16 08:56. Заголовок: PS По поводу обработ..


PS
По поводу обработчика в тсб. Можно добавить
 
DATA bEvents

METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TSBrowse

Local nDelta, ix

Default ::lNoPaint := .F., ;
::lDontChange := .F.

If hb_IsBlock(::bEvents)
If ! empty( EVal(::bEvents, Self, nMsg, nWParam, nLParam) )
RETURN 1
EndIf
EndIf

...



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


Пост N: 262
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 17.12.16 10:23. Заголовок: Петр пишет: Если та..


Петр пишет:

 цитата:
Если таймер используется только для синхронизации, то такое решение имеет право на существование.



Для синхронизации есть ON CHANGE. С учетом того , что все другие бровсы работают нормально есть смысл посмотреть их и сравнить с TS.
Ситуация меняется , если изменить алгоритм перерисовки. Менется , если убирать утечки памяти , хотя возникает она и без использования иконок.
Мне кажется правильнее искать причину :) Ведь если оставлять этот бровс , то в него еще придется много чего добавлять , а с такими глюками это замок на песке.

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




Пост N: 1063
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.12.16 14:42. Заголовок: ММК пишет: Для синх..


ММК пишет:

 цитата:
Для синхронизации есть ON CHANGE.

к нему претензий, за исключением одной - не ловит ситуёвину ногда пользователь сел на кнопку и едет к примеру вниз не отпуская. Блок отрабатывает честно на каждом скипе, а если там перерисовка другого бровса или их несколько....
И пока вся эта гирлянда не отработает bChange не пустит на следующую запись. Причём это вполне рабочая ситуация, есть например реестр заказов, с каждым заказом связан его состав ( отдельный бровс) и графики платежей ( еще один). С каждым элементом состава заказа может быть связан технологический маршрут ( бровс по рабочим операциям на элемент заказа с контролем готовности).
Чтото подобное делал и стандартный bChange доводил пользователя до истерики, ну не удобно ему поиском.... хочет нажать на кнопочку и следить глазами если не увидел сразу то так и будет ездить туда сюда. Все подчиненные запросы ( сижу на ADS SQL) отработывают мгновенно, а перерисовка всех бровсов не дает быстро ездить да и постоянное мелькание начинает бесить.
Вот и возникает необходимость чтобы за этим bChange была слежка со стороны и игнорились слишком частые вызовы, а выполнялся только последний.
Вот так и появился таймер.



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


Пост N: 1382
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 17.12.16 15:06. Заголовок: SergKis пишет: Sync..


SergKis пишет:

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

"
А в каких случаях можно использовать SyncChild()?
Вот bChange с компанией используется как navigation codeblocks

DATA bLine, bSkip, bGoTop, bGoBottom, ;
bLogicLen, bChange // navigation codeblocks

bLine, bLogicLen, bChange - это navigation codeblocks - ну тоже мало понятно


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