On-line: NickSam, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник


Пост 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 
ПрофильЦитата Ответить
Ответов - 181 , стр: 1 2 3 4 5 6 7 8 9 10 All [только новые]


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




Пост N: 4249
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.03.23 17:22. Заголовок: Andrey пишет Наверно..


Andrey пишет
 цитата:
Наверное моя ширина колонок замениться ?


Не знаю, т.к. никогда не использую Excel Ole.
Возможно, получишь все нормально или вставив в длинный текст заменитель CRLF (сколько надо для ширины) получишь нужное. Или Wrap отключи, то же что то получишь

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1913
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.03.23 18:57. Заголовок: Всем привет, терзает..


Всем привет, терзает меня давно один вопрос . При редактировании поля в ТСБ курсор скачет на первую позицию и обратно. На сам процесс не влияет , но не эстетично.
Порыл по исходникам и нашел причину :
в методе UpStable()

14778: ::GoTop() - вызывает видимый прыжок на начало таблицы с прорисовкой курсора. По коду нет необходимости здесь использовать метод , достаточно будет (::cAlias)->(dbGoTop()) -и быстрее , и без дерганья курсора.
Вроде когда то не было такого, или просто не обращал внимания

чуть ниже два вызова ::Skip() - их тоже можно заменить на (::cAlias)->(dbSkip()), но они хоть на экране не мелькают

Поменял, погонял - полет нормальный

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




Пост N: 4250
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.03.23 19:29. Заголовок: Haz пишет 14778: ::G..


Haz пишет
 цитата:
14778: ::GoTop()


У меня 14772 и последняя версия.

 цитата:
чуть ниже два вызова ::Skip()


ты имеешь ввиду строки (для понимания)
 
ELSE
( ::cAlias )->( dbSkip( 1 ) )
//!!! ::Skip( 1 )
ENDIF
...
IF lSkip
( ::cAlias )->( dbSkip( -::nRowPos ) )
//!!! ::Skip( -::nRowPos )
ENDIF


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1914
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.03.23 19:32. Заголовок: SergKis пишет: ты и..


SergKis пишет:

 цитата:
