On-line: sashaBG, гостей 3. Всего: 4 [подробнее..]
АвторСообщение
модератор




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


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




Пост N: 4824
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.10.25 12:44. Заголовок: gfilatov2002 пишет п..


gfilatov2002 пишет
 цитата:
почему в функции _DoControlEventProcedure() использовано


Дело в том, что не все контролы имеют объект (например, CheckLabel не имеет, перекрылись по месту хранения handle), а усложнять код с объектами не оч. хотелось. Получить объект можно внутри блока кода, через объект окна, т.е. oc := ow:GetObj(cControlName), поэтому i := _ControlObj( _HMG_ThisControlName, _HMG_ThisFormName ) не использовал

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




Пост N: 2507
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.10.25 12:59. Заголовок: SergKis пишет: не в..


SergKis пишет:

 цитата:
не все контролы имеют объект


Понял, принято.
Благодарю за пояснение.

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




Пост N: 4825
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.10.25 21:54. Заголовок: gfilatov2002 пишет п..


gfilatov2002 пишет
 цитата:
принято


С этой правкой получился простой анализ работы с фокусами контролов в блоке, т.е. проверяем на NIL
ON GOTFOCUS {|p1,p2,cnm,ind| p1 := iif( ind == NIL, "Нельзя работать", "Можно работать"), ... } ;
ON LOSTFOCUS {|p1,p2,cnm,ind| p1 := iif( ind == NIL, "Нельзя работать", "Можно работать"), ... }
так же поступаем с фокусами окон
ON GOTFOCUS {|cnm,ind,p1| p1 := iif( ind == NIL, "Нельзя работать", "Можно работать"), ... } ;
ON LOSTFOCUS {|cnm,ind,p1| p1 := iif( ind == NIL, "Нельзя работать", "Можно работать"), ... }

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




Пост N: 8052
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.10.25 15:09. Заголовок: Григорий, как из сво..


Григорий, как из своей программы изменить цвета Program error ?
Я задаю свои функции Alert*() на базе твоих...



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




Пост N: 2508
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.10.25 19:50. Заголовок: Andrey пишет: как и..


Andrey пишет:

 цитата:
как из своей программы изменить цвета Program error


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

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




Пост N: 8053
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.10.25 22:14. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Но, конечно, возможно добавить логику для их задания пользователем.


Сделайте пожалуйста !

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




Пост N: 4828
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.10.25 23:46. Заголовок: gfilatov2002 Положи..


gfilatov2002
Положил ftp предложение по :FilterFTS(...) для массива

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




Пост N: 2509
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.10.25 10:11. Заголовок: SergKis пишет: пред..


SergKis пишет:

 цитата:
предложение по :FilterFTS(...) для массива


OK
Благодарю за помощь

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




Пост N: 4829
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.10.25 20:49. Заголовок: gfilatov2002 положи..


gfilatov2002
положил yf ftp предложение и пример по :FilterFTS(...)

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




Пост N: 4830
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.10.25 21:10. Заголовок: gfilatov2002 Возьми..


gfilatov2002
Возьмите пример еще раз, забыл проверить его на фонты 12, 14, 16 размера

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




Пост N: 4831
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.10.25 21:26. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение добавить в :FilterFTS() улучшить обработку логических полей
 
METHOD FilterFTS_Line( cFind, lUpper, lAll ) CLASS TSBrowse
...
IF lAll .AND. ! HB_ISCHAR( xVal )
IF HB_ISLOGICAL( xVal )
xVal := iif( xVal, ".T.", ".F." )
ELSE
xVal := cValToChar( xVal )
ENDIF

ENDIF
...
и соответственно в :CalcTotal() сделать так же
IF lAll .AND. ! HB_ISCHAR( xVal )
IF HB_ISLOGICAL( xVal )
xVal := iif( xVal, ".T.", ".F." )
ELSE
xVal := cValToChar( xVal )
ENDIF

ENDIF

тогда в примерах ловятся значения поля MARRIED на .t.\.f.

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




Пост N: 2510
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.10.25 21:36. Заголовок: SergKis пишет: Calc..


SergKis пишет:

 цитата:
CalcTotal()


Увы, использование этого метода перемещает указатель на второй элемент массива при нажатии мышкой на пустой Getbox.
Если, убрать вызов :CalcTotal(), то указатель остается на первом элементе массива после отработки метода FilterFTS() .
Можно это поправить

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




Пост N: 4832
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.10.25 22:15. Заголовок: gfilatov2002 пишет М..


gfilatov2002 пишет
 цитата:
Можно это поправить


Заменить ::DrawFooters() на ::Refresh()
 
