Автор | Сообщение |
|
| постоянный участник
|
Пост 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:....
|
|
|
Ответов - 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 отключи, то же что то получишь
|
|
|
|
| |
Пост N: 1913
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.03.23 18:57. Заголовок: Всем привет, терзает..
Всем привет, терзает меня давно один вопрос . При редактировании поля в ТСБ курсор скачет на первую позицию и обратно. На сам процесс не влияет , но не эстетично. Порыл по исходникам и нашел причину : в методе UpStable() 14778: ::GoTop() - вызывает видимый прыжок на начало таблицы с прорисовкой курсора. По коду нет необходимости здесь использовать метод , достаточно будет (::cAlias)->(dbGoTop()) -и быстрее , и без дерганья курсора. Вроде когда то не было такого, или просто не обращал внимания чуть ниже два вызова ::Skip() - их тоже можно заменить на (::cAlias)->(dbSkip()), но они хоть на экране не мелькают Поменял, погонял - полет нормальный
|
|
|
|
| постоянный участник
|
Пост N: 4250
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.03.23 19:29. Заголовок: Haz пишет 14778: ::G..
Haz пишет У меня 14772 и последняя версия. цитата: | чуть ниже два вызова ::Skip() |
| ты имеешь ввиду строки (для понимания) ELSE ( ::cAlias )->( dbSkip( 1 ) ) //!!! ::Skip( 1 ) ENDIF ... IF lSkip ( ::cAlias )->( dbSkip( -::nRowPos ) ) //!!! ::Skip( -::nRowPos ) ENDIF
|
|
|
|
| |
Пост N: 1914
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.03.23 19:32. Заголовок: SergKis пишет: ты и..
SergKis пишет: Да эти. Только у меня они не заменены на dbSkip
|
|
|
|
| постоянный участник
|
Пост N: 4251
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.03.23 19:50. Заголовок: Haz пишет чуть ниже ..
Haz пишет цитата: | чуть ниже два вызова ::Skip() - их тоже можно заменить на (::cAlias)->(dbSkip()), но они хоть на экране не мелькают |
| цитата: | Только у меня они не заменены на dbSkip |
| т.е. не меняем, ты меня не путай, я на таблетках, плохо соображаю " Скажи точно, сколько класть"
|
|
|
|
| |
Пост N: 1915
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.03.23 20:03. Заголовок: SergKis пишет: Скаж..
SergKis пишет: цитата: | Скажи точно, сколько класть" |
| Меняем все. Просто в твоем сообщении уже увидел замену, подумал что у меня не самая последняя версия. ::GoTop() точно под замену ::Skip() 99% что да. Посмотрел код погонял, у меня все норм на рабочем проекте. Еще на всякий случай завтра с фильтрами проверю и отпишусь. Себе все поменял
|
|
|
|
| |
Пост N: 1916
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.03.23 20:04. Заголовок: SergKis пишет: я на..
SergKis пишет: Выздоравливай
|
|
|
|
| |
Пост N: 1917
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.03.23 21:18. Заголовок: Вобщем потестировал ..
Вобщем потестировал и с фильтрами и со сменой индекса, все работает при всех заменах
|
|
|
|
| постоянный участник
|
Пост 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. Может тогда курсор скакать не будет ?
|
|
|
|
| |
Пост N: 1918
Зарегистрирован: 20.02.11
|
|
Отправлено: 27.03.23 20:00. Заголовок: SergKis пишет: Заме..
SergKis пишет: цитата: | Замена ( ::cAlias )->( dbGoTop() ) //!!! 23.03.23 ::GoTop() тоже не совсем корректна, т. |
| В этом месте не важно, тут простой подсчет строк с начала и все остальные вычисления только тормозят процесс. :Skip() можно и оставить, , но при обычном использовании тоже не критично, в коде полно и функций dbSkip() и методов :Skip() Завтра посмотрю на :dbSkipper() уверен не повлияет. Есть где нибудь в инете актуальные исходники MG ? А то не всегда комп под рукой и по телефону не посмотреть
|
|
|
|
| постоянный участник
|
Пост N: 4256
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.03.23 20:34. Заголовок: Haz пишет Есть где н..
|
|
|
|
|
| |
Пост N: 1919
Зарегистрирован: 20.02.11
|
|
Отправлено: 27.03.23 21:45. Заголовок: SergKis пишет: тут ..
SergKis пишет: Про тут я знаю, мне не скачивать , и просматривать исходник хотелось бы с браузера ( без скачивания и установки) . в последнее время часто езжу на общественном транспорте и есть время полистать в телефоне. Можно конечно и с компа папку MG в телефон кинуть и не забывать обновлять.
|
|
|
|
| |
Пост 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
|
|
|
|
| постоянный участник
|
Пост 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(), будет меньше мелькания
|
|
|
|
| |
Пост N: 1921
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.03.23 10:10. Заголовок: SergKis пишет: Оста..
SergKis пишет: цитата: | Осталось решить эти строки нужны ? |
|
сегодня посмотрю тоже
|
|
|
|
| |
Пост N: 1922
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.03.23 12:00. Заголовок: SergKis пишет: Оста..
SergKis пишет: цитата: | Осталось решить эти строки нужны ? |
| Просто так не выкинуть. В самом методе upstable , можно GoTop() обрамить выключением и включёнием lPainted и это уберёт видимость прыжка. Дальше по логике метода вызывается перерисовка если есть несоответствие строк . Это в принципе правильно. Метод проверяет строки сверху и снизу окна бровса. Без перерисовки тут не обойтись. Вызываемые далее в исходнике рефрешы после upstable не всегда учитывают что нужна полная перерисовка. Тут скорее путь такой, upstable всегда перерисовывает, а код исходников чистить от лишних рефрешей после upstable. Это уберёт и дерганье и повысит скорость
|
|
|
|
| постоянный участник
|
Пост 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., думаю будет работать
|
|
|
|
| |
Пост 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 рисуем поверх, а дальше просто рисуем пустые строки ( с сеткой или без ). Это визуально добавит плавности.
|
|
|
|
| постоянный участник
|
Пост N: 4259
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.03.23 15:10. Заголовок: Haz пишет Может имее..
Haz пишет цитата: | Может имеет смысл пересмотреть метод и сделать третий вариант |
| Игорь, я за "любой кипишь", если он на пользу. Не уверен, что получится реализовать, т.к. разбросано сильно по текстам и режимам, которые не применял никогда. Тут бы получить вариант простенький, счетчик :Refresh() (знать сколько раз подряд вызывался в том или ином режиме), отключить\включить :Refresh() (кроме, может быть, перемещения, PgUp, PgDn, Up, Dn, ...), что бы самому управлять :Refresh() в др. случаях, с очисткой или нет это уже техника, параметры есть. А "третий вариант" это событие 55 (выше), оно может быть простым или более сложным, но оно работает когда мне надо, а не тсб за меня, что то пытается изобразить. Такое событие не сунешь в тсб, т.к. оно внешнее по отношению к тсб и может работать как с кнопок, мышек, ..., других окон и даже др. процесса. Такие мысли
|
|
|
|
| |
Пост N: 1924
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.03.23 16:07. Заголовок: SergKis пишет: Не у..
SergKis пишет: цитата: | Не уверен, что получится реализовать, т.к. разбросано |
| Ну как метод сделать можно, черновик попробовал , мелькает меньше ( только на DrawSelect )
|
|
|
Ответов - 181
, стр:
1
2
3
4
5
6
7
8
9
10
All
[только новые]
|
|