ты имеешь ввиду строки (


Да эти. Только у меня они не заменены на dbSkip

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




Пост N: 4251
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.03.23 19:50. Заголовок: Haz пишет чуть ниже ..


Haz пишет
 цитата:
чуть ниже два вызова ::Skip() - их тоже можно заменить на (::cAlias)->(dbSkip()), но они хоть на экране не мелькают



 цитата:
Только у меня они не заменены на dbSkip


т.е. не меняем, ты меня не путай, я на таблетках, плохо соображаю
"Скажи точно, сколько класть"

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1915
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.03.23 20:03. Заголовок: SergKis пишет: Скаж..


SergKis пишет:

 цитата:
Скажи точно, сколько класть"


Меняем все. Просто в твоем сообщении уже увидел замену, подумал что у меня не самая последняя версия.
::GoTop() точно под замену
::Skip() 99% что да. Посмотрел код погонял, у меня все норм на рабочем проекте. Еще на всякий случай завтра с фильтрами проверю и отпишусь. Себе все поменял

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1916
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.03.23 20:04. Заголовок: SergKis пишет: я на..


SergKis пишет:

 цитата:
я на таблетках,


Выздоравливай

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1917
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.03.23 21:18. Заголовок: Вобщем потестировал ..


Вобщем потестировал и с фильтрами и со сменой индекса, все работает при всех заменах

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




Пост N: 4254
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.03.23 16:40. Заголовок: Haz пишет Вобщем пот..


Haz пишет
 цитата:
Вобщем потестировал и с фильтрами и со сменой индекса, все работает при всех заменах


Игорь, а как будет при применении :DbSkipper(n), разве не будет конфликта с (:cAlias)->( dbSkip(n) ) ?
Наверно, :Skip(n) метод надо оставить, в нем нет отображений и он не мешает.

Замена ( ::cAlias )->( dbGoTop() ) //!!! 23.03.23 ::GoTop()
тоже не совсем корректна, т.к. :GoTop() выполняет свои алгоритмы, например Eval( ::bGotop } ...
Ты не пробовал перед "При редактировании поля в ТСБ" сделать ::lPainted := .F., потом вернуть, если надо.
Все прорисовки идут при ::lPainted := .T.
Может тогда курсор скакать не будет ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1918
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.03.23 20:00. Заголовок: SergKis пишет: Заме..


SergKis пишет:

 цитата:
Замена ( ::cAlias )->( dbGoTop() ) //!!! 23.03.23 ::GoTop()
тоже не совсем корректна, т.


В этом месте не важно, тут простой подсчет строк с начала и все остальные вычисления только тормозят процесс.
:Skip() можно и оставить, , но при обычном использовании тоже не критично, в коде полно и функций dbSkip() и методов :Skip() Завтра посмотрю на :dbSkipper() уверен не повлияет.

Есть где нибудь в инете актуальные исходники MG ? А то не всегда комп под рукой и по телефону не посмотреть

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




Пост N: 4256
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.03.23 20:34. Заголовок: Haz пишет Есть где н..


Haz пишет
 цитата:
Есть где нибудь в инете актуальные исходники MG ?


тут "Download" http://hmgextended.com/

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1919
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.03.23 21:45. Заголовок: SergKis пишет: тут ..


SergKis пишет:

 цитата:
тут "Download"


Про тут я знаю, мне не скачивать , и просматривать исходник хотелось бы с браузера ( без скачивания и установки) . в последнее время часто езжу на общественном транспорте и есть время полистать в телефоне. Можно конечно и с компа папку MG в телефон кинуть и не забывать обновлять.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1920
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.03.23 22:27. Заголовок: SergKis пишет: Игор..


SergKis пишет:

 цитата:
Игорь, а как будет при применении :DbSkipper(n), разве не будет конфликта с (:cAlias)->( dbSkip(n) ) ?
Наверно, :Skip(n) метод надо оставить, в нем нет отображений и он не мешает.



Сергей , ты прав для корректной отработки ::bFilter (если он есть ) ::Skip() тогда лучше оставить


 цитата:

Замена ( ::cAlias )->( dbGoTop() ) //!!! 23.03.23 ::GoTop()
тоже не совсем корректна, т.к. :GoTop() выполняет свои алгоритмы, например Eval( ::bGotop } ...


в этом месте Eval( ::bGotop } ... и пр. точно не нужны , тут по коду просто подсчет строк, но есть но ...
при ( ::cAlias )->( dbGoTop() ) опять таки не учитывается ::bFilter , значит тоже нельзя
просто замкнутый круг получается.

 цитата:

Ты не пробовал перед "При редактировании поля в ТСБ" сделать ::lPainted := .F., потом вернуть, если надо.
Все прорисовки идут при ::lPainted := .T.
Может тогда курсор скакать не будет ?


Да , это скорее всего решит проблему , но это нагружает код разработчика для исправления косяка в MG
может в самом ::Upstable() перед ::GoTop() поставить ::lPainted := .F. , а после ::lPainted := .T.
Попробовал, решает вопрос с прыганьем и позволяет корректно выполнить функционал ::bFilter

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




Пост N: 4257
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.03.23 22:55. Заголовок: Haz пишет Попробовал..


Haz пишет
 цитата:
Попробовал, решает вопрос с прыганьем и позволяет корректно выполнить функционал


Осталось решить эти строки нужны ?
 
METHOD UpStable() CLASS TSBrowse
...
IF ::lPainted
::Refresh( iif( ::nLen < nRows, .T., .F. ) )
ENDIF

Посмотрел код на :UpStable() и :Refresh() после него. Во многих местах этот метод есть, но небольшой процент вероятности, что где то его не хватает есть. Думаю "поставить ::lPainted := .F. , а после ::lPainted := .T." хорошая мысль, т.к. выкинется, возможно, лишний :Refresh(), будет меньше мелькания

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1921
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.03.23 10:10. Заголовок: SergKis пишет: Оста..


SergKis пишет:

 цитата:
Осталось решить эти строки нужны ?

сегодня посмотрю тоже

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1922
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.03.23 12:00. Заголовок: SergKis пишет: Оста..


SergKis пишет:

 цитата:
Осталось решить эти строки нужны ?


Просто так не выкинуть.
В самом методе upstable , можно GoTop() обрамить выключением и включёнием lPainted и это уберёт видимость прыжка.
Дальше по логике метода вызывается перерисовка если есть несоответствие строк . Это в принципе правильно. Метод проверяет строки сверху и снизу окна бровса. Без перерисовки тут не обойтись. Вызываемые далее в исходнике рефрешы после upstable не всегда учитывают что нужна полная перерисовка.
Тут скорее путь такой, upstable всегда перерисовывает, а код исходников чистить от лишних рефрешей после upstable.
Это уберёт и дерганье и повысит скорость

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




Пост N: 4258
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.23 13:00. Заголовок: Haz пишет Тут скорее..


Haz пишет
 цитата:
Тут скорее путь такой, upstable всегда перерисовывает, а код исходников чистить от лишних рефрешей после upstable.


Это повторение ситуации, :Upstable() должен давать сообщение, что нужна прорисовка, но сам делать не должен.
Прорисовка нужна вне :UpStable(), а почистить код и оптимизировать :Refresh() идея хорошая, но трудно выполнимая, слишком много условий и вариантов, которые и тестировать надо. Вынести на какой нибудь счетчик потребности :Refresh() (заменив вызовы текущие) и если он > 0 и new переменная .T. - делать :Refresh() и счетчик в 0. Вынести бы :Refresh() на событие, но слишком разбросан он по текстам
PS
Я стараюсь делать так, например, после (Edit) изменений в нескольких строках Row
 
oCol:bPostEdit := {|xv,ob|
...
IF xv != oc:xOldEditValue
DO EVENTS ; _wPost(55, ob:cParentWnd, ob)
ENDIF
Return Nil
}

(This.Object):Event(55, {|ow,ky,ob| DoEvents(), ky := ow, ob:Refresh(), DoEvents() })

Использую событие всегда по потребности, используя _wPost(55...), _wSend(55...) и для др. окна с тсб тоже (работая на тек. окне). Такая метода с постановкой :lPainted := .T.\.F., думаю будет работать

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1923
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.03.23 13:17. Заголовок: SergKis пишет: Это ..


SergKis пишет:

 цитата:
Это повторение ситуации, :Upstable() должен давать сообщение,


Да , согласен , поэтому и написал что просто так не выкинуть. Просто процитирую твои слова, т.к. полностью согласен
:Upstable() должен выполнять все внутренние установки и выставлять флаг для :Refresh(), сам вызывать :Refresh() не должен
при этом флаг для рефреш имеет признаки 1) с очисткой , 2) без очистки
Именно так работает метод :Refresh()
1. с очисткой - сначала очищается текущее окно , а потом по чистенькому прорисовка. Это вызывает моргание но без него не обойтись если после фильтра строк стало меньше чем было.
2. без очистки - рисует поверх моргания нет

