On-line: Oskar_AAA, гостей 3. Всего: 4 [подробнее..]
АвторСообщение
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: 2060
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.09.18 20:04. Заголовок: Игорь, перенес метод..


Игорь, перенес метод в тек. версию и собрал твой пример - получилось не как в твоем примере.
Двигаемся вниз курсором, не выходя за 1ый экран идем назад к 1ой записи slave передергивает записи.
Глянул и у себя это место, поведение похоже. На родном примере такого нет.
Что я потерял ?
Пример с методом https://my-files.ru/21e5ya

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




Пост N: 2061
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.09.18 20:08. Заголовок: PS Отбой, потерял DO..


PS
Отбой, потерял DO EVENTS, пока думал как записать в метод командой или функцией.

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




Пост N: 2062
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.09.18 20:16. Заголовок: PPS ::lHitTop..


PPS
 
::lHitTop := ::lHitBottom := .F.

DO EVENTS

EndIf

RETURN lRet

все исправило во всех версиях и примерах

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




Пост N: 1356
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.09.18 21:39. Заголовок: SergKis пишет: все ..


SergKis пишет:

 цитата:
все исправило во всех версиях и примерах


Это означает, что Вы рекомендуете использовать новую редакцию этого метода в следующей сборке
Я правильно понял

Кстати, уже добавил новый метод FilterFTS() в текущую сборку.
Благодарю за помощь

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




Пост N: 2063
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.09.18 22:02. Заголовок: gfilatov2002 пишет Э..


gfilatov2002 пишет
 цитата:
Это означает, что Вы рекомендуете использовать новую редакцию этого метода в следующей сборке


В своей версии метод заменил, собрал только один проект. В нем все поиски\подводы по запросам работают как надо, т.е. одинаково с предыдущим вариантом. При случае передам новую версию в работу клиенту и понаблюдаю.
Если Игорь применит у себя метод в проекте, будет больше информации.
Впечатление у меня положительное.

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




Пост N: 1357
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.09.18 22:21. Заголовок: SergKis пишет: буд..


SergKis пишет:

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


Тогда откладываем эти изменения для будущих сборок.

Я тестировал новую редакцию этого метода на примере Tsb_seek_2 и при перемещении на начало таблицы, а затем добавлении записи по клавише F2 на экране появляется "мусор" после последней строки в базе. У текущего метода этой проблемы нет, хотя он и не сохраняет точное значение :nRowPos, как указывал Игорь.

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




Пост N: 1345
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.09.18 22:26. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Это означает, что Вы рекомендуете использовать новую редакцию этого метода в следующей сборке


По коду эта редакция должна быть пошустрее предыдущей плюс управляемая позиция RowPos.
У себя заменил в проекте но не методом а функцией. Пока никто не жалился.

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




Пост N: 1348
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.09.18 22:44. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

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


Дома только с телефона читаю. Скорее связано с тем что после добавления бровс разбалансирован. т. е. ::nLen не пересчитан. Хотя могу и ошибаться. Завтра на работе посмотрю.

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




Пост N: 2064
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.09.18 23:37. Заголовок: Haz пишет т. е. ::nL..


Haz пишет
 цитата:
т. е. ::nLen не пересчитан.


Это тоже присутствует, но не главное:
:nRowPos -> 1
:nRow факт -> от 1 до 14 и 14 + 1 -> EOF()
:nRowCount() -> 25
вот мусор и остался 25 - 14 = 11 строк

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




Пост N: 2065
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.09.18 23:44. Заголовок: PS :nLen -> 502..


PS
:nLen -> 502

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




Пост N: 1349
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.09.18 23:46. Заголовок: SergKis пишет: вот ..


SergKis пишет:

 цитата:
вот мусор и остался 25 - 14 = 11 строк


Значит вопрос в двух параметрах Refresh( p1, p2)
Возможно следует добавить проверку сколько сколько строк после RowPos и сколько записей после nRec.
Или просто заменить на Refresh(.T.,.T.) но это даст моргание.

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




Пост N: 2066
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.09.18 00:01. Заголовок: Haz пишет но это дас..


Haz пишет
 цитата:
но это даст моргание


В данной ситуации 14 стр. должна стать 25 и :nRowPos -> 12, т.е перепрыг курсора неизбежен
Пост. моргания не хотелось бы

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




Пост N: 1350
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.09.18 09:04. Заголовок: SergKis пишет: Пост..


SergKis пишет:

 цитата:
Пост. моргания не хотелось бы


Сегодня добавлю проверку и пререрисовку только когда последняя запись не на RowCount()

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




Пост N: 2067
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.09.18 10:08. Заголовок: gfilatov2002 пишет К..


gfilatov2002 пишет
 цитата:
Кстати, уже добавил новый метод FilterFTS() в текущую сборку


По мне, в сборку надо вкл. и упрощенный фильтр :FilterRow(), т.к. это др. алгоритм, нежели в :SetFilter(...) с автоматическими scope внутри. У себя я включил такой вариант (scope вполне ставится до такого фильтра)
 
METHOD FilterRow( cFilter, lFocus ) CLASS TSBrowse
LOCAL nLen := 0, cAlias := ::cAlias

IF ! Empty(cFilter)
( cAlias )->( DbSetFilter( &("{||" + cFilter + "}"), cFilter ) )
ELSE
( cAlias )->( DbClearFilter() )
END

( cAlias )->( DbGotop() )
DO WHILE ( cAlias )->( !EOF() )
DO EVENTS
nLen++
( cAlias )->( DbSkip(1) )
ENDDO
( cAlias )->( DbGotop() )
DO EVENTS

::bLogicLen := {|| nLen }
::Reset()

If ! empty(lFocus)
::SetFocus()
EndIf

RETURN Nil


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




Пост N: 1358
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.09.18 10:35. Заголовок: SergKis пишет: в сб..


SergKis пишет:

 цитата:
в сборку надо вкл. и упрощенный фильтр


Буду рассматривать Ваше предложение для будущих сборок, поскольку подготовка новой сборки уже завершена.

Возник вопрос:
почему Вы не используете для подсчета количества строк в фильтре функцию DbEval() с условием For
вместо устаревшего перебора по всем строкам

 цитата:
... 
( cAlias )->( DbGotop() )
DO WHILE ( cAlias )->( !EOF() )
DO EVENTS
nLen++
( cAlias )->( DbSkip(1) )
ENDDO
( cAlias )->( DbGotop() )
DO EVENTS



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




Пост N: 2068
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.09.18 10:43. Заголовок: gfilatov2002 пишет п..


gfilatov2002 пишет
 цитата:
почему Вы не используете для подсчета количества строк в фильтре функцию DbEval() с условием For
вместо устаревшего перебора по всем строкам


1. Для небольших баз "по быстрому" иногда использую, но в блок кода принудительно вставляю DoEvents().
2. В localhost база (реальная) ~70 000 записей DbEval работает на 2-5 сек дольше, зависит еще от ширины базы

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




Пост N: 2069
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.09.18 10:48. Заголовок: PS Перебор можно опт..


PS
Перебор можно оптимизировать, к примеру имея массив блоков кода, вместо длинного, сложного выражения фильтра:
 
DO WHILE ...
FOR EACH b IN aBlock
If Eval(b)
EXIT
EndIf
NEXT
SKIP
ENDDO


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




Пост N: 1351
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.09.18 11:10. Заголовок: Haz пишет: Сегодня ..


Haz пишет:

 цитата:
Сегодня добавлю проверку и перерерисовку только когда последняя запись не на RowCount()


Добавил проверку на полную перерисовку
 
METHOD GotoRec( nRec, nRowPos ) CLASS TSBrowse
LOCAL cAlias
LOCAL nSkip := 0
LOCAL lMore := .T.
LOCAL lSkip := .F.
LOCAL lRet := .F.
LOCAL lReCount := .F.

If ::lIsDbf

lRet := .T.
cAlias := ::cAlias
::SetFocus()
::nLastPos := (cAlias)->( RecNo() )
hb_default( @nRowPos, ::nRowPos )
(cAlias)->( dbGoto(nRec) )

while !(cAlias)->(eof()) .and. nSkip < ( ::nRowCount() - nRowPos )
(cAlias)->( dbSkip(1) )
nSkip ++
end
if (cAlias)->(Eof())
lReCount := .T.
end


(cAlias)->( dbGoto(nRec) )
nSkip := 0
::nRowPos := 1

DO WHILE lMore
(cAlias)->( dbSkip(-1) )
nSkip ++
lMore := !(cAlias)->(BOF()) .and. nSkip < nRowPos
lSkip := !(cAlias)->(BOF())
ENDDO

::Refresh(lReCount, lReCount )



If lSkip
::Skip(nSkip)
EndIf

::nRowPos := nSkip
::nAt := ::nLogicPos()

::ResetVScroll()

If ::bChange != Nil
Eval( ::bChange, Self, 0 )
EndIf

::lHitTop := ::lHitBottom := .F.

do events
EndIf

RETURN lRet


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




Пост N: 2070
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.09.18 12:14. Заголовок: Игорь, в целом работ..


Игорь, в целом работает, но есть отличия, в твоем варианте удерживается :nRowPos и нижняя часть тсб остается пустой.
Это видно если в примере tsb_seek__2 сделать
(oBrw:cAlias)->( FieldPut( 1, 'Y_'+ProcName()+": "+strzero(nRec, 7) ) )
:nRowPos -> 1 + F2 ==> :nRowPos -> 1 и чисто после введенной строки.

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

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




Пост N: 1352
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.09.18 12:20. Заголовок: SergKis пишет: Это ..


SergKis пишет:

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


Давай какой нить флажок добавим для этого ?

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