METHOD CalcTotal(cTotal, cNoTotal, lDraw) CLASS TSBrowse
...
NEXT
//::DrawFooters()
::Refresh(.F.)
DO EVENTS

PS.
Положил на ftp доработанные примеры

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




Пост N: 2511
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.10.25 09:23. Заголовок: SergKis пишет: Поло..


SergKis пишет:

 цитата:
Положил на ftp доработанные примеры


Большое спасибо за оперативность!
Примеры работают нормально.

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




Пост N: 2512
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.10.25 10:43. Заголовок: Всем, кому это интересно...


Выложил новую сборку 25.10

Стандартная версия click here

ПРО-версия (архив под паролем) click here

В эту сборку были добавлены все последние предложения Сергея вместе с поясняющими примерами.

Желаю всем хорошего дня!

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




Пост N: 206
Зарегистрирован: 15.09.05
ссылка на сообщение  Отправлено: 10.10.25 11:07. Заголовок: Вопрос по ООП


Как использовать свою версию метода FilterFTS_Line не трогая библиотеку?
Я не силен в ООП. Хочу сделать поиск по несколькими словами.

У себя я не запускаю фильтр при каждом нажатии клавиши, а при наличии SPACE в конце строки или при нажатии ENTER.

Моя модификация такая:
На примере Tsb_filter помоему работает многословный поиск со знаком .and. между словами.
 
// ============================================================================
// METHOD TSBrowse:FilterFTS_Line() by SergKis
// ============================================================================

METHOD FilterFTS_Line( cFind, lUpper, lAll ) CLASS TSBrowse

LOCAL nCol, oCol, xVal, lRet := .F., n, aFind, lFind
DEFAULT lUpper := .T., lAll := .F.

FOR nCol := 1 TO Len( ::aColumns )
oCol := ::aColumns[ nCol ]
IF nCol == 1 .AND. ::lSelector ; LOOP
ELSEIF ! oCol:lVisible ; LOOP
ELSEIF oCol:lBitMap ; LOOP
ENDIF
xVal := ::bDataEval( oCol, , nCol )
IF lAll .AND. ! HB_ISCHAR( xVal )
xVal := cValToChar( xVal )
ENDIF
IF HB_ISCHAR( xVal )
aFind := hb_ATokens(cFind)
FOR n := 1 TO len(aFind)

IF lUpper
lFind := aFind[n] $ Upper( xVal )
ELSE
lFind := aFind[n] $ xVal
ENDIF
lRet := lFind
IF ! lFind
EXIT
ENDIF
NEXT

IF lRet
EXIT
ENDIF
ENDIF
NEXT

RETURN lRet


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




Пост N: 4833
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.10.25 13:15. Заголовок: sashaBG пишет работа..


sashaBG пишет
 цитата:
работает многословный поиск со знаком .and. между словами


Работает такой вариант, но он учтет и не нужный вариант, например cFind := "Краска белая"
"Краска матовая белая"
"Краска белая"
"Краска ... белая"
"Белая ... краска "
т.е. выбор не совсем тот, что просили, нужно указание разделителя в первых байтах, например, в своих поисках использовал алгоритм, если в 1-ом байте " ", то поиск на вхождение, если нет, то на точное равенство слева заданного. В данном случае можно поступить так же, если 1-ый байт " ", то ваш алгоритм aFind := hb_ATokens( Upper( alltrim(cFind) ) ), иначе, как сейчас

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




Пост N: 4834
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.10.25 18:17. Заголовок: gfilatov2002 Попроб..


gfilatov2002
Попробовал добавить вариант от sashaBG в :FilterFTS с вкл. его алгоритма от наличия первого пробела в cFind, работает.
Сделал Скрытый текст

В примерах Advanced\Tsb_FilterFTS поправил
demo.prg 
...
b2 := {||
Local cVal := Trim( This.Value )
...
demo2.prg
...
oac:oBlk:b_2 := {||
Local cVal := Trim( This.Value )
...

Т.е. поиск в длинном тексте колонки с .and. работает в таком варианте

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




Пост N: 2513
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.10.25 18:54. Заголовок: SergKis пишет: от н..


SergKis пишет:

 цитата:
от наличия первого пробела в cFind, работает


OK
У меня тоже работает. Но теперь надо объяснять пользователям насчет использования первого пробела для поиска в длинных строках.
Это реально сделать

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




Пост N: 4835
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.10.25 19:11. Заголовок: С Clipper87 такая фи..


С Summer87 такая фишка работала (как я писал выше про поиск $ или на ==) и всегда с новой версией все в один голос говорили, что бы это не менял. Так, что даже не знаю, что сказать Но убирается режим легко (на уровне разработчика), в примере, вместо Trim(cVal), ставим AllTrim(cVal)

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

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