Может имеет смысл пересмотреть метод и сделать третий вариант
3. перерисовка полностью без очистки. Суть в том , что если :nLen < :nRowCount то до :nLen рисуем поверх, а дальше просто рисуем пустые строки ( с сеткой или без ). Это визуально добавит плавности.

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




Пост N: 4259
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.23 15:10. Заголовок: Haz пишет Может имее..


Haz пишет
 цитата:
Может имеет смысл пересмотреть метод и сделать третий вариант


Игорь, я за "любой кипишь", если он на пользу. Не уверен, что получится реализовать, т.к. разбросано сильно по текстам и режимам, которые не применял никогда. Тут бы получить вариант простенький, счетчик :Refresh() (знать сколько раз подряд вызывался в том или ином режиме), отключить\включить :Refresh() (кроме, может быть, перемещения, PgUp, PgDn, Up, Dn, ...), что бы самому управлять :Refresh() в др. случаях, с очисткой или нет это уже техника, параметры есть. А "третий вариант" это событие 55 (выше), оно может быть простым или более сложным, но оно работает когда мне надо, а не тсб за меня, что то пытается изобразить. Такое событие не сунешь в тсб, т.к. оно внешнее по отношению к тсб и может работать как с кнопок, мышек, ..., других окон и даже др. процесса. Такие мысли

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1924
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.03.23 16:07. Заголовок: SergKis пишет: Не у..


SergKis пишет:

 цитата:
Не уверен, что получится реализовать, т.к. разбросано


Ну как метод сделать можно, черновик попробовал , мелькает меньше ( только на DrawSelect )

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 181 , стр: 1 2 3 4 5 6 7 8 9 10 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 263
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет