On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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: 4530
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.24 13:59. Заголовок: gfilatov2002 пишет Э..


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


Речь скорее о надежности, сам попадался вместо interval 100 ставил 10 и получал сваливание и сразу не поймешь почему.
Вместо переключателя предложил бы сделать _HMG_aFormMiscData1[ k ] := oHmgData() и все массивы, которые есть перенес в объект. Мест для замены не много, даже учитывая примеры. Если это слишком радикально, то сделать _HMG_aFormMiscData1[ k ] := array(6) везде и 6-м элементом сделать oHmgData() (_HMG_aFormMiscData1[ k ] сейчас имеет значения массива от 0 до 5). Если добавить в THmgData метод :DO(...), то получится внутренний псевдо объект, куда можно регистрировать свойства окон и их обработчики, для исп. в Events(...), по мне, это упростило бы многие ситуации. Например, для таймеров, можно их зарегистрировать (имена), поставив disable .F., а в ON INIT по списку включить disabled .T. . Для PAINT можно сразу прописывать блоки кода и в events(...) просто вызывать и т.д. Конечно и _HMG_aFormMiscData2[ k ] := oHmgData() сделал - это удобно, опять же, по мне

 цитата:
Это подстраховка, если библиотека собрана без использования NAMES_LIST (например, для xHarbour).


Надо привести THmgData к одинаково работающему элементу (Hash, Class в xHarbour есть, вызовы, вроде, отличаются) и упростить код

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




Пост N: 7691
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.02.24 18:39. Заголовок: Григорий, а нельзя с..


Григорий, а нельзя сделать в hbmk2.bat ВСЕГДА следующее:
set _PATH=%PATH% 
set PATH=%MG_BCC%\bin;%MG_ROOT%\harbour\bin;%PATH%

echo %MG_ROOT%\
echo %MG_BCC%

rem ***************************************************************************
rem set default GT driver

Чтобы было ВСЕГДА видно какая версия компилируется ?
Я у себя держу на диске C: сразу несколько версий МиниГуи
MiniGUI-23.09.2
MiniGUI-23.10
MiniGUI-23.12
MiniGUI-24.01
Это позволяет быстро переключаться между версиями...
Это из-за проблем Харбора, приходиться тестировать на разных версиях Харбора.

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





Пост N: 234
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 28.02.24 19:12. Заголовок: Благодарность


Наверное Флейм: Григорий - Думаю, твое решение правильное, Время покажет.
Тебе (извини за ТЫ) Огромное спасибо за Твою Работу! 20 лет пользуюсь miniGUI БЛАГОДАРЯ Тебе!
Сергею! Крутой аудитор и со-разработчик проекта! Проект с тобой развился на 200%!
Андрей: Гуру-Тестировщик, задавальщик классных вопросов, PR-manager. Спасибо! Твои ссылки, примеры в моем избранном!
Много других классных - Павел, Дима... Всегда помогали!
Немного эмоционально.

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




Пост N: 4531
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.03.24 11:39. Заголовок: krutoff пишет Всегда..


krutoff пишет
 цитата:
Всегда помогали! Немного эмоционально.


Какой то, грустный пост, как прощание

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




Пост N: 4532
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.03.24 11:41. Заголовок: gfilatov2002 Григори..


gfilatov2002
Григорий, а можно получить unicode версию и ключик от Pro, а то мои версии сильно рассогласовались (unicode 23.07)

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




Пост N: 2290
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.03.24 15:24. Заголовок: SergKis пишет: можн..


SergKis пишет:

 цитата:
можно получить unicode версию


Отправил ссылку в личку
Добавил также предложенные Вами изменения для поддержки JSON кода.

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




Пост N: 4533
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.03.24 17:11. Заголовок: gfilatov2002 Спасиб..


gfilatov2002
Спасибо С трудностями (блокировано все), но забрал.

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




Пост N: 7938
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.03.24 17:41. Заголовок: SergKis пишет: С тр..


SergKis пишет:

 цитата:
С трудностями (блокировано все), но забрал.


Не приходила мысль просто дать Григорию координаты своего FTP ?

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




Пост N: 4534
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.03.24 17:51. Заголовок: Dima пишет Не приход..


Dima пишет
 цитата:
Не приходила мысль просто дать Григорию координаты своего FTP ?


Приходила, но он в подвешенном состоянии, может быть отключен, но ты прав на 100% (фирма продана, а сервер у товарища дома теперь)
PS
В личку положил, Дима, спасибо, пнул в нужном направлении

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




Пост N: 7711
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.03.24 18:34. Заголовок: Обратите внимание на..


Обратите внимание на новую версию МиниГуи !!!
1) Пример \SAMPLES\Advanced\ACHOICE_3 позволяет показывать массив в окне с выбором. 
Синтаксис в программе простой:
aRet := MenuAviAchoice( aMenu )
Есть и более продвинутые показы.
К своему проекту нужно прилинковать модуль util_AviAchoice.prg

2) Пример \SAMPLES\Advanced\ACHOICE_4 позволяет показывать массив в окне с выбором.
Синтаксис в программе простой:
aRet := MenuAchoice( aMenu )
Есть и более продвинутые показы.
К своему проекту нужно прилинковать модуль util_achoice.prg

3) Пример \SAMPLES\BASIC\WAIT_WINDOW_4
Прелодер показа на длительных операциях для AVI файлов
Пробовал в больших проектов, картинка не тормозит и не замирает, работает как часы.
К своему проекту нужно прилинковать модуль WaitWinAvi.prg
Смотреть короткий тест demo3.prg - показ работы с базой и в цикле.


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




Пост N: 7712
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.24 10:18. Заголовок: Как увеличить фонт в..


Как увеличить фонт в окне "Program Error" ?
На большом экране мелко очень.

Да и текст перескакивает на другую строчку.

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




Пост N: 1964
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.03.24 11:31. Заголовок: Andrey пишет: На бо..


Andrey пишет:

 цитата:
На большом экране мелко очень.


Неужели кто то из пользователей это читает?
Правь обработчик ошибок и делай там что хочешь

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




Пост N: 7713
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.24 12:44. Заголовок: Haz пишет: Неужели ..


Haz пишет:

 цитата:
Неужели кто то из пользователей это читает?
Правь обработчик ошибок и делай там что хочешь


Обработчик для юзеров давно сделан.
У меня на экране такое для тестовых программ.
Глаза сломаешь, пока прочитаешь это.
Экран большой, окно ошибки слишком маленькое....

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




Пост N: 4544
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.03.24 12:55. Заголовок: Andrey пишет Глаза с..


Andrey пишет
 цитата:
Глаза сломаешь, пока прочитаешь это.


Смысл это читать в чем ?
Окно topmost, т.е. посмотреть ошибку (допустим прочитал) не удобно в редакторе (он под этим окном)
Смотри ErrorLog.htm сразу

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




Пост N: 7714
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.24 13:04. Заголовок: SergKis пишет: Смот..


SergKis пишет:

 цитата:
Смотри ErrorLog.htm сразу


Да так и делаю...
Но хотелось бы починить фонт в окне "Program Error" ?

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




Пост N: 2297
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.03.24 13:13. Заголовок: Andrey пишет: Как у..


Andrey пишет:

 цитата:
Как увеличить фонт в окне "Program Error" ?


Добавь при инициализации программы команду

 цитата:
Set ShowRedAlert On



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




Пост N: 4545
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.03.24 13:14. Заголовок: Andrey пишет Но хоте..


Andrey пишет
 цитата:
Но хотелось бы починить фонт в окне "Program Error" ?


Чини https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messageboxindirecta
она в основе MsgStop(...)

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




Пост N: 7715
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.24 13:40. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Добавь при инициализации программы команду
Set ShowRedAlert On


Классно ! То что надо !
Только кнопка обрезана.
Поправь пожалуйста для следующих версий.


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




Пост N: 2298
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.03.24 11:11. Заголовок: Всем кому это интересно


Выложил финальную сборку 24.03 с последними исправлениями и дополнениями.

Стандартная сборка

Благодарю Сергея Киселева за помощь при подготовке этой сборки

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

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




Пост N: 2299
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.03.24 15:35. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Выложил финальную сборку 24.03


Также вы можете скачать платную версию, для которой понадобится пароль, чтобы распаковать 7z архив, по адресу:

Профессиональная версия

Я подготовил две частные сборки для компилятора MinGW (32- и 64-бит):


 цитата:
MinGW GNU C 13.2.0 (packaged on 2024-03-10).

Components versions:
--------------------

Harbour MiniGUI Extended Edition 24.03 (Release)

Harbour 3.2.0dev (r2403071241)

Harbour Make (hbmk2) 3.2.0dev (r2024-03-07 12:41)
-------------------------------------------------


Эти сборки содержат обновленную версию библиотеки SQLRDD и рабочий пример доступа к базам MySQL.
Они доступны для всех, кто поддерживает этот проект материально.

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




Пост N: 4546
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.03.24 11:56. Заголовок: gfilatov2002 Неболь..


gfilatov2002
Небольшая правка (для типа "D" тащится "чужой" cPicture)
 
METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse
...
cType := aStru[ nE, 2 ]
IF ( nType := AScan( aAdsType, {| e | e[ 1 ] == cType } ) ) > 0
cType := aAdsType[ nType, 2 ]
ENDIF
cPicture := NIL

IF cType == "C"
cPicture := "@K " + Replicate( 'X', aStru[ nE, 3 ] )
...


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




Пост N: 2300
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.03.24 12:18. Заголовок: SergKis пишет: Небо..


SergKis пишет:

 цитата:
Небольшая правка


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

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




Пост N: 7716
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.03.24 12:25. Заголовок: Григорий, а в новой ..


Григорий, а в новой версии что-то нет примеров Menu_3 и Menu_4 и Alert_demo ?

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




Пост N: 7717
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.03.24 19:35. Заголовок: Функция AlertInfo() ..


Функция AlertInfo()
Если строка большая, то окно по ширине от 0 до конца экрана !
Некрасиво очень
Можно задать ограничения по ширине ?
Хотя бы 0.75 ширины экрана.
Везде вставлять код через bInit удовольствия мало...

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




Пост N: 2302
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.04.24 17:23. Заголовок: Всем кому это интересно


Добавил реальное использование многопоточности в утилиту сборки проектов hbmk2.
По умолчанию количество потоков присваивается равным количеству процессоров в системе.

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

Если у вас есть мысли по этому поводу, то я с удовольствием прочту ваши комментарии.

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




Пост N: 4547
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.04.24 19:57. Заголовок: gfilatov2002 пишет Н..


gfilatov2002 пишет
 цитата:
На первый взгляд, это ускоряет компиляцию проектов за счет многопоточности.


По мне, многопоточность сборки не главный критерий hbmk2, она сама как то подрабатывает (сборка не стабильна), что приходится делать в bat
 
@echo off
SET P=demo2
if exist _MsgLog.txt del _MsgLog.txt > nul
if exist ErrorLog.htm del ErrorLog.htm > nul
if exist .\obj\%P%.res del .\obj\%P%.res > nul
if exist .\obj\%P%.obj del .\obj\%P%.obj > nul
call ..\..\..\batch\hbmk2.bat %* %P%.hbp

Ускорение сборок происходит, опять же по мне, с использованием lib, т.е. проект делим на части (модули) вынося весь функционал в prg без function Main(), так и отлаживать проще. hbmk2 создает подкаталог OBJ с файлами *.obj. Завершив отладку, удаляем obj, содержащий Function Main() из остальных создаем lib и в дальнейшем исп. ее в других частях проекта. hbmk2 отслеживает измененные prg и создает obj только для них.

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




Пост N: 7721
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.04.24 18:27. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
На первый взгляд, это ускоряет компиляцию проектов за счет многопоточности.


А насколько ускоряет ?
Как можно у себя проверить ?

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


Пост N: 1723
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 03.04.24 20:02. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Если у вас есть мысли по этому поводу


Потоки должны работать таким образом, чтобы нагрузка была распределена равномерно. Чтобы не было потоков, которые закончили работу, но вынуждены ожидать завершения других потоков. Это может только ухудшить ситуацию. Как заранее предугадать - не знаю))

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




Пост N: 2303
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.04.24 11:04. Заголовок: PSP пишет: Потоки д..


PSP пишет:

 цитата:
Потоки должны работать таким образом, чтобы нагрузка была распределена равномерно.


Благодарю за ваши отклики.

Я только восстановил режим многопоточности в утилите hbmk2, который был в ней отключен по причине несовместимости с различными Си-компиляторами. Поскольку меня интересовала многопоточность только для компилятора BCC, я решил проверить эту возможность только для него. Судя по максимальной загрузке всех ядер процессора, этот режим сейчас рабочий. Если используется один поток, то загрузка ядер составляет около 30% для каждого ядра.

Andrey пишет:

 цитата:
Как можно у себя проверить ?


Модифицированная утилита и ее исходники будут включены в следующую профессиональную сборку.

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




Пост N: 2304
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.04.24 18:54. Заголовок: Всем кому это интересно


Выложил Borland/Embarcadero C++ 7.7 (32-bit) по адресу:

Скачать

Ваши комментарии приветствуются...

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




Пост N: 7941
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.04.24 16:02. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Ваши комментарии приветствуются


Brc32.exe от древней версии и не 7.7

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




Пост N: 2305
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.04.24 16:19. Заголовок: Dima пишет: Brc32.e..


Dima пишет:

 цитата:
Brc32.exe от древней версии


Да, верно.
Этот компилятор ресурсов не изменялся очень давно.
Если есть в наличие более свежая версия, то файл - в студию...

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




Пост N: 2306
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.04.24 10:11. Заголовок: Опубликована финальн..


Опубликована финальная сборка 24.04 с последними исправлениями и дополнениями.

Стандартная сборка

Благодарю Сергея Киселева за помощь при подготовке этой сборки

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

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




Пост N: 2314
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.05.24 14:23. Заголовок: Всем кому это интересно


Поскольку 7 мая вышло важное обновление компилятора MinGW 14.1 (последнее такое обновление 13.1 было ровно год назад), то я успешно протестировал текущую Минигуи сборку для работы с этим компилятором (32/64 бита).

Результаты теста представлены на картинках ниже.





Благодарю за ваше внимание.

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




Пост N: 2315
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.05.24 14:08. Заголовок: Всем кому это интересно...


Завершена подготовка новой сборки 24.05, которая будет опубликована на следующей неделе.

Что нового:
- исправление обнаруженных ошибок;
- добавлена штатная возможность изменения текста пунктов меню

 цитата:
Form.MenuName.Caption := cNewValue
Form.MenuName.Caption --> cNewValue


- Split Button теперь поддерживает установку иконки;
- цвет Label теперь можно устанавливать с использованием чисел, а не только массива {r,g,b};
- некоторые псевдо-функции переведены обратно в полноценные функции для использования в пользовательских скриптах (размер заголовка i_pseudofunc.ch при этом уменьшился вдвое);
- обновлена функция

 цитата:
HMG_FileCopy( <cSourceFile>, <cTargetFile>, [<nBuffer>], [<bEval>] )
--> lSuccess

с использованием возможностей последней версии Харбора (только PRO версия);
- добавлены полные тексты следующих программ для использования баз данных на сервере MySQL

 цитата:
* New: 'xBase Package 2024' examples: using MySQL through the TMySql class.
* School (registration, cources, finance)
* Football School (using DBFCDX)
* Real estate (Leasing)
* Meter (small restaurants)
* Service Order
* SysFood (food companies)
* CRUD (create, read, update and delete) example with MySQL
Note. You will need a fully working MySQL server installation and
the correct connection parameters.
Contributed by Marcelo Neves
(see in folder \samples\Applications\pacote_xbase) [PRO VERSION]


- и т.д.

Благодарю Сергея Киселева за помощь при подготовке этой сборки

Желаю всем хороших выходных.

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




Пост N: 2316
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.05.24 09:41. Заголовок: Опубликована новая с..


Опубликована новая сборка 24.05 с последними исправлениями и дополнениями.

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

Про-версия (защищена паролем)

Также для доноров проекта доступны сборки для последнего BCC 7.70 (32-bit) и MinGW GNU C 14.1.0 (packaged on 2024-05-08).

По просьбе Андрея Верченко в эту сборку добавлены два его новых примера:
- Basic\ToolBarEx_3;
- Advanced\Tsb_oHmgData.

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

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




Пост N: 7759
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.24 06:32. Заголовок: Примеры demo.exe и d..


Примеры demo.exe и demo2.exe из MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData
Я их собирал и тестировал на версии MiniGUI 23.09.2 - работают отлично.
Если собрать их с помощью НОВОЙ версии, то при запуске вылазит окно с ДОБАВЛЕНИЕМ записи
и в папке организуются ещё 2 файла: checkres.txt и checkstatic.txt
Почему ? Это так и должно быть ?

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




Пост N: 2317
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.05.24 10:39. Заголовок: Andrey пишет: Если ..


Andrey пишет:

 цитата:
Если собрать их с помощью НОВОЙ версии, то при запуске вылазит окно с ДОБАВЛЕНИЕМ записи


Проверь содержание файла _msg.log: при запуске программы там есть строка вызова функции RECNOINSERT():

 цитата:
======= MYTSBEDIT SELECTOR .OR. ORDKEYNO = 2 nO= 1 1 nP= 1
>>> MYTSBEND(1299) => demo_tsb.prg cMaska= input 16.03.24 Ivanova
----- SCOPE ---- [INPUT 16.03.24 IVANOVA ] 60 .F.
INDEXORD()= 3 DOCDTV NIL
oBrw:Cargo:cMaska= [input 16.03.24 Ivanova] 22
App.Cargo:oIni:MAIN:cMaska= [input 16.03.24 Ivanova] 22
RECNOINSERT(): oWnd: wMain 11 _RecIns TSBROWSE
########## _ItogGet >>> (b)MAIN(129) => demo.prg INDEXORD()= 3 DOCDTV


Andrey пишет:

 цитата:
в папке организуются ещё 2 файла: checkres.txt и checkstatic.txt


Все верно: при выходе из программы создаются отладочные файлы, поскольку при сборке использована СТАНДАРТНАЯ версия библиотеки, которая является ОТЛАДОЧНОЙ.
Кстати, наличие файла checkres.txt указывает на наличие утечки ресурсов в программе. В противном случае этот файл НЕ создается.
Файл checkstatic.txt при отладке создается всегда, он содержит типы и значения всех использованных статических переменных.

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




Пост N: 2318
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.05.24 14:25. Заголовок: Дополнение


Andrey пишет:

 цитата:
при запуске вылазит окно с ДОБАВЛЕНИЕМ записи


Вылечил с помощью добавления следующей команды

 цитата:
SET AUTOSCROLL OFF


в процедуру Sets_ENV().

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




Пост N: 7760
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.24 17:23. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Вылечил с помощью добавления следующей команды


Спасибо БОЛЬШОЕ !

gfilatov2002 пишет:

 цитата:
Кстати, наличие файла checkres.txt указывает на наличие утечки ресурсов в программе. В противном случае этот файл НЕ создается.


Как понять/расшифровать это ?
Вроде в коде делаю правильно, или нет ???
Как правильно сделать ???

Вот в checkres.txt следующее:
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- ICON,209389999,MAIN(73) 
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- ICON,209389999,MAIN(73)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- ICON,366216997,MAIN(73)
Код программы:
// верхнее меню окна
myToolBar(owc) // <<<---- строка 73

И что тут за потеря ?

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




Пост N: 7761
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.05.24 18:52. Заголовок: Убрал из примера HB_..


Убрал из примера HB_FUNC( DESTROYICON) - модуль demos_util.prg
Теперь в checkres.txt следующее:
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,84219576,COLUMN_TSB(136)->MAIN(91) 
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,84219576,COLUMN_TSB(136)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,117774005,COLUMN_TSB(136)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,84219576,COLUMN_TSB(136)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,117774005,COLUMN_TSB(136)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,67442359,COLUMN_TSB(136)->MAIN(91)
.... и т.д.
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,67442359,COLUMN_TSB(136)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,50665150,COLUMN_TSB(140)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,33887935,COLUMN_TSB(140)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,33887936,COLUMN_TSB(140)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,33887937,COLUMN_TSB(140)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,33887938,COLUMN_TSB(140)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,33887939,COLUMN_TSB(140)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,33887940,TSBROWSE:NEW(1560)->_DEFINETBROWSE(314)->_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,1242568359,TSBROWSE:SETCOLOR(13377)->TSBROWSE:NEW(1660)->_DEFINETBROWSE(314)->_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,1024464538,_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,17110726,(b)MAIN(96)->_TBROWSE(572)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,1997543076,(b)MAIN(98)->_TBROWSE(579)->MAIN(102)

Размер checkres.txt - 11158 байт
И как его сокращать/убирать утечку памяти ?

Вот у себя в коде нашёл незакрытый хендл
   FOR nI := 1 TO LEN(aImg) 
hIco := LoadIconByName( aImg[nI], nHImg, nHImg )
hBmp := BmpFromIcon( hIco ) // вернет хендл bmp
cFile := cPath + aImg[nI] + ".png"
HMG_SaveImage( hBmp, cFile, "png" )
....

Как его убить ?

А что делать с этим ?
     BMP,33887940,TSBROWSE:NEW(1560)->_DEFINETBROWSE(314)->_TBROWSE(559)->MAIN(102)


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




Пост N: 4576
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.05.24 20:21. Заголовок: Andrey пишет Как его..


Andrey пишет
 цитата:
Как его убить ?


DeleteObject( hBmp )

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




Пост N: 7762
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.05.24 00:54. Заголовок: Размер checkres.txt ..


Размер checkres.txt уменьшился до 11285 (было 11158) байт
Остались тоже самое:
 
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,-234549685,COLUMN_TSB(136)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,-234549685,COLUMN_TSB(136)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,1627723450,COLUMN_TSB(136)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,-234549685,COLUMN_TSB(136)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,1627723450,COLUMN_TSB(136)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,2080708307,COLUMN_TSB(136)->MAIN(91)
...
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,-184215828,COLUMN_TSB(140)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,486872819,TSBROWSE:NEW(1560)->_DEFINETBROWSE(314)->_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,1511003877,TSBROWSE:SETCOLOR(13377)->TSBROWSE:NEW(1660)->_DEFINETBROWSE(314)->_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,890246898,_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,1308956330,(b)MAIN(96)->_TBROWSE(572)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,1343231766,(b)MAIN(98)->_TBROWSE(579)->MAIN(102)

Ну и как дальше бороться с утечкой памяти ?

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




Пост N: 7763
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.05.24 13:42. Заголовок: C:\MiniGUI_24.05..


C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,-184215828,COLUMN_TSB(140)->MAIN(91)  
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,486872819,TSBROWSE:NEW(1560)->_DEFINETBROWSE(314)->_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,1511003877,TSBROWSE:SETCOLOR(13377)->TSBROWSE:NEW(1660)->_DEFINETBROWSE(314)->_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,890246898,_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,1308956330,(b)MAIN(96)->_TBROWSE(572)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,1343231766,(b)MAIN(98)->_TBROWSE(579)->MAIN(102)

У меня большая система, чистку памяти делаю ври входе и выходе в TBROWSE, но всё равно прога ПЕРИОДИЧЕСКИ падает после 4-5 часов работы.
Юзер постоянно открывает, то одну/другую/третью/четвертую таблицу.
Связано ли это с утечкой памяти в TBROWSE ?
Очистку от хендов иконок сделал уже.

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




Пост N: 2319
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.05.24 14:10. Заголовок: Andrey пишет: C: ..


Andrey пишет:

 цитата:
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,-184215828,COLUMN_TSB(140)->MAIN(91)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,486872819,TSBROWSE:NEW(1560)->_DEFINETBROWSE(314)->_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,1511003877,TSBROWSE:SETCOLOR(13377)->TSBROWSE:NEW(1660)->_DEFINETBROWSE(314)->_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,890246898,_TBROWSE(559)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BMP,1308956330,(b)MAIN(96)->_TBROWSE(572)->MAIN(102)
C:\MiniGUI_24.05\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,1343231766,(b)MAIN(98)->_TBROWSE(579)->MAIN(102)


Эти ресурсы должны очищаться с помощью метода Destroy() в классе TSBROWSE.
Но этот метод НЕ срабатывает, поскольку TBROWSE не получает от системы сообщение WM_DESTROY.
Я попытался сделать этот метод деструктором класса, но он все равно НЕ отрабатывает.
Сейчас ищу другой способ запустить этот метод на выполнение призакрытии окна, которое содержит элемент управления TBROWSE.

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




Пост N: 4577
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.05.24 15:01. Заголовок: gfilatov2002 пишет С..


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


Так должен срабатывать цикл WM_DESTROY окна, т.е.
 
****************************************************************************
CASE WM_DESTROY
****************************************************************************

i := AScan ( _HMG_aFormHandles , hWnd )

IF i > 0

#ifndef __XHARBOUR__
// Remove All HMG_* Properties
IF Len( EnumProps( hWnd ) ) > 0
EnumPropsEx( hWnd, {|hWnd, cPropName, hHandle| HB_SYMBOL_UNUSED( hHandle ), ;
iif( hb_LeftEqI( cPropName, "HMG_" ), RemoveProp( hWnd, cPropName ), Nil ), .T. } )
ENDIF
#endif
// Remove Child Controls
FOR EACH r IN _HMG_aControlParentHandles
IF r == hWnd
x := hb_enumindex ( r )
IF _HMG_aControlType [x] == "MESSAGEBAR"
_ReleaseControl ( "StatusBar" , GetParentFormName( x ) )
ELSE
_EraseControl ( x , i )
ENDIF
ENDIF
NEXT

...

_HMG_aControlType[ k ] := "TBROWSE"
_HMG_aControlNames[ k ] := ControlName
_HMG_aControlHandles[ k ] := ControlHandle
_HMG_aControlParenthandles[ k ] := ParentFormHandle
_HMG_aControlIds[ k ] := oBrw
...
имеем, значит имеем и _HMG_aControlIds[ k ]:Destroy()

PS. Добавить в _EraseControl ( i, p ) обработку CASE t == 'TBROWSE'


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




Пост N: 2320
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.05.24 16:23. Заголовок: SergKis пишет: Доба..


SergKis пишет:

 цитата:
Добавить в _EraseControl ( i, p ) обработку CASE t == 'TBROWSE'


Да, так получилось сделать
Уже намного лучше.
Но осталось удалить BRUSH, который создается в методе SetColor() класса TControl

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




Пост N: 4578
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.05.24 16:41. Заголовок: gfilatov2002 Но оста..


gfilatov2002
 цитата:
Но осталось удалить BRUSH, который создается в методе SetColor() класса TControl


FUNCTION _DefineTBrowse добавил
 
IF HB_ISARRAY( aBrush ) .AND. Len( aBrush ) > 2
IF oBrw:hBrush != NIL
DeleteObject( oBrw:hBrush )
ENDIF

oBrw:hBrush := CreateSolidBrush( aBrush[ 1 ], aBrush[ 2 ], aBrush[ 3 ] )
ENDIF
/* BK end */
...
METHOD Enabled( lEnab ) CLASS TSBrowse
...
DeleteObject( ::hBrush )

::hBrush := CreateSolidBrush( GetRed( ::nClrPane ), GetGreen( ::nClrPane ), GetBlue( ::nClrPane ) )
IF ::lSelector .AND. ::lDrawSpecHd
::nClrSpcHdBack := ::nCLR_HGRAY
ENDIF

ELSE
...
но с ::hBrush не все понятно, т.к. есть места TControl.prg без DeleteObject( ::hBrush ) как пример
METHOD Colors( hDC ) CLASS TControl

DEFAULT ::nClrText := GetTextColor( hDC ), ;
::nClrPane := GetBkColor( hDC ), ;
::hBrush := CreateSolidBrush( GetRed( ::nClrPane ), GetGreen( ::nClrPane ), GetBlue( ::nClrPane ) )

SetTextColor( hDC, ::nClrText )
SetBkColor( hDC, ::nClrPane )

RETURN ::hBrush
Если поискать "CreateSolidBrush" в prg, то есть и др. места ...

PS. Если взять простой вариант окна MDI, то тоже остается BRUSH не освобожденный
DEFINE WINDOW &cForm AT nY, nX WIDTH nW HEIGHT nH TITLE om:cTitle ;
MINWIDTH nWm MINHEIGHT nHm ;
MAIN MDI TOPMOST ;
BACKCOLOR cBClr ;
ON INIT _wPost( 0) ;
ON RELEASE _wSend(90) ;
ON INTERACTIVECLOSE ( _wSend(98), This.Cargo:lClose )
This.Cargo := oHmgData() ; oMain := This.Object

This.Cargo:lClose := .T.
...
END WINDOW

IF lCenter ; CENTER WINDOW &cForm
ENDIF

ACTIVATE WINDOW &cForm

RETURN NIL


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




Пост N: 2321
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.05.24 17:09. Заголовок: SergKis пишет: FUNC..


SergKis пишет:

 цитата:
FUNCTION _DefineTBrowse добавил


Спасибо за помощь!

Сейчас остался не удаленным только один BRUSH

 цитата:
c:\minigui\SAMPLES\Advanced\Tsb_oHmgData\demo.exe -- BRUSH,-904917253,_TBROWSE(559)->MAIN(102)



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




Пост N: 4579
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.05.24 17:30. Заголовок: gfilatov2002 пишет С..


gfilatov2002 пишет
 цитата:
Сейчас остался не удаленным только один BRUSH


С ним, пока и не понятно, т.к. _TBROWSE(559) ->
DEFINE TBROWSE &cBrw OBJ oBrw AT nY, nX WIDTH nW HEIGHT nH CELL ;
...
BRUSH aBrush ;
...
т.е. это
FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ;
...
и дальше параметр aBrush смотрим

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




Пост N: 7764
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.05.24 22:20. Заголовок: Вопрос по теме удале..


Вопрос по теме удаления хендлов.
Если я делаю так
      LOCAL oBrw, oTsb 
....
// построение таблицы
oTsb := oHmgData()
...
oTsb:aBmp1 := { {"bMinus32", "bZero32", "bPlus32"} ,;
{ LoadImage("bMinus32"), LoadImage("bMinus32"), LoadImage("bMinus32")} ,;
, {||блок кода смены картинки}, ... }
....
// --------- хранилище картинок, удаляется после закрытия объекта автоматом ------
:aBitMaps := { Nil, LoadImage("bRecDel16") }

:aColumns[2]:aBitMaps := oTsb:aBmp1[2]
:aColumns[2]:uBmpCell := oTsb:aBmp1[3] // там далее смена картинки по алгоритму в myLoadBmpTsb(...)
....

То нафига НУЖНО удалять хендлы из oTsb:aBmp1 если эта переменная LOCAL и
после закрытия этой функции переменная oTsb удалиться ?????
Или я чего то не знаю ?

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




Пост N: 7765
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.05.24 16:16. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Сейчас остался не удаленным только один BRUSH


Как успехи ?
У меня в примере в файле checkres.txt (695 байт) остался BRUSH.
А внешней командой можно удалить BRUSH при закрытии окна ?

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




Пост N: 4581
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.05.24 07:58. Заголовок: gfilatov2002 hmg-24..


gfilatov2002
hmg-24.05 Исправил (строки //!!!) Скрытый текст

Сборка примера Advanced\Tsb_oHmgData\demo.prg дает (OBJ удалил)Скрытый текст

Беру версию hmg-24.04, повторяю правки, пересобираю примеры Advanced\Tsb_oHmgData -> все OK!

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




Пост N: 2322
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.05.24 12:58. Заголовок: SergKis пишет: hmg-..


SergKis пишет:

 цитата:
hmg-24.05 Исправил


Большое спасибо!

Я уже исправил эту утечку ресурсов похожим кодом.
Заодно поправил код в классе TGetBox, чтобы освобождались ресурсы при выходе из режима редактирования полей.

Не очень понятна необходимость присваивать

 цитата:
::hBrush := NIL //!!!


если в следующей строке кода мы снова назначаем

 цитата:
::hBrush := CreateSolidBrush( GetRed( ::nClrPane ), GetGreen( ::nClrPane ), GetBlue( ::nClrPane ) )



У меня происходит освобождение ресурсов и без этой строки

 цитата:
::hBrush := NIL //!!!




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




Пост N: 4582
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.05.24 13:07. Заголовок: gfilatov2002 пишет У..


gfilatov2002 пишет
 цитата:
У меня происходит освобождение ресурсов и без этой строки


 
If ::hBrush != nil
DeleteObject( ::hBrush ) // Alen Uzelac 13.09.2012
::hBrush := NIL //!!!
DoEvents() //!!!

EndIf

Без выделенной строки сообщение BRUSH из txt файла не уходило, сделав DoEvents(), условную задержку,
все стало работать. Поставил везде ::hBrush := NIL, как вариант принудительного сброса адреса и выполненных
доп. команд.

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




Пост N: 4583
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.06.24 12:55. Заголовок: gfilatov2002 Поправи..


gfilatov2002
Поправил в тсб Скрытый текст


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




Пост N: 2323
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.06.24 14:42. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправил в тсб


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

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




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


gfilatov2002 пишет
 цитата:
начались проблемы с цветом заголовков и подвала - везде черный цвет.


1. добавить проверку входного массива
 
IF HB_ISARRAY( aColors ) .AND. Len( aColors ) > 0
IF HB_ISARRAY( aColors[ 1 ] )
FOR EACH aClr IN aColors
IF HB_ISNUMERIC( aClr[ 1 ] ) .AND. aClr[ 1 ] > 0 .AND. aClr[ 1 ] <= Len( aTmpColor )
IF aClr[ 2 ] != NIL
aTmpColor[ aClr[ 1 ] ] := aClr[ 2 ]
ENDIF

ENDIF
NEXT
ELSE
AEval( aColors, {| bColor, nEle | iif( bColor != NIL, aTmpColor[ nEle ] := bColor, )} )

//AEval( aColors, {| bColor, nEle | aTmpColor[ nEle ] := bColor } )
ENDIF
ENDIF

2. входной массив формировать
FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ;
...
LOCAL aTmpColor := Array( 0 ), aClr
...
IF Type( '_TSB_aControlhWnd' ) != 'A'
PUBLIC _TSB_aControlhWnd := {}, _TSB_aControlObjects := {}, _TSB_aClientMDIhWnd := {}
ENDIF

IF HB_ISARRAY( aColors ) .AND. Len( aColors ) > 0
/*
IF HB_ISARRAY( aColors[ 1 ] )
FOR EACH aClr IN aColors
IF HB_ISNUMERIC( aClr[ 1 ] ) .AND. aClr[ 1 ] > 0 .AND. aClr[ 1 ] <= Len( aTmpColor )
aTmpColor[ aClr[ 1 ] ] := aClr[ 2 ]
ENDIF
NEXT
ELSE
AEval( aColors, {| bColor, nEle | aTmpColor[ nEle ] := bColor } )
ENDIF
*/
aTmpColor := aColors
ENDIF

IF ValType( fontcolor ) != "U"
AAdd( aTmpColor, {{ 1, RGB( fontcolor[ 1 ], fontcolor[ 2 ], fontcolor[ 3 ] ) }} )
//aTmpColor[ 1 ] := RGB( fontcolor[ 1 ], fontcolor[ 2 ], fontcolor[ 3 ] )
ENDIF

IF ValType( backcolor ) != "U"
AAdd( aTmpColor, {{ 2, RGB( backcolor[ 1 ], backcolor[ 2 ], backcolor[ 3 ] ) }} )
//aTmpColor[ 2 ] := RGB( backcolor[ 1 ], backcolor[ 2 ], backcolor[ 3 ] )
ENDIF

IF Empty( aTmpColor ) ; aTmpColor := NIL
ENDIF
...

Сейчас задание цветов входным параметром массива надо подправлять методом :SetColor()

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




Пост N: 2324
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.06.24 13:05. Заголовок: SergKis пишет: доба..


SergKis пишет:

 цитата:
добавить проверку входного массива


Пошел по этому пути, вроде отрабатывает нормально.
Благодарю за помощь

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




Пост N: 2325
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.06.24 15:42. Заголовок: Завершена подготовка..


Завершена подготовка новой сборки 24.06, которая будет опубликована на следующей неделе.

Что нового:
- исправление обнаруженных ошибок;
- добавлена новая функция HMG_GetUniqueName( [<NamePrefix>] ) и идентификатор пустого имени NUL для создания элемента управления без необходимости указания его имени (удобно, например, для безымянных меток Label);
- важное обновление библиотеки TSBrowse (спасибо, Сергей!)
- обновлены Харбор, библиотеки SqlRdd, PdfPrinter и Sqlite3;
- добавлены новые и обновлены старые примеры для демонстрации новых возможностей библиотеки.

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

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




Пост N: 7772
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.06.24 14:37. Заголовок: В функциях Alert*() ..


В функциях Alert*() наверное нужно сделать запоминание/возврат текущего окна и сохранения среды This
Я сталкивался с проблемами при показе простого сообщения.
Приходиться делать так:
         .... 
_SetThisFormInfo(oWnd)
AlertStop(cMsg) // или вызов другого окна
_SetThisFormInfo()
.....

Пример отправил на почту.

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




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


Опубликована финальная сборка 24.06

Стандартная сборка

Профессиональная сборка (под паролем)

Также были подготовлены дополнительные сборки для следующих компиляторов:

- MinGW GNU C 14.1.0 (packaged on 2024-05-08)

- BCC 7.70 (32-bit) (основан на коде Борланда)

- BCC 7.70 (64-bit) (основан на CLang 5.0)

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

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




Пост N: 2327
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.06.24 12:50. Заголовок: Всем кому это интересно ;-)


Продолжаем хорошие новости...

Протестировал текущую сборку Минигуи со свежей сборкой разрабатываемой версии компилятора MinGW 15.0 (64-bit).
Результат можно увидеть на картинке ниже.



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





Пост N: 240
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 25.06.24 11:29. Заголовок: Начались проблемы с цветом заголовков


У меня один TSBrowse вызывает несколько десятков броузов.
Работает один блок создания экземпляра TSBrowse.
С версии 24.03 в каждом экземляре цвет заголовка и Background стал меняться.
Откатился на верию 24.01 - цвета отработали нормально..

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




Пост N: 7774
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.24 12:05. Заголовок: krutoff пишет: С ве..


krutoff пишет:

 цитата:
С версии 24.03 в каждом экземляре цвет заголовка и Background стал меняться.


Поставил сегодня 24.06, собрал свою большую прогу - цвет фона таблицы стал другим !
У меня в коде так:
         DEFINE TBROWSE oBrw ...              ; 
BACKCOLOR aBackColor ;
...

В примере Tsb_oHmgData в новой версии цвет фона таблицы тоже меняется !
Сделал в старой 23.12 фон нормальный.

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




Пост N: 4590
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.06.24 13:20. Заголовок: krutoff пишет С верс..


krutoff пишет
 цитата:
С версии 24.03 ...


Andrey пишет
 цитата:
в старой 23.12 фон нормальный


Была исправлена многолетняя ошибка в тсб (METHOD New) задания цветов параметром
 
DEFINE TBROWSE oBrw ... ;
BACKCOLOR aBackColor
FONTCOLOR aFontColor ;
COLOR aColors
;

Если посмотрите код, то была в массив aTmpColor сначала установка из элементов параметра команды, а потом делались Default-ы на все элементы aTmpColor, потом менялись принудительно др. элементы, например
 
IF lAutoFilter
aTmpColor[ 19 ] := GetSysColor( COLOR_INACTCAPTEXT )
ELSEIF lAutoSearch
aTmpColor[ 19 ] := GetSysColor( COLOR_INFOBK )
ENDIF

т.е. затиралась установка из массва параметра команды тсб. Приходилось всегда править цвета доп. методами :SetColor(...)
Правка коснулась перестановкой действий, сначала в массиве aTmpClor заполняются цвета по умолчанию (все элементы), потом команды IF lAutoFilter ... (см. выше) и потом из параметров команды тсб переносятся значения указанных\заданных элементов.
Код стал такой Скрытый текст


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




Пост N: 7775
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.24 15:38. Заголовок: SergKis пишет: Была..


SergKis пишет:

 цитата:
Была исправлена многолетняя ошибка в тсб (METHOD New) задания цветов параметром


Так как исправить/задать заново фон ТСБ ?

P.S. Поставил так, всё равно не работает !!!
      // цвет фона под таблицей 
IF MGVersNumba() >= 231202 // MG Version 23.12.02
:hBrush := aClrBrush
ELSE
DeleteObject(:hBrush)
:hBrush := CreateSolidBrush(aClrBrush[1], aClrBrush[2], aClrBrush[3])
ENDIF


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




Пост N: 4591
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.24 18:51. Заголовок: Кто нибудь может объ..


Кто нибудь может объяснить такую херомантию с цветами SpecHd ?
Имеем в
 
METHOD New( cControlName, nRow, nCol, nWidth, nHeight, bLine, aHeaders, aColSizes, cParentWnd, ;
...
aTmpColor[ 18 ] := GetSysColor( COLOR_BTNTEXT ) // nClrSpecHeadFore
aTmpColor[ 19 ] := GetSysColor( COLOR_BTNFACE ) // nClrSpecHeadBack
...
IF lAutoFilter
aTmpColor[ 19 ] := GetSysColor( COLOR_INACTCAPTEXT )
ELSEIF lAutoSearch
aTmpColor[ 19 ] := GetSysColor( COLOR_INFOBK )
ENDIF
...
::aColors := aTmpColor
...
в TSColumn еще краше
METHOD DefColor( oBrw, aTmpColor ) CLASS TSColumn
...
IF oBrw == NIL
...
ELSE
...
aTmpColor[ 17 ] := oBrw:nClrHeadBack, ;
aTmpColor[ 20 ] := oBrw:nClrSpcHdActive

IF oBrw:lEnum
DEFAULT aTmpColor[ 18 ] := oBrw:nClrHeadFore, ;
aTmpColor[ 19 ] := oBrw:nClrHeadBack
ELSE
DEFAULT aTmpColor[ 18 ] := oBrw:nClrEditFore, ;
aTmpColor[ 19 ] := oBrw:nClrEditBack
ENDIF

ENDIF
...
::nClrSpcHdFore := aTmpColor[ 18 ]
::nClrSpcHdBack := aTmpColor[ 19 ]
...
получается, что нет нормального задания цвета для спец. header, т.е. задаем
...
AAdd( aColors, { CLR_EDITF , {|| CLR_RED } } ) // 7 , текста редактируемого поля
AAdd( aColors, { CLR_EDITB , {|| CLR_YELLOW } } ) // 8 , фона редактируемого поля
...
AAdd( aColors, { CLR_SPCF , {|| CLR_RED } } ) // 18, specheader text
AAdd( aColors, { CLR_SPCB , {|| CLR_GRAY } } ) // 19, specheader back
...

В итоге получаем цвет спец. header от CLR_EDITF и CLR_EDITB, что не правильно.

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




Пост N: 7776
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.06.24 16:16. Заголовок: Если задаём цвет фон..


Если задаём цвет фона под таблицей ТОЛЬКО так:
   DEFINE TBROWSE &cBrw OBJ oBrw OF &cForm           ; 
AT oTsb:nY, oTsb:nX ALIAS oTsb:cAls WIDTH oTsb:nW HEIGHT oTsb:nH CELL ;
FONT oTsb:aFont ; // все фонты для таблицы
BRUSH oTsb:aClrBrush ; // цвет фона под таблицей

То в новой версии Минигуи 24.06 - цвет фона под таблицей будет белым ...
Если добавить так, самым последним при назначении цветов:
      :hBrush  := CreateSolidBrush(aClrBrush[1], aClrBrush[2], aClrBrush[3])  // цвет фона под таблицей 

То цвет фона под таблицей будет правильным.
Объясните мне разницу - почему так нужно делать ?
Мне не сложно добавить ещё строку в код, было бы без утечек памяти.
И ещё фигня происходит, после использования
   oBrw:Enabled(.F.) 
...
oBrw:Enabled(.T.)

Цвет фона под таблицей меняется на белый...

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




Пост N: 2328
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.06.24 15:16. Заголовок: Andrey пишет: Если ..


Andrey пишет:

 цитата:
Если задаём цвет фона под таблицей ТОЛЬКО так:
DEFINE TBROWSE &cBrw OBJ oBrw OF &cForm ;
AT oTsb:nY, oTsb:nX ALIAS oTsb:cAls WIDTH oTsb:nW HEIGHT oTsb:nH CELL ;
FONT oTsb:aFont ; // все фонты для таблицы
BRUSH oTsb:aClrBrush ; // цвет фона под таблицей

То в новой версии Минигуи 24.06 - цвет фона под таблицей будет белым


Благодарю за сообщение.

Я уже поправил использование класса BRUSH для этого синтаксиса команды DEFINE TBROWSE.

Andrey пишет:

 цитата:
после использования
oBrw:Enabled(.F.)
...
oBrw:Enabled(.T.)

Цвет фона под таблицей меняется на белый.


Эту проблему я тоже решил, внес исправление в код этого метода.



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

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




Пост N: 7777
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.06.24 13:13. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

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


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

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




Пост N: 2329
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.06.24 15:17. Заголовок: Andrey пишет: когда..


Andrey пишет:

 цитата:
когда пришлёте новую библиотеку


Проверь свою почту
Отправлено: Вчера, 15:39

 цитата:

Андрей!

Высылаю для проверки исправленный вариант библиотеки.

Сейчас такой вызов должен отработать нормально

DEFINE TBROWSE oBrw AT nY,nX WIDTH nW HEIGHT nH CELL ;
FONT aTsbFont ;
BRUSH aBrush ;
ON INIT {|ob|



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




Пост N: 7778
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.06.24 21:50. Заголовок: Часть заработало, а ..


Часть заработало, а цвета спецхидера нет.
Отправил письмо на почту.

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




Пост N: 2330
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.06.24 15:02. Заголовок: Andrey пишет: цвета..


Andrey пишет:

 цитата:
цвета спецхидера нет.


Поправил назначение цветов спецхидера.
Результат см. на картинках







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




Пост N: 7779
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.07.24 13:36. Заголовок: ColorBack для footer..


ColorBack для footer "SELECTOR" берется из последней фантомной (добавленной колонки), которая перед VScrollBar-ом (исторически)
Для замены цвета введена переменная oBrw:nClrSelectorHdBack := ...
Если менять на другой цвет, то вверх таблицы становиться обгрызанным.
Можно ли добавить ЕЩЁ одну переменную, типа oBrw:nClrSelectorBottomBack для задания своего цвета ?
Или добавить другую переменную для верха "SELECTOR", типа oBrw:nClrSelectorTopBack для задания своего цвета ?
Вот для этого (1):


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




Пост N: 2331
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 07.07.24 15:35. Заголовок: Andrey пишет: добав..


Andrey пишет:

 цитата:
добавить ЕЩЁ одну переменную


Я добавил новую переменную nClrSelectorFtBack
Такой вид подвала устраивает


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




Пост N: 4592
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.07.24 15:42. Заголовок: Andrey пишет Можно л..


Andrey пишет
 цитата:
Можно ли добавить ЕЩЁ одну переменную


Можно добавить переменную отключающую :nClrSelectorHdBack и вкл. работу от данных цвета из колонки
 
DATA nClrSelectorHdBack // special selector header background color
DATA lClrSelectorHdBack AS LOGICAL INIT .T. // special selector header background color ON\OFF

DATA nClrLine // grid line color
...
METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse
...
IF ::lDrawHeaders .AND. ! lFooters
...
IF !( nJ == 1 .AND. ::lSelector )
IF ( nClrBack := iif( ::nColOrder == nI, oColumn:nClrOrdeBack, oColumn:nClrHeadBack ) ) == NIL
nClrBack := iif( ::nColOrder == nI, nClrOrdeBack, nClrHeadBack )
ENDIF
ELSEIF ! ::lClrSelectorHdBack
nClrBack := oColumn:nClrHeadBack

ELSEIF ::nClrSelectorHdBack != NIL
nClrBack := ::nClrSelectorHdBack
ELSE
nClrBack := ATail( ::aColumns ):nClrHeadBack
ENDIF
...
IF ::lFooting .AND. ::lDrawFooters
...
IF !( nJ == 1 .AND. ::lSelector ) // JP
nClrBack := iif( oColumn:nClrFootBack != NIL, oColumn:nClrFootBack, nClrFootBack )
ELSEIF ! ::lClrSelectorHdBack
nClrBack := oColumn:nClrFootBack

ELSEIF ::nClrSelectorHdBack != NIL
nClrBack := ::nClrSelectorHdBack
ELSE
nClrBack := ATail( ::aColumns ):nClrFootBack
ENDIF
...
тогда в prg делаем ~ так
...
oBrw:lClrSelectorHdBack := .F.
... когда виртуальные колонки уже есть в oBrw:aColumns
// изменим цвет колонки - виртуальная колонка / virtual column
oBrw:GetColumn("SELECTOR"):nClrBack := nBCSpH
oBrw:GetColumn("SELECTOR"):nClrFore := CLR_RED
oBrw:GetColumn("SELECTOR"):nClrHeadBack := CLR_GREEN
oBrw:GetColumn("SELECTOR"):nClrFootBack := CLR_YELLOW

...


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




Пост N: 4593
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.07.24 11:55. Заголовок: PS Для SpecHeader та..


PS
Для SpecHeader так же нужна правка, сделал так (тот же метод)
 
...
IF ::lDrawSpecHd
...
IF nI == nBegin .AND. ::lSelector
//!!! nClrBacks := iif( ::lDrawSpecHd, ::nClrSpcHdBack, nClrHeadBack )
IF ::nClrSelectorHdBack != NIL
nClrBacks := iif( ::lClrSelectorHdBack, ::nClrSelectorHdBack, oColumn:nClrSpcHdBack )
ELSE
nClrBacks := nClrHeadBack
ENDIF

ELSE
nClrBacks := iif( ::nPhantom == -1, ATail( ::aColumns ):nClrSpcHdBack, nClrPane )
ENDIF
...
Пример использования
oBrw:nClrSelectorHdBack := CLR_YELLOW
oBrw:lClrSelectorHdBack := .F. // background OFF
// изменим цвет колонки - виртуальная колонка / virtual column
oCol := oBrw:GetColumn("SELECTOR")
oCol:nClrBack := nBCSpH
oCol:nClrFore := CLR_RED
oCol:nClrHeadBack := CLR_BLUE
oCol:nClrFootBack := CLR_GREEN
oCol:nClrSpcHdBack := CLR_YELLOW

oCol := oBrw:GetColumn("ORDKEYNO")
oCol:nClrBack := nBCSpH
oCol:nClrFore := CLR_RED
oCol:nClrFootBack := nBCSpH
oCol:nClrFootFore := CLR_RED


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




Пост N: 4594
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.07.24 14:00. Заголовок: gfilatov2002 Сделал..


gfilatov2002
Сделал правки Скрытый текст

Пример на версии 23.12 https://TransFiles.ru/opjc0

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




Пост N: 2332
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.07.24 16:26. Заголовок: SergKis пишет: Сдел..


SergKis пишет:

 цитата:
Сделал правки


Принято с благодарностью

SergKis пишет:

 цитата:
Пример на версии 23.12


Криптование базы у меня НЕ работает.
Также потребовалось добавить

 цитата:
oBrw:lRowPosAtRec := .T.


и пропущенную обработку новых параметров метода InsColNumber() в функцию _DefineTBrowse().

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

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




Пост N: 4595
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.07.24 17:26. Заголовок: gfilatov2002 пишет Т..


gfilatov2002 пишет
 цитата:
Также потребовалось добавить oBrw:lRowPosAtRec := .T.


Это я пропустил (вылетело из головы, от жары, наверное, извините), т.к. установка :lRowPosAtRec := .T. у меня стоит в _TBrowse(...) по умолчанию, что бы всегда знать строки отображаемые и для Tooltip подсвечивать длинную информацию из строки
 
FUNCTION _TBrowse( oParam, uAlias, cBrw, nY, nX, nW, nH )
...
DEFAULT oParam := oHmgData()

DEFAULT oParam:lRowPosAtRec := .T.

...
:lRowPosAtRec := oParam:lRowPosAtRec

:Cargo:oParam := oParam
...

Вызов InsColNumber() в _DefineTBrowse() у себя сделал так Скрытый текст


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




Пост N: 2333
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.07.24 18:06. Заголовок: SergKis пишет: Вызо..


SergKis пишет:

 цитата:
Вызов InsColNumber() в _DefineTBrowse()


Работает.
Благодарю за помощь

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




Пост N: 2334
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.07.24 11:21. Заголовок: Всем кому это интересно...


Завершена подготовка новой сборки 24.07, которая будет опубликована в понедельник.

Благодарю Сергея Киселева за помощь при подготовке этой сборки.

Желаю всем хороших выходных.

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




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


gfilatov2002 пишет:

 цитата:
Завершена подготовка новой сборки 24.07


А пример SIX3 будет в новой сборке ?

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




Пост N: 2335
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.07.24 18:44. Заголовок: Andrey пишет: приме..


Andrey пишет:

 цитата:
пример SIX3 будет в новой сборке ?


Нет.

К слову SIXRDD версии 3.02 был разработан в 1993-1995, и он поддерживается в Харборе для совместимости.
Многие его функции заменены вызовом нативных Харбор функций (или заданы через них).
В свое время, конечно, это был продвинутый RDD, но кому сейчас интересен формат DBF, кроме гиков

Считаю более актуальными для тех, кто рассматривает миграцию от DBF к SQL, примеры с использованием библиотек SQLRDD, SQLMIX и т.п.
Но я могу быть неправ...

P.S. Кстати, я включил в ПРО-сборку исправленную версию библиотеки SQLRDD:
- была исправлена ошибка, когда для символьных полей возвращался размер, который в 4 раза больше, чем размер оригинального поля в базе DBF. Эта ошибка проявляется только в 64-битной версии библиотеки.

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




Пост N: 7784
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.07.24 20:40. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Считаю более актуальными для тех, кто рассматривает миграцию от DBF к SQL, примеры с использованием библиотек SQLRDD, SQLMIX и т.п.
Но я могу быть неправ...


Это да, нужное решение.
А можно включить простой пример открытия базы SQLRDD с использованием ТСБ на базе примера SIX3 ?
Для sqlite тоже хотелось бы иметь пример на базе ТСБ, как пример для SIX3 (коротко и понятно)
Я сам работал ранее с PostgreSql, сделаю простой пример для него, ранее давал конвертор DBF -> PgSql.

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




Пост N: 2336
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.07.24 09:50. Заголовок: Опубликована финальн..


Опубликована финальная сборка 24.07

Стандартная сборка

Профессиональная сборка (под паролем)

Также были подготовлены дополнительные сборки для следующих компиляторов:

- MinGW GNU C 14.1.0 (packaged on 2024-07-09)

- BCC 7.70 (32-bit) (основан на коде Борланда)

- BCC 7.70 (64-bit) (основан на CLang 5.0)

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

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




Пост N: 4599
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.24 16:16. Заголовок: gfilatov2002 Работа..


gfilatov2002
Работа с цветом, в :DrawHeaders() с :lSelector := .T., на мой взгляд, не корректна, т.е. отключен метод :SetColor() и стандартные задания цветов в заголовках SELECTOR и добавка DATA nClrSelectorFtBack // special selector footer background color мало что решает, заполняем лишние переменные, когда есть переменные самой колонки + при установке цвета есть неточность кода
 
IF ::lDrawSpecHd
...
IF nI == nBegin .AND. ::lSelector
nClrBacks := iif( ::lDrawSpecHd, ::nClrSpcHdBack, nClrHeadBack )
...
мы уже в ::lDrawSpecHd. Предлагаю вернуться к варианту
DATA nClrSelectorHdBack // special selector header background color
DATA nClrSelectorFtBack // special selector footer background color
если не убирать эту строку
DATA lClrSelectorHdBack AS LOGICAL INIT .T. // special selector header background color

...
METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse
...
IF !( nJ == 1 .AND. ::lSelector )
IF ( nClrBack := iif( ::nColOrder == nI, oColumn:nClrOrdeBack, oColumn:nClrHeadBack ) ) == NIL
nClrBack := iif( ::nColOrder == nI, nClrOrdeBack, nClrHeadBack )
ENDIF
ELSEIF ! ::lClrSelectorHdBack
nClrBack := oColumn:nClrHeadBack
ELSEIF ::nClrSelectorHdBack != NIL
nClrBack := ::nClrSelectorHdBack
ELSE
nClrBack := ATail( ::aColumns ):nClrHeadBack
ENDIF
...
IF ::lDrawSpecHd
...
IF nI == nBegin .AND. ::lSelector
//!!! nClrBacks := iif( ::lDrawSpecHd, ::nClrSpcHdBack, nClrHeadBack )
IF ! ::lClrSelectorHdBack
nClrBacks := oColumn:nClrSpcHdBack
ELSEIF ::nClrSelectorHdBack != NIL
nClrBacks := ::nClrSelectorHdBack
ELSE
nClrBacks := nClrHeadBack
ENDIF
ELSE
nClrBacks := iif( ::nPhantom == -1, ATail( ::aColumns ):nClrSpcHdBack, nClrPane )
ENDIF
...
IF ::lFooting .AND. ::lDrawFooters
...
IF !( nJ == 1 .AND. ::lSelector ) // JP
nClrBack := iif( oColumn:nClrFootBack != NIL, oColumn:nClrFootBack, nClrFootBack )
ELSEIF ! ::lClrSelectorHdBack
nClrBack := oColumn:nClrFootBack
ELSEIF ::nClrSelectorFtBack != NIL
nClrBack := ::nClrSelectorFtBack
ELSEIF ::nClrSelectorHdBack != NIL
nClrBack := ::nClrSelectorHdBack
ELSE
nClrBack := ATail( ::aColumns ):nClrFootBack
ENDIF
nClrBack := ::GetValProp( nClrBack, nClrBack, nJ )
...
Где oBrw:lClrSelectorHdBack := .F. - вкл. работу от параметров цветов из объекта колонки

Еще правка в _Tbrowse(...)
FUNCTION _TBrowse( oParam, uAlias, cBrw, nY, nX, nW, nH )

LOCAL oBrw, aTmp, aBrush, aHead, aField, aFoot, aColor
LOCAL cForm, lSpecHd, bInit, bEnd
LOCAL hForm
LOCAL i, j
DEFAULT oParam := oHmgData()
DEFAULT oParam:cForm := oParam:cFormName
DEFAULT oParam:cForm := _HMG_ThisFormName

cForm := oParam:cForm
hForm := GetFormHandle( cForm )

DEFAULT oParam:lRowPosAtRec := .T.
...
DEFINE TBROWSE &cBrw OBJ oBrw AT nY,nX WIDTH nW HEIGHT nH CELL ;
PARENT &(cForm) ;
...
Еще маленькая добавка
CLASS TWndData
...
METHOD Maximize() INLINE ShowWindow( ::nHandle, SW_MAXIMIZE )
METHOD Minimize() INLINE ShowWindow( ::nHandle, SW_MINIMIZE )

METHOD Restore() INLINE ShowWindow( ::nHandle, SW_RESTORE )
...


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




Пост N: 2337
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.07.24 17:09. Заголовок: SergKis пишет: Рабо..


SergKis пишет:

 цитата:
Работа с цветом
правка в _Tbrowse(...)


SergKis пишет:

 цитата:
Еще маленькая добавка


Все правки приняты.
Благодарю за помощь

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




Пост N: 4600
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.24 21:40. Заголовок: gfilatov2002 Как то..


gfilatov2002
Как то много букв с ::nDataType, может упростить
 
ACCESS IsArr INLINE AND( ::nDataType, DATATYPE_ARRAY ) != 0
ACCESS IsDbf INLINE AND( ::nDataType, DATATYPE_RDD ) != 0
ACCESS IsAdo INLINE AND( ::nDataType, DATATYPE_ADO ) != 0
ACCESS IsText INLINE AND( ::nDataType, DATATYPE_TEXT ) != 0

ACCESS IsEdit INLINE ! Empty( ::aColumns[ ::nCell ]:oEdit )
ACCESS Tsb INLINE ::oWnd
ACCESS nAtPos INLINE iif( ::IsDbf, ( ::cAlias )->( RecNo() ), ::nAt )
//ACCESS nAtPos INLINE iif( ::nDataType == DATATYPE_RDD, ( ::cAlias )->( RecNo() ), ::nAt )
ACCESS IsRowPosAtRec INLINE ;
и далее по тексту где есть конструкции типа ::nDataType == DATATYPE_RDD или такие
IF ! EmptyAlias( ::cAlias ) .AND. AND( ::nDataType, DATATYPE_ARRAY ) == 0 .AND. ;
AND( ::nDataType, DATATYPE_TEXT ) == 0 .AND. AND( ::nDataType, DATATYPE_ADO ) == 0
::lIsDbf := .T.
ENDIF
заменить


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




Пост N: 4611
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.07.24 09:27. Заголовок: gfilatov2002 Правка..


gfilatov2002
Правка _TBrowse(...) Скрытый текст

PS
В TsBrowse пропустили ?
 
FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ;
...
IF ISCHAR ( ControlName ) .AND. ControlName == "0"
ControlName := HMG_GetUniqueName()
ENDIF

IF _IsControlDefined( ControlName, ParentFormName ) .AND. .NOT. _HMG_DialogInMemory

PS2
Добавил
 
i_timer.ch
#command DEFINE TIMER <name> ;
[ <dummy1: OF, PARENT> <parent> ] ;
[ INTERVAL <interval> ] ;
[ ACTION <action> ] [ <lOnce: ONCE> ] [ ON INIT <bInit> ] ;
=> ;
_DefineTimer ( <(name)>, <(parent)>, <interval>, <{action}>, <.lOnce.>, <bInit> )
...
h_timer.prg
FUNCTION _DefineTimer ( ControlName , ParentForm , Interval , ProcedureName , Once , bInit )
...
Do_ControlEventProcedure ( bInit, k )

RETURN lSuccess

использовать
DEFINE TIMER &(cN) INTERVAL 700 ON INIT {|| This.Enabled := .F. } ;
ACTION {|| ... }

PS3
h_objects.prg
FUNCTION oDlu4Font( nFontSize, lDlu2Pix, nPrcW, nPrcH )
...
IF HB_ISCHAR( nFontSize )
nFontSize := _GetFontSize(nFontSize, "Main")
ENDIF

DEFAULT lDlu2Pix := .T., nFontSize := 11 //, nPrcW := 100, nPrcH := 100
...
использовать oDlu := oDlu4Font( "Normal" )


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




Пост N: 2338
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.07.24 16:53. Заголовок: SergKis пишет: Прав..


SergKis пишет:

 цитата:
Правка _TBrowse(...)


Все поправки приняты с благодарностью

По ходу, исправил опечатку
SergKis пишет:

 цитата:

IF HB_ISBLOCK( oParam:bLostFocus )
oBrw:bGotFocus := oParam:bLostFocus // :bLostFocus := {|hCtlFocus,ob| ... }
ENDIF


на
IF HB_ISBLOCK( oParam:bLostFocus )
oBrw:bLostFocus := oParam:bLostFocus // :bLostFocus := {|hCtlFocus,ob| ... }
ENDIF

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




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


gfilatov2002 пишет
 цитата:
исправил опечатку


Спасибо , пропустил такую бяку

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




Пост N: 7822
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.08.24 15:42. Заголовок: Собираю проект Tsb_A..


Собираю проект Tsb_Access2 в версии 23.12.5 - всё работает.
Если собираю последней версией 24.07 - вылетает с такой ошибкой:
Error BASE/1005 Message not found: TSBROWSE:_LCLRSELECTORHDBACK 
Args:
[1] = O TSBROWSE
Called from __ERRRT_SBASE(0)
Called from TSBROWSE:ERROR(0)
Called from (b)HBOBJECT(0)
Called from TSBROWSE:MSGNOTFOUND(0)
Called from TSBROWSE:_LCLRSELECTORHDBACK(0) <<-- наверное нет в версии 24.07
Called from MYTSBEND(744) in module: tsb_ViewAccess.prg
Called from DRAW_RECORDSET(351) in module: tsb_ViewAccess.prg


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




Пост N: 7827
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.08.24 15:29. Заголовок: Не работает мой прое..


Не работает мой проект Tsb_dbf(0.74).7z на версии 24.07
Ошибка на версии 24.07 такая:
Error BASE/1081 Неверный аргумент: + Args: [1] = C Window: [2] = U 
--------------------------------- Stack Trace ---------------------------------
Called from _DEFINETBROWSE(249) in module: h_tbrowse.prg
Called from _TBROWSE(558) in module: h_controlmisc2.prg
Called from TSB_VIEWDBF(63) in module: tsb_ViewDbf.prg
Called from MENU2OPENFILE(171) in module: 2file.prg
Called from (b)SETS_EVENT2WINDOWSTANDART(211) in module: 0main.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from TWNDDATA:DOEVENT(1435) in module: h_objects.prg
Called from DO_ONWNDLAUNCH(668) in module: h_objmisc.prg
Called from (b)INIT(127) in module: h_init.prg

Если собираю на версии Сергея - 23.12.5 то работает

Нет правки для случая когда объект ТСБ определяется на другом окне.
Мой код:
   // ------ вариант 2 
oTsb:cForm := oWnd:Name // <--- обязательно так !!!
oTsb:cFormName := oWnd:Name // или так
? ProcNL(), cAls, ALIAS(), "cBrw=",cBrw
// функция в библиотеке \MiniGUI\SOURCE\TsBrowse\h_controlmisc2.prg
oBrw := _TBrowse( oTsb, cAls, cBrw, oTsb:nY, oTsb:nX, oTsb:nW, oTsb:nH ) <<<----- строка 63

Наверное в версии 24.07 нет изменений для назначения
oTsb:cForm    и    oTsb:cFormName

Проект отправил на почту.

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




Пост N: 4620
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.08.24 19:13. Заголовок: Andrey Будь внимате..


Andrey
Будь внимательнее
gfilatov2002 22.07.24 09:50.
 цитата:
Опубликована финальная сборка 24.07


После этого ... SergKis => предложения ...
gfilatov2002
 цитата:
Все поправки приняты



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




Пост N: 4621
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.08.24 16:43. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение по Alert*, добавить смену фонта, т.е.
 
STATIC aBackColor, aFontColor, cFontNameAlert := "DlgFont"

*-----------------------------------------------------------------------------*
FUNCTION HMG_Alert( cMsg, aOptions, cTitle, nType, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable, cFontName )
*-----------------------------------------------------------------------------*
...
hb_default( @lClosable, .F. )
hb_default( @cFontName, cFontNameAlert )
...
*-----------------------------------------------------------------------------*
FUNCTION _SetMsgAlertFontName( cFontName )
*-----------------------------------------------------------------------------*
LOCAL cOldFont := cFontNameAlert

IF cFontName != NIL
cFontNameAlert := cFontName
ENDIF

RETURN cOldFont


Применение
...
// Alert* font
_DefineFont("DlgFont" , o:cDlgFont , o:nDlgSize , .F., .F. )
_DefineFont("DlgFont2", "Courier New" , o:nDlgSize , .F., .F. )
...
cOld := _SetMsgAlertFontName("DlgFont2")
AlertInfo(cMsg)
_SetMsgAlertFontName(cOld)



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




Пост N: 2344
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.08.24 16:00. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение по Alert*, добавить смену фонта


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

Добавил такое описание в файл changelog.txt

 цитата:
* Enhanced: Added the auxiliary function HMG_Alert_FontName() for managing
of a font name in the function HMG_Alert().
Usage:
// Alert* font
_DefineFont( "DlgFont" , o:cDlgFont , o:nDlgSize, .F., .F. )
_DefineFont( "DlgFont2", "Courier New", o:nDlgSize, .F., .F. )
...
cOld := HMG_Alert_FontName( "DlgFont2" )
AlertInfo( cMsg )
HMG_Alert_FontName( cOld )



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




Пост N: 2345
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.09.24 09:58. Заголовок: Всем кому это интересно...


Опубликована финальная сборка 24.08

Стандартная сборка

Профессиональная сборка (под паролем)

Также были подготовлены дополнительные сборки для следующих компиляторов:

- MinGW GNU C 14.2.0 (packaged on 2024-08-06)

- BCC 7.70 (32-bit) (основан на коде Борланда)

- BCC 7.70 (64-bit) (основан на CLang 5.0)

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

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




Пост N: 4627
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.09.24 18:46. Заголовок: gfilatov2002 Пример..


gfilatov2002
Примеры Tsb_SBrowse. При вкл. корректировки колонки Notes формируются файлы checkres.txt, строки
C:\MiniGuiBcc58\SAMPLES\Advanced\Tsb_sbrowse\demo.exe -- BRUSH,1141904083,TSMULTI:NEW(76)->TSBROWSE:EDIT(5559)->TSBROWSE:KEYDOWN(8761)->TSBROWSE:HANDLEEVENT(9669)->EVENTS(141)->DOMESSAGELOOP(0)->_ACTIVATEWINDOW(1648)->SBROWSE(308)->(b)MAIN(37)->_PROCESSINITPROCEDURE(1824)->_ACTIVATEWINDOW(1635)->DOMETHOD(5909)->MAIN(51)

C:\MiniGuiBcc58\SAMPLES\Advanced\Tsb_sbrowse\demo2.exe -- BRUSH,-2146429614,TSMULTI:NEW(76)->TSBROWSE:EDIT(5559)->TSBROWSE:KEYDOWN(8761)->TSBROWSE:HANDLEEVENT(9669)->EVENTS(141)->DOMESSAGELOOP(0)->_ACTIVATEWINDOW(1648)->SBROWSE(308)->MY_SBROWSE(82)->(b)MAIN(48)->DO_WINDOWEVENTPROCEDURE(82)->TWNDDATA:DOEVENT(1441)->DO_ONWNDLAUNCH(668)->(b)INIT(127)->EVENTS(1179)->DOMESSAGELOOP(0)->_ACTIVATEWINDOW(1648)->DOMETHOD(5909)->MAIN(69)

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




Пост N: 2346
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.09.24 19:34. Заголовок: SergKis пишет: При ..


SergKis пишет:

 цитата:
При вкл. корректировки колонки Notes формируются файлы checkres.txt


Благодарю за сообщение!
Поправил код в методе End() следующим образом
METHOD End() CLASS TControl 

LOCAL ix
LOCAL nAt := If( ! Empty( ::oWnd:aControls ), ;
AScan( ::oWnd:aControls, {| hCtrl | hCtrl == Self:hWnd } ), 0 )

IF nAt != 0
ADel( ::oWnd:aControls, nAt )
ASize( ::oWnd:aControls, Len( ::oWnd:aControls ) - 1 )
ENDIF

IF ::hBrush != NIL
DeleteObject( ::hBrush )
ENDIF

::DelVars( Self:hWnd )
...

и теперь этот файл НЕ создается.

P.S.
SergKis пишет:

 цитата:
TSMULTI:NEW(76)


Строку 76 в файле TSMULTI.PRG я закомментировал...

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




Пост N: 4628
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.09.24 17:48. Заголовок: gfilatov2002 Неболь..


gfilatov2002
Небольшое предложение h_alert.prg
 
STATIC aBackColor, aFontColor, cLineSeparator := ";|"
...
IF Set( _SET_DELIMITERS ) .and. !Empty(cLineSeparator)
cOldDelim := Set( _SET_DELIMCHARS )
Set( _SET_DELIMCHARS, cLineSeparator )
#ifdef __XHARBOUR__
...
*-----------------------------------------------------------------------------*
FUNCTION HMG_Alert_Separator( cSeparator )
*-----------------------------------------------------------------------------*
LOCAL cOldSep := cLineSeparator

IF HB_ISCHAR( cSeparator )
cLineSeparator := cSeparator
ENDIF

RETURN cOldSep
...
тогда ini файлы и т.д. можно показывать как ест, т.е.
...
cOSep := HMG_Alert_Separator("")
cText := hb_memoread(cFile)
AlertInfo(cText, , , , , , , .T.)
HMG_Alert_Separator(cOSep)
...


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




Пост N: 2347
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.09.24 20:37. Заголовок: SergKis пишет: Небо..


SergKis пишет:

 цитата:
Небольшое предложение h_alert.prg


Добавил такую возможность.
Благодарю за помощь!

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




Пост N: 7846
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.09.24 20:43. Заголовок: https://i.postimg.cc..




Иконки 96х96 не помещаются.
И наверное на нужно ещё сделать 128х128, экраны у юзеров большие !!!

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




Пост N: 2348
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.09.24 14:57. Заголовок: Andrey пишет: нужно..


Andrey пишет:

 цитата:
нужно ещё сделать 128х128



Попробуй переопределить следующую константу в файле h_alert.prg

 цитата:
#define MARGIN_ICON 130 // 70

и затем пересобрать библиотеку, конечно.

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




Пост N: 2349
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.09.24 11:37. Заголовок: Всем кому это интересно...


На английском форуме библиотеки выложили такой элемент управления (SPLITTER), который обязательно будет добавлен в следующую сборку.

 цитата:
SYNTAX:

DEFINE SPLITTER <ControlName>
[ ID <nId> ]
[ OF, PARENT, DIALOG> <ParentWindowName> ]
[ AT <nRow> ,<nCol> ]
[ WIDTH <nWidth> ]
[ HEIGHT <nHeight> ]
[ VERTICAL ] [ HORIZONTAL ]
[ HIDEARROW ]
[ NOHOVER ]
[ USEGRADIENT ]
[ COLOR <color> ]
[ BACKCOLOR <backColor> ]
[ COLORHOVER <hoverColor> ]
[ BACKCOLORHOVER <hoverBackColor> ]
[ GRADIENT <leftColor>, <middleColor> [, <rightColor> ] ]
[ GRADIENTHOVER <hoverLeftColor>, <hoverMiddleColor> [, <hoverRightColor> ] ]
[ SPLIT <aLeftControls> FROM <aRightControls> ]
[ LIMITS <aLimits> ]



SPLITTER object properties:

- aLeft Get/Set left (or top) controls of a splitter
- aRight Get/Set right (or bottom) controls of a splitter
- nLeftLimit Get/Set left (or top) limit of a splitter
- nRightLimit Get/Set right (or bottom) limit of a splitter
- lShowArrow Set wheter arrow on a splitter is displayed
- lUseHover Set wheter hover effect on a splitter is applied
- lUseGradient Set wheter a gradient is used to paint a splitter instead of flat color
- color Get/Set an RGB value corresponding to a splitter's foreground color
- bcolor Get/Set an RGB value corresponding to a splitter's background color
- colorHover Get/Set an RGB value corresponding to a splitter's foreground color when hovered
- bColorHover Get/Set an RGB value corresponding to a splitter's background color when hovered
- gradient Get/Set a tuple of 2 or 3 RGB values corresponding to gradient colors (the order is leftColor then middleColor)
- gradientHover Get/Set a tuple of 2 or 3 RGB values corresponding to gradient colors (the order is leftColor then middleColor)





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




Пост N: 4632
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.09.24 13:10. Заголовок: gfilatov2002 Неболь..


gfilatov2002
Небольшая правка LetoDbf.
 
server\letofunc.c
/* leto_udf() */
HB_FUNC( LETO_GETAPPOPTIONS )
{
HB_USHORT uiNum;

if( HB_ISNUM( 1 ) )
uiNum = ( HB_USHORT ) hb_parni( 1 );
else
uiNum = 0;

switch( uiNum )
{
case LETOOPT_DATAPATH:
hb_retc( s_pDataPath );
break;
case LETOOPT_INDEXTYPE:
hb_retni( s_uiDriverDef );
break;
case LETOOPT_FILEFUNC:
hb_retl( s_bFileFunc );
break;

case LETOOPT_ANYEXT:
...
server\server.prg
...
REQUEST WaitRunTerm
REQUEST hb_hrbRun, hb_hrbLoad, hb_hrbDo, hb_hrbUnLoad, hb_hrbGetFunsym, hb_hrbGetFunList
REQUEST CompressFiles, UnCompressFiles
REQUEST HB_ZIPFILE, HB_UNZIPFILE
REQUEST HB_DIRECTORY, HB_ISARRAY, HB_ISCHAR, HB_ISLOGICAL, HB_ISBLOCK, ;
HB_ISNUMERIC, HB_ISOBJECT, HB_ISNIL, hb_Default, hb_ExecFromArray, ;
hb_jsonDecode, hb_jsonEncode, hb_DirSepAdd, hb_DirBuild, hb_DirExists, ;
hb_DefaultValue, hb_DirTemp, hb_DirUnbuild, hb_FileExists, hb_ForNext, ;
hb_FNameDir, hb_FNameExt, hb_FNameExtSet, hb_FNameExtSetDef, hb_FNameMerge, ;
hb_FNameName, hb_FNameNameExt, hb_FNameSplit, hb_eol, hb_ps, ;
HB_Crypt, HB_DeCrypt, hb_CRC32, hb_memoread, hb_memowrit, Seconds
...
и добавка в letoudf.prg
/* leto_AppGetOptions() of this HRB */
FUNCTION UDF_AppGetOptions
Local aOptions := {}

AAdd( aOptions, { "DataPath" , leto_GetAppOptions( 1 ) } ) // LETOOPT_DATAPATH
AAdd( aOptions, { "IndexType" , leto_GetAppOptions( 2 ) } ) // LETOOPT_INDEXTYPE
AAdd( aOptions, { "FileFunc" , leto_GetAppOptions( 3 ) } ) // LETOOPT_FILEFUNC
AAdd( aOptions, { "AnyExt" , leto_GetAppOptions( 4 ) } ) // LETOOPT_ANYEXT
AAdd( aOptions, { "ShareTables" , leto_GetAppOptions( 10 ) } ) // LETOOPT_SHARETABLES
AAdd( aOptions, { "NoSaveWA" , leto_GetAppOptions( 11 ) } ) // LETOOPT_NOSAVEWA
AAdd( aOptions, { "DebugLevel" , leto_GetAppOptions( 17 ) } ) // LETOOPT_DEBUGLEVEL
AAdd( aOptions, { "Optimize" , leto_GetAppOptions( 18 ) } ) // LETOOPT_OPTIMIZE
AAdd( aOptions, { "AutoOrder" , leto_GetAppOptions( 19 ) } ) // LETOOPT_AUTOORDER
AAdd( aOptions, { "MemoType" , leto_GetAppOptions( 20 ) } ) // LETOOPT_MEMOTYPE
AAdd( aOptions, { "LockCheme" , leto_GetAppOptions( 22 ) } ) // LETOOPT_LOCKCHEME
AAdd( aOptions, { "UdfEnabled" , leto_GetAppOptions( 23 ) } ) // LETOOPT_UDFENABLED
AAdd( aOptions, { "MemoSize" , leto_GetAppOptions( 24 ) } ) // LETOOPT_MEMOSIZE
AAdd( aOptions, { "LowerPath" , leto_GetAppOptions( 25 ) } ) // LETOOPT_LOWERPATH
AAdd( aOptions, { "Trigger" , leto_GetAppOptions( 26 ) } ) // LETOOPT_TRIGGER
AAdd( aOptions, { "HardCommit" , leto_GetAppOptions( 27 ) } ) // LETOOPT_HARDCOMMIT
AAdd( aOptions, { "VersionServer", "3.01" } )
AAdd( aOptions, { "VersionUDF" , UDF_Version() } )
AAdd( aOptions, { "VersionOS" , OS() } )
AAdd( aOptions, { "SepatorPath" , hb_ps() } )
AAdd( aOptions, { "SepatorLine" , hb_eol() } )

RETURN aOptions
...
использование
aOpt := leto_Udf("UDF_AppGetOptions") ; Default aOpt := {{"Error", "UDF not found"}}
?v aOpt ; ?
oOpt := oHmgData()
oOpt:Set(aOpt)
?v oOpt:GetAll() ; ?
? oOpt:FileFunc, oOpt:UdfEnabled, oOpt:DataPath

PS. можно и такую udf добавить
/* leto_Directory() of this HRB */
FUNCTION UDF_GetFiles( cPath, cMask, cAttr, aFiles )
LOCAL aDir, aFil, nLen
Local cDataPath := hb_DirSepAdd( leto_GetAppOptions( 1 ) )

IF aFiles == NIL ; aFiles := {}
ENDIF
IF cPath == NIL ; cPath := ""
ENDIF
IF cMask == NIL ; cMask := "*"
ENDIF
IF cAttr == NIL ; cAttr := "AD"
ENDIF

IF !Empty(cPath) ; cPath := hb_DirSepAdd(cPath)
ENDIF

aDir := hb_Directory( cDataPath + cPath + cMask, cAttr )

IF hb_IsArray(aDir) .and. Len(aDir) > 0
IF !Empty(cPath)
nLen := Len(aDir)
aFil := { cPath, nLen - 2, hb_CtoT(""), "", "D" }
aAdd(aFiles, aClone(aFil))
ENDIF

FOR EACH aFil IN aDir
IF left(aFil[1], 1) != "."
IF aFil[5] == "D"
UDF_GetFiles( cPath + aFil[1], cMask, cAttr, aFiles )
ELSE
aFil[1] := upper(cPath) + lower(aFil[1])
aAdd(aFiles, aClone(aFil))
ENDIF
ENDIF
NEXT
ENDIF

RETURN aFiles

использование
aFil := leto_UDF("UDF_GetFiles")
?v aFil ; ?
aFil := leto_UDF("UDF_GetFiles", "TRANSFER")
?v aFil ; ?


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




Пост N: 2350
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.09.24 16:23. Заголовок: SergKis пишет: Небо..


SergKis пишет:

 цитата:
Небольшая правка LetoDbf


Добавил эти изменения, но убрал из кода сервера функции, которые зависят от Минигуи.
Также увеличил версию сервера до 3.01

 цитата:
//REQUEST WaitRunTerm
REQUEST hb_hrbRun, hb_hrbLoad, hb_hrbDo, hb_hrbUnLoad, hb_hrbGetFunsym, hb_hrbGetFunList
//REQUEST CompressFiles, UnCompressFiles
REQUEST HB_ZIPFILE, HB_UNZIPFILE
REQUEST HB_DIRECTORY, HB_ISARRAY, HB_ISCHAR, HB_ISLOGICAL, HB_ISBLOCK, ;
HB_ISNUMERIC, HB_ISOBJECT, HB_ISNIL, hb_Default, hb_ExecFromArray, ;
hb_jsonDecode, hb_jsonEncode, hb_DirSepAdd, hb_DirBuild, hb_DirExists, ;
hb_DefaultValue, hb_DirTemp, hb_DirUnbuild, hb_FileExists, hb_ForNext, ;
hb_FNameDir, hb_FNameExt, hb_FNameExtSet, hb_FNameExtSetDef, hb_FNameMerge, ;
hb_FNameName, hb_FNameNameExt, hb_FNameSplit, hb_eol, hb_ps, ;
HB_Crypt, HB_DeCrypt, hb_CRC32, hb_memoread, hb_memowrit, Seconds


SergKis пишет:

 цитата:
и добавка в letoudf.prg


Оставил в поставке стандартный файл letoudf.prg, любые дополнительные функции можно добавить в этот файл или в свою программу по желанию.
Благодарю за помощь

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




Пост N: 7862
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.09.24 16:29. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Также увеличил версию сервера до 3.01


Где эта циферка сидит ?
Не могу у себя исправить, всегда показывает 3.0 вот по этой функции Leto_GetServerVersion()

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




Пост N: 4633
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.09.24 17:50. Заголовок: Andrey пишет Не могу..


Andrey пишет
 цитата:
Не могу у себя исправить, всегда показывает 3.0 вот по этой функции Leto_GetServerVersion()


версия сидит в include\funcleto.h
#define LETO_VERSION_STRING "3.0"
надо править тут, но главное, после сборки заменить клиента полученного в MiniGui, потому и предлагал UDF_AppGetOptions, что бы не заморачиваться с этим и за одно обращение к серверу иметь все доступные режимы работ его.

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




Пост N: 4634
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.09.24 18:05. Заголовок: gfilatov2002 пишет Д..


gfilatov2002 пишет
 цитата:
Добавил эти изменения, но убрал из кода сервера функции, которые зависят от Минигуи.


сборка лежит в hmg и сервер для windows, так что вполне может быть привязан к MiniGui, но отпадают мелькающие черные экраны с использованием leto_ProcessRun(...), она хороша, но ... не всегда.
Я беру и в каталог Advanced\LetoDbf кладу каталог Letodbf-master, в нем делаю _Build.bat с одной строкой
call ..\..\..\..\batch\hbmk2.bat /n %* letodb.hbp
и _Build_udf.bat (letoudf.prg кладу в SOURCE) со строками
@echo off
SET UDF=.\SOURCE
if exist letoudf.hrb del letoudf.hrb > nul
call ..\..\..\..\batch\hbmk2.bat letoudf.hbp
if exist letoudf.hrb move letoudf.hrb %UDF%\letoudf.hrb

для windows daemon сборки (как в версии hmg) все ok!, но получается, все таки, это лишнее, на мой взгляд.
Можно включить ShellExecuteEx вместо WaitRunTerm (тут вариантов больше). Будет размер exe немного больше
Зато в сборке hmg нормальная сборка сервера и не надо каждый раз его пересобирать, после новой версии hmg

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




Пост N: 2351
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.09.24 18:32. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно включить ShellExecuteEx вместо WaitRunTerm


Тогда добавлю функцию WAPI_SHELLEXECUTE_WAIT() из библиотеки hbwin для замены WaitRunTerm

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




Пост N: 4635
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.09.24 19:13. Заголовок: gfilatov2002 пишет Т..


gfilatov2002 пишет
 цитата:
Тогда добавлю функцию WAPI_SHELLEXECUTE_WAIT() из библиотеки hbwin для замены WaitRunTerm


Она без ожидания запускает ? Это важно иметь обе возможности, без ожидания и с ожиданием и кодом возврата.
В linuks эти строки для windows, комментируются в коде, остальное остается, Андрей проверил.

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




Пост N: 4636
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.09.24 14:08. Заголовок: gfilatov2002 Вынеси..


gfilatov2002
Вынесите _o2log(...) ( вместе с STATIC FUNCTION TR0( cTxt, nLen, cSim ) ) за скобку
#ifdef _OBJECT_
она к oHmgData() подходит в пару

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




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


gfilatov2002 пишет:

 цитата:
Тогда добавлю функцию WAPI_SHELLEXECUTE_WAIT() из библиотеки hbwin для замены WaitRunTerm


Как это использовать ?
Как различать какой сервер запущен: на Windows или на Linux ?
Я конечно могу предложить своё решение, но хотелось бы иметь СТАНДАРТНОЕ решение.

Это нужно для запуска внешних программ, пока архиваторов.
Для Linux работает запуск Rar и Zip без .exe
Уже проверял, работает.

Встроенный hb_ZipFile() работает в 3 раза быстрей.
   // Здесь два бегунка - на стороне сервера LetoDbf НЕ БУДУТ работать   
bBlock := {|| Nil } // показ общего бегунка
bBlock2 := {|| Nil } // показ для каждого файла
tStart := hb_DateTime()
// запуск функции на сервере hb_ZipFile()
lScs := Leto_Udf("hb_ZipFile", cZipFile, aZip, nLZip, bBlock, NIL, cPsw, .T., , bBlock2)
cTime := "Time spent archiving - " + HMG_TimeMS( tStart ) + "!;;"


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




Пост N: 4638
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.09.24 23:05. Заголовок: Andrey пишет Как это..


Andrey пишет
 цитата:
Как это использовать ?


Это для windows сборки (которая в hmg), запуски exe на сервере без черных окон leto_ProcessRun
WAPI_SHELLEXECUTE_WAIT() - с ожиданием и кодом возврата
WAPI_SHELLEXECUTE() - ты знаешь
exe работает на сервере, например, VWT без экранных команд или даже hmg сборка без окон для разных операций с базой (выступать может автономным модулем или как клиент сервера к localhost), в том числе и 7za.exe

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




Пост N: 2352
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.09.24 11:19. Заголовок: SergKis пишет: Выне..


SergKis пишет:

 цитата:
Вынесите _o2log(...) ( вместе с STATIC FUNCTION TR0( cTxt, nLen, cSim ) ) за скобку


OK
Благодарю за все ваши предложения - всегда "по делу".

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




Пост N: 2353
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.09.24 12:55. Заголовок: Всем кому это интересно...


Подготовил вторую бета версию новой сборки библиотеки Минигуи.

Что нового:
Скрытый текст

Если у вас есть предложения или вопросы, я готов их рассмотреть...

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




Пост N: 4639
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.09.24 17:49. Заголовок: gfilatov2002 в Leto..


gfilatov2002
в LetoDbf добавить REQUEST hb_NtoC, hb_EnumIndex

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




Пост N: 2354
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.09.24 18:00. Заголовок: SergKis пишет: REQU..


SergKis пишет:

 цитата:
REQUEST hb_NtoC, hb_EnumIndex


Видимо, имелась ввиду функция hb_NtoS, так она уже линкуется вместе с сервером

 цитата:
REQUEST HB_HEXTONUM, HB_NUMTOHEX, HB_NTOS



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




Пост N: 4640
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.09.24 20:56. Заголовок: gfilatov2002 пишет В..


gfilatov2002 пишет
 цитата:
Видимо, имелась ввиду функция hb_NtoS


Имел ввиду hb_NtoC, такая используется оч. давно, если переносишь код приходится править, но в целом, не принципиально

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




Пост N: 2355
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.09.24 09:47. Заголовок: SergKis пишет: Имел..


SergKis пишет:

 цитата:
Имел ввиду hb_NtoC


Не нашел такую функцию в поставке Харбора.
Есть только функция NtoC() в библиотеке hbct, но она уже не актуальна с тех пор, как появилась hb_ntos().

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




Пост N: 4641
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.09.24 10:04. Заголовок: gfilatov2002 пишет Н..


gfilatov2002 пишет
 цитата:
Не нашел такую функцию в поставке Харбора.


Advanced\ErrorView\ErrorSys
hError[ cDateTime ][ "StackTrace" ][ hb_ntoc( n - 1 ) ] := ProcName( n ) + "(" + hb_ntos( ProcLine( n ) ) + ")" + iif( ProcLine( n ) > 0, " in module: " + ProcFile( n ), "" )
... и др.

добавка REQUST hb_ntoc вопросы снимает, где то лежит, значит

 цитата:
но она уже не актуальна с тех пор, как появилась hb_ntos()


hb_ntos() никогда не использовал, но в целом не оч. важно, можно #xcommand сделать в udf

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




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


SergKis пишет:

 цитата:
добавка REQUST hb_ntoc вопросы снимает, где то лежит


Нашел эту функцию в ядре Харбора
Вот ее описание:

 цитата:

$AUTHOR$
2017 Pete D. <pete_westg@yahoo.gr>
$TEMPLATE$
Function
$NAME$
hb_ntoc()
$CATEGORY$
API
$SUBCATEGORY$
Strings
$ONELINER$
Converts a numeric value to string
$SYNTAX$
hb_ntoc( <nValue>, [<nDecs>] ) --> cValue
$ARGUMENTS$
<nValue> is the numeric value to convert.

<nDecs> decimal digits to retain (if any).
$RETURNS$
<cValue> A string representation of <nValue>
$DESCRIPTION$
This function converts the given <nValue> numeric value
to a string value, while (trying to) keep all or at least `nDecs`
significant digits in double numbers, unless `<nDecs>` is lesser
than actual decimal digits of <nValue>, in which case the result
will be rounded.

SET DECIMAL setting has no effect on the returned value (ignored),
which means that, unlike f.e. Str(), all non-significant digits
(e.g.: trailing decimal zeros) will be removed. Likewise, all
leading empty spaces will be trimmed.

Returns stringified value of `<nValue>`, preserving all (or at least
`<nDecs>`) significant digits, if any.
Interestingly, if `<nValue>` is NIL or not numeric, this function
will return a null string and, unlike Str(), will NOT cause an RTE.
NOTE: new function, available after 2016-06-20 21:59 UTC+0200 commit,
(it is not available in earlier versions).
$EXAMPLES$
LOCAL n := ( 5 / 2 ) + 0.009

? hb_ntoc( n ) // --> 2.509
? Str( n ) // --> 2.51
? hb_ntoc( n, 2 ) // --> 2.51
? Str( n, 5, 2 ) // --> 2.51
? hb_ntos( n ) // --> 2.51
? "--- decimals set to 7 ----"
SET DECIMALS TO 7
? Str( n ) // --> 2.51
? hb_ntoc( n ) // --> 2.509
? Str( n, 10, 7 ) // --> 2.5090000
? hb_ntoc( n, 7 ) // --> 2.509
? "--- pass non numeric / NIL value ----"
? Str( "42" ) // --> RTE
$STATUS$
R
$COMPLIANCE$
H
$FILES$
Library is core
$SEEALSO$
Str(), hb_ntos()
$END$


Век живи - век учись

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




Пост N: 7876
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.09.24 08:32. Заголовок: Григорий, можно сдел..


Григорий, можно сделать правку в коде ?
Ошибку хотя бы выводить...
      @ nY, nX FRAME Frame_1 ...    BACKCOLOR aBackColor 

Если aBackColor - строка, то программа падает 2 раза и понять какой объект на форме привел к падению НЕЛЬЗЯ !
Только ручной перебор, комменты ставить и компилировать.
Если вытащил форму из другого проекта - то развлечение ещё то...

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




Пост N: 2358
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.09.24 11:27. Заголовок: Andrey пишет: сли a..


Andrey пишет:

 цитата:
сли aBackColor - строка, то программа падает 2 раза


Добавил проверку - теперь такая ошибка игнорируется, и программа не падает.
Благодарю за подсказку

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




Пост N: 2360
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.10.24 13:15. Заголовок: SergKis Положил на ..


SergKis
Положил на ваш ftp модифицированные исходники tsbrowse для проверки.
Буду использовать их в следующей сборке, если все нормально работает.

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




Пост N: 4643
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.10.24 16:36. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
Положил на ваш ftp модифицированные исходники tsbrowse для проверки


В чем суть изменений ?
На что обратить внимание

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




Пост N: 2361
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.10.24 17:12. Заголовок: SergKis пишет: На ч..


SergKis пишет:

 цитата:
На что обратить внимание


Для корректной работы редактирования строки по правому клику (второго диалога) в функции SBrowse() cделал такое изменение:

 цитата:
   IF _HMG_lOOPEnabled 
DEFAULT uParam := oHmgData()
ELSE
uParam := oHmgData()
ENDIF


Это нужно сделать, если объект oTsb НЕ передается во втором параметре при вызове функции, иначе будет вылет программы.
Также постарался синхронизировать другие мелкие изменения и уточнения кода...

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




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


gfilatov2002 пишет
 цитата:
в функции SBrowse() cделал такое изменение:


это я видел

 цитата:
Также постарался синхронизировать другие мелкие изменения и уточнения кода...


посмотрю на своих примерах

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




Пост N: 2362
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.10.24 17:24. Заголовок: SergKis пишет: посм..


SergKis пишет:

 цитата:
посмотрю на своих примерах


Заранее большое спасибо за помощь
Сейчас завершается подготовка новой сборки.
Самая интересная новинка:

 цитата:
* New: The SPLITTER library source code (see in folder \Source\Splitter).
Don't miss this very interesting expansion!
Contributed by Kamil Kalus <kamilkalus0[at]gmail.com>

SYNTAX:

DEFINE SPLITTER <ControlName>
[ ID <nId> ]
[ OF, PARENT, DIALOG> <ParentWindowName> ]
[ AT <nRow> ,<nCol> ]
[ WIDTH <nWidth> ]
[ HEIGHT <nHeight> ]
[ VERTICAL ] [ HORIZONTAL ]
[ HIDEARROW ]
[ NOHOVER ]
[ USEGRADIENT ]
[ ROUNDED ]
[ COLOR <color> ]
[ BACKCOLOR <backColor> ]
[ COLORHOVER <hoverColor> ]
[ BACKCOLORHOVER <hoverBackColor> ]
[ GRADIENT <leftColor>, <middleColor> [, <rightColor> ] ]
[ GRADIENTHOVER <hoverLeftColor>, <hoverMiddleColor> [, <hoverRightColor> ] ]
[ SPLIT <aLeftControls> FROM <aRightControls> ]
[ LIMITS <aLimits> ]


Так выглядит самый простой пример использования:


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





Пост N: 95
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 05.10.24 07:10. Заголовок: gfilatov2002 Прошу ..


gfilatov2002
Прошу прощения за не профессионализм, просьба - где можно почитать расшифровку параметров по
данной функции (ВПРОЧЕМ КАК ПО ДРУГИМ).

[ GRADIENT <leftColor>, <middleColor> [, <rightColor> ] ]
[ GRADIENTHOVER <hoverLeftColor>, <hoverMiddleColor> [, <hoverRightColor> ] ]
[ SPLIT <aLeftControls> FROM <aRightControls> ]
[ LIMITS <aLimits> ]


Подробной документации нет.

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




Пост N: 4645
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.10.24 09:22. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
Положил на ваш ftp модифицированные исходники tsbrowse для проверки.
Буду использовать их в следующей сборке, если все нормально работает.


Покрутил примеры с tsbrowse, полет нормальный, прикрутил к версии 23.12 тоже ok!, кину эту версию Андрею, у него на ней реал. задача, проверит

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




Пост N: 4646
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.10.24 09:35. Заголовок: gfilatov2002 добавь..


gfilatov2002
добавьте в сервер REQUEST hb_NtoC, hb_EnumIndex, hb_cwd, LtoN

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




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


SergKis пишет:

 цитата:
добавьте в сервер REQUEST hb_NtoC, hb_EnumIndex, hb_cwd, LtoN


Добавил, конечно.

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




Пост N: 2364
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.10.24 11:34. Заголовок: Alex_Cher пишет: По..


Alex_Cher пишет:

 цитата:
Подробной документации нет


Да, вы правы.
Но в папке с исходниками этой библиотеки будет лежать файл doc.txt и, конечно, текст рабочих примеров прояснит смысл передаваемых параметров.

 цитата:
 
// Define a VERTICAL SPLITTER between the two EditBoxes
DEFINE SPLITTER VerticalSplitter ;
AT 50, 370 ; // Position the splitter between controls
WIDTH 10 ; // Width of the splitter
HEIGHT 250 ; // Height of the splitter
VERTICAL ; // Vertical splitter
SPLIT {"LeftEditBox"} FROM {"RightEditBox"} ; // Split the two controls
COLOR {0, 128, 255} ; // Set the color of the splitter
BACKCOLOR {230, 230, 230} ; // Background color
USEGRADIENT ; // Enable gradient effect
GRADIENT {255, 255, 255}, {0, 128, 255}, {0, 0, 128} ; // Gradient colors
GRADIENTHOVER {255, 200, 200}, {200, 50, 50}, {100, 0, 0} ; // Hover gradient colors
HIDEARROW ; // Hide the arrow icon
LIMITS {5, 10} // Define the minimum and maximum limits for each section



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




Пост N: 2365
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.10.24 09:48. Заголовок: Всем кому это интересно...


Опубликована финальная MiniGUI сборка 24.10

Стандартная сборка

Профессиональная сборка (под паролем)

Также были подготовлены дополнительные сборки для следующих компиляторов:

- MinGW GNU C 14.2.0 (packaged on 2024-10-05)

- BCC 7.70 (32-bit) (основан на коде Борланда)

- BCC 7.70 (64-bit) (основан на CLang 5.0)

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

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





Пост N: 96
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 09.10.24 12:09. Заголовок: gfilatov2002 Со сбо..


gfilatov2002
Со сборки 24.07 в наименование версии появилось (DEBUG)


Можете пояснить что то значит и на что то влияет.

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




Пост N: 2366
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.10.24 12:31. Заголовок: Alex_Cher пишет: чт..


Alex_Cher пишет:

 цитата:
что то значит и на что то влияет


Благодарю за вопрос
Это означает, что эта сборка предназначена для отладки программ:
- компилятор Харбор собран без использования оптимизационных параметров для GUI приложений;
- библиотека Минигуи собрана с сохранением отладочной информации (+100 кБ к размеру программы);
- на выходе из программы создается отладочный файл с информацией о статических переменных.
Если в программе есть утечка ресурсов, то на выходе создается файл с информацией об этих ресурсах и где в программе они были созданы.

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





Пост N: 97
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 10.10.24 07:37. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:


 цитата:
Это означает, что эта сборка предназначена для отладки программ:



Спасибо за ответ, прошу уточнить -
я так понимаю что за обычную рабочую сборку надо платить.


 цитата:
Если в программе есть утечка ресурсов, то


Пожалуста уточните - что такое утечка ресурсов .....

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




Пост N: 2367
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.10.24 10:45. Заголовок: Alex_Cher пишет: пр..


Alex_Cher пишет:

 цитата:
прошу уточнить - ... надо платить


Платить НЕ обязательно.
Вы можете собрать свою сборку на базе исходных текстов тестовой версии, либо отказаться от обновления и использовать Вашу старую "рабочую" версию.
Кстати, дополнительно платная версия предлагает различные продвинутые утилиты и примеры готовых приложений, а также исправленную и оптимизированную библиотеку SQLRDD, которая была портирована из xHarbour в среду Харбора.

Alex_Cher пишет:

 цитата:
что такое утечка ресурсов


По-простому, это когда в программе объявлены некоторые графические объекты (картинки, курсоры, звук или анимация), а на выходе из программы память, которая была для них выделена, НЕ освобождена программой.
Дело в том, что в библиотеку встроена система контроля объявления и освобождения ресурсов, которая в случае несовпадения (объявлено <> освобождено) сообщает об этом на выходе из программы.

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




Пост N: 58
Зарегистрирован: 13.09.07
ссылка на сообщение  Отправлено: 14.10.24 09:54. Заголовок: gfilatov2002 А как..


gfilatov2002

А как можно приобрести платную версию?

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




Пост N: 2368
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.10.24 10:37. Заголовок: leo пишет: как можн..


leo пишет:

 цитата:
как можно приобрести платную версию?


Есть два пути:

1. перевод с помощью платежного сервиса PayPal
2. если Вы резидент Украины - перевод на карточку Приватбанка

Вопрос суммы перевода решается в Л.С (личном сообщении) с учетом возможности плательщика

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




Пост N: 1974
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.10.24 13:28. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
1. перевод с помощью платежного сервиса PayPal


а нет варианта через частное лицо в РФ , закинуть через СБП по телефону ?
Просто нет желания с пейпалом заморачиваться т.к. тут с ним не все просто.

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




Пост N: 2369
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.10.24 13:42. Заголовок: Haz пишет: а нет ва..


Haz пишет:

 цитата:
а нет варианта через частное лицо в РФ


У меня нет представительства в РФ.
Разве что Андрей согласится помочь

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




Пост N: 59
Зарегистрирован: 13.09.07
ссылка на сообщение  Отправлено: 16.10.24 15:54. Заголовок: gfilatov2002 Я с У..


gfilatov2002

Я с Украины. Какая сумма платежа и номер карты?
Можно ответить на почту

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




Пост N: 2370
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.10.24 18:19. Заголовок: leo пишет: Можно от..


leo пишет:

 цитата:
Можно ответить на почту


Отправил письмо с личными данными.

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




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


Завершена подготовка следующей (ноябрьской) сборки библиотеки.

Что нового:
- исправление обнаруженных ошибок в ядре и в коде библиотеки TSBrowse;
- добавлена документация для основных классов, используемых в коде:
GraphPlus, HMG_Get, TCDOMail, TGif, TReg32, T7zip, TSimpleTaskDialog и TTaskDialog;
- добавлены подробные комментарии к коду некоторых библиотек и примеров;
- обновлен компилятор Харбор до свежей версии, которая наконец-то определяет Win 11, вышедшую уже три года назад;
- обновлена библиотека SQLITE3 до свежей версии 3.47.0;
- в ПРО-версию добавлены сырцы моего приложения Photo Resizer v.1.5 (это было запланировано сделать еще в апреле 2022).

Благодарю за ваше внимание
Желаю всем отличной пятницы

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




Пост N: 4654
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.10.24 16:46. Заголовок: gfilatov2002 Неточн..


gfilatov2002
Неточность в методе
 
METHOD GetCellInfo( nRowPos, nCell, lColSpecHd ) CLASS TSBrowse
...
IF lColSpecHd
nRow := ::nHeightHead + ::nHeightSuper + iif( oCol:l3DLook, 2, 0 )
nCol := nStartX + iif( oCol:l3DLook, 2, 0 )
nWidth := ::GetColSizes()[ nCell ] - iif( oCol:l3DLook, 2, 1 )
nHeight := ::nHeightSpecHd - iif( oCol:l3DLook, 1, -1 )
ELSE
nRow := nRowPos //- 1
nRow := ( nRow * ::nHeightCell ) + ::nHeightHead + ;
::nHeightSuper + ::nHeightSpecHd + iif( oCol:l3DLook, 2, 0 )
nCol := nStartX + iif( oCol:l3DLook, 2, 0 )
nWidth := ::GetColSizes()[ nCell ] - iif( oCol:l3DLook, 2, 0 )
nHeight := ::nHeightCell - iif( oCol:l3DLook, 1, -1 )
ENDIF
...
тогда
oCel := oBrw:GetCellInfo( oBrw:nRowCount(), oBrw:nColumn('FNAME') )
nY := oCel:nRow
попадаем правильно
и
nY := oCel:nRow + oCel:nHeight
тоже


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




Пост N: 2378
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.10.24 17:14. Заголовок: SergKis пишет: nRow..


SergKis пишет:

 цитата:
nRow := nRowPos //- 1


После этого исправления перестал работать пример Андрея Tsb_EditFields - позиция окна редактирования для типа DT смещена на строку ниже.

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




Пост N: 7907
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.10.24 17:54. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
После этого исправления перестал работать пример Андрея Tsb_EditFields - позиция окна редактирования для типа DT смещена на строку ниже.


Да я там наверное ручками подгонял. Исправить наверное нужно...

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




Пост N: 4655
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.10.24 17:57. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
После этого исправления перестал работать пример


Так будет, к сожалению.
Можно правку не делать, но тогда, для правильной работы, надо делать добавку
 
oCel := oBrw:GetCellInfo( oBrw:nRowCount(), oBrw:nColumn('FNAME') )
nY := oCel:nRow + oBrw:nHeightSpecHd // попасть в последнюю строку tbrowse
nY := oCel:nRow + oCel:nHeight + oBrw:nHeightSpecHd // попасть в Footer

хотя в методе :GetCellInfo oBrw:nHeightSpecHd уже учтена в расчете

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




Пост N: 2381
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.10.24 11:27. Заголовок: Опубликована финальн..


Опубликована финальная MiniGUI сборка 24.11

Стандартная сборка

Профессиональная сборка (под паролем)

Также были подготовлены дополнительные сборки для следующих компиляторов:

- MinGW GNU C 14.2.0 (packaged on 2024-10-05)

- BCC 7.70 (32-bit) (основан на коде Борланда)

- BCC 7.70 (64-bit) (основан на CLang 5.0)

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

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




Пост N: 2388
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.12.24 11:45. Заголовок: Всем кому это интересно


Опубликована финальная MiniGUI сборка 24.12

Стандартная сборка

Профессиональная сборка (под паролем)


 цитата:
The Pro version offers:
* Optimized Harbour binaries for enhanced performance.
* A release build of the MiniGUI library, improving application speed and stability.
* A wider range of sample applications, utilities, and tools.
* SQLRDD libraries for seamless SQL database integration.


Также были подготовлены дополнительные сборки для следующих компиляторов:

- MinGW GNU C 14.2.0 (32-bit и 64-bit)

- BCC 7.70 (32-bit и 64-bit)

- MS Visual C++ CE (32-bit и 64-bit)

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

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




Пост N: 4657
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.12.24 18:50. Заголовок: gfilatov2002 В прим..


gfilatov2002
В примере Tsb_filter_3 demo.prg добавьте
 
oBrw1:nClrLine := CLR_ORANGE
IF IsArray(oBrw1:aCheck)
AEval(oBrw1:aCheck, {|h| iif( Empty(h), , DeleteObject(h) ) })
ENDIF
oBrw1:aCheck := { LoadImage("bCheckT24"), LoadImage("bCheckF24") } // заменяем колонку CHECKBOX на свои картинки


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




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


SergKis пишет:

 цитата:
IF IsArray(oBrw1:aCheck)
AEval(oBrw1:aCheck, {|h| iif( Empty(h), , DeleteObject(h) ) })
ENDIF


Спасибо за поправку

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





Пост N: 242
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 11.12.24 16:02. Заголовок: TSBrowse: методы Excel2 и ExcelOle


Если изменить в реестре Windows параметр "Разделитель целой и дробной части" с "," на "."
то методы Excel2 и ExcelOle перестают нормально показывать цифровые поля.

Если это возможно, предлагаю сделать следующее:

1. Создать переменную sDecimal и в начале присвоить ей значение:
oReg := TReg32():New(HKEY_CURRENT_USER,'Control Panel\International',.F.)
sDecimal := oReg:Get('sDecimal',',')
oReg:Close()

2. METHOD Excel2:
Строка 6159 меняем ',' на sDecimal
Строки 6168 - 6171 меняем ',' на sDecimal

3. METHOD ExcelOle:
Строка 6702 меняем ',' на sDecimal

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




Пост N: 4659
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.12.24 16:46. Заголовок: krutoff пишет предла..


krutoff пишет
 цитата:
предлагаю сделать следующее


Вроде, хватало ф-ии
 
HB_FUNC( GET_SDECIMAL ) // Из региональных настроек дает разделитель дробной части
{
char sDec[2];
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, (LPTSTR) sDec, 2 );
hb_retclen( sDec, 1 );
}


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




Пост N: 8014
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.12.24 17:47. Заголовок: SergKis пишет: Врод..


SergKis пишет:

 цитата:
Вроде, хватало ф-ии


До кучи и можно переделать под себя
 
Func GetActualSeparator(Oxl)
return If(Oxl:UseSystemSeparators,{GET_STHOUSAND(),GET_SDECIMAL()},{Oxl:ThousandsSeparator,Oxl:DecimalSeparator})

HB_FUNC( GET_STHOUSAND )
{
char sDec[2];

GetLocaleInfo(LOCALE_USER_DEFAULT,
LOCALE_STHOUSAND,
(LPTSTR) sDec, 2 );
hb_retclen( sDec, 1 );
}




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




Пост N: 2390
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.12.24 16:01. Заголовок: Всем кому это интересно...


Через 10 лет после выхода этой утилиты от Клаудио удалось собрать его программу для HMG с помощью Минигуи.
Для этого пришлось повозится с добавлением отсутствующих в библиотеке возможностей.
Эти изменения будут включены в следующую сборку в новом году.

Главное окно программы имитирует Эксплорер Винды и выглядит так:



Если нужна дополнительная информация об этой утилите, пишите...

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




Пост N: 2391
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.12.24 17:05. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Если нужна дополнительная информация об этой утилите


Выложил эту утилиту по адресу

Скачать HMG Easy Build



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




Пост N: 2392
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.12.24 19:51. Заголовок: Всем, кому это интересно...


Завершена подготовка следующей (январской) сборки библиотеки.

Что нового:
- исправление обнаруженных ошибок в ядре библиотеки;
- расширен функционал элементов управления Tree и Grid;
- обновлена Bos Taurus Graphics Library;
- добавлены подробные комментарии к коду некоторых примеров;
- добавлена HMG Easy Build Utility, собранная с помощью BCC 7.70;
- обновлен компилятор Харбор до крайней версии;
- обновлена библиотека SQLITE3 до свежей версии 3.47.2;
- добавлено новое свойство HIcon для StatusBar элемента управления.

Благодарю за ваше внимание

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




Пост N: 2394
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.01.25 17:24. Заголовок: Всем, кому это интересно


gfilatov2002 пишет:

 цитата:
Завершена подготовка следующей (январской) сборки библиотеки.


Краткое описание: что нового в сборке 25.01.
Скрытый текст

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

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




Пост N: 7937
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.01.25 21:02. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
- Additional tools and samples to inspire and accelerate development.


А что это такое ?

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




Пост N: 2395
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.01.25 21:30. Заголовок: Andrey пишет: что э..


Andrey пишет:

 цитата:
что это такое ?


Это новые примеры из PRO-версии.

 цитата:

- HMG Easy Build: A GUI-based utility for managing .PRG and .HBP projects.
- HMG EasySQL: A simple library for seamless interaction with MySQL/MariaDB.
- ButtonEx Builder: An application for designing custom buttons.


HMG EasySQL - это новая библиотека, представленная основателем HMG Роберто Лопесом в конце ноября прошлого года, которая основана на использовании SQLMIX rdd.
Я ее адаптировал для использования со свежим Харбором 3.2, поскольку Роберто использует старый Харбор версии 3.1
Пример кода, который тестирует производительность сервера MySQL на различных операциях:
 
*---------------------------------------------------------------------------------------------*
PROCEDURE main_create_test_action
*---------------------------------------------------------------------------------------------*
LOCAL oSql := SQL():New()

LOCAL rowCount := 100
LOCAL t, i, lResult
LOCAL lError := .F.

WITH OBJECT oSql

// Testing MySQL...

IF ! :Connect( _MYSQL_SERVER_, _MYSQL_USER_, _MYSQL_PASSWORD_, _MYSQL_DATABASE_ )
RETURN
ENDIF

IF ! IsExistTable( oSql, "test_table" )
IF ! :Exec( "DROP TABLE IF EXISTS test_table" )
RETURN
ENDIF

IF ! :Exec( "CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), value INT)" )
RETURN
ENDIF
ENDIF

:lShowMsgs := .F.

// Individual Inserts
t := Seconds()

FOR i := 1 TO rowCount
IF ! :Exec( "INSERT INTO test_table (name, value) VALUES ('Name"+hb_ntos(i) + "'," + hb_ntos(i) + ")" )
RETURN
ENDIF
NEXT

:lShowMsgs := .T.

MsgInfo( Seconds() - t, "Individual Inserts" )

// Bulk Inserts

IF ! :Exec( "TRUNCATE TABLE test_table" )
RETURN
ENDIF

t := Seconds()

// Begin the transaction
IF ! :Exec( "START TRANSACTION" )
RETURN
ENDIF

:lShowMsgs := .F.

FOR i := 1 TO rowCount
lResult := :Exec( "INSERT INTO test_table (name, value) VALUES (" + ;
"'Name" + LTrim( Str( i ) ) + "', " + ;
LTrim( Str( i ) ) + ")" )

IF ! lResult
lError := .T.
EXIT
ENDIF
NEXT i

:lShowMsgs := .T.

// If no error occurred, commit the transaction
IF ! lError
IF ! :Exec( "COMMIT" )
RETURN
ENDIF
ENDIF

MsgInfo( Seconds() - t, "Bulk Inserts" )

// Select Test
t := Seconds()

IF ! :Select( "SELECT * FROM test_table", "Temp" )
RETURN
ENDIF

MsgInfo( Seconds() - t, "Select Test" )

EDIT EXTENDED

dbCloseArea( "Temp" )

// Delete Test
t := Seconds()

IF ! :Exec( "DELETE FROM test_table" )
RETURN
ENDIF

MsgInfo( Seconds() - t, "Delete Test" )

IF ! :Exec( "DROP TABLE IF EXISTS test_table" )
RETURN
ENDIF

:Disconnect()

END WITH

RETURN


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




Пост N: 4669
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.01.25 14:06. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправил немного SBrowse (ширину колонок, uParam, ...) Скрытый текст


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




Пост N: 2396
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.01.25 15:43. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправил немного SBrowse


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

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




Пост N: 2397
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.01.25 11:34. Заголовок: Опубликована финальн..


Опубликована финальная MiniGUI сборка 25.01

Стандартная сборка (zip архив)

Профессиональная сборка (архив под паролем)


 цитата:

The Pro version offers:
* Optimized Harbour binaries for enhanced performance.
* A release build of the MiniGUI library, improving application speed and stability.
* A wider range of sample applications, utilities, and tools.
* SQLRDD libraries for seamless SQL database integration.



Также были подготовлены дополнительные сборки для следующих компиляторов:

- MinGW GNU C 14.2.0 (32-bit и 64-bit)

- BCC 7.70 (32-bit и 64-bit)

- MS Visual C++ CE (32-bit и 64-bit)

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

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




Пост N: 2398
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.01.25 22:03. Заголовок: Всем кому это интересно


Привет всем!

В этот особенный для меня день хотел бы поблагодарить Андрея Верченко за многолетнюю поддержку проекта МиниГуи,
и пожелать ему скорейшего восстановления после тяжелой болезни.
Желаю тебе доброго здоровья и благополучия, мой друг!

Если бы не твоя настойчивость и упорство в постановке вопросов, многие интересные идеи НЕ были бы реализованы в библиотеке.

Благодарю также за твой неподдельный интерес в продвижении МиниГуи в сети, чтобы все могли получить новые знания от твоих примеров, созданных вместе с Сергеем!

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




Пост N: 8026
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.01.25 19:39. Заголовок: Андрюха выздоравлива..


Андрюха выздоравливай !

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




Пост N: 7938
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.02.25 15:35. Заголовок: Спасибо большое за п..


Спасибо большое за приятные слова !

gfilatov2002 пишет:

 цитата:
- BCC 7.70 (32-bit и 64-bit)


Чем отличается от 5.82 ?
В чём различие BCC 7.70 от BCC 5.82 ?
Может и писали об этом ранее, но я не нашёл.

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




Пост N: 8027
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.02.25 19:32. Заголовок: Andrey пишет: В чём..


Andrey пишет:

 цитата:
В чём различие BCC 7.70 от BCC 5.82 ?


http://clipper.borda.ru/?1-1-0-00000651-000-0-0-1730661677

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




Пост N: 7939
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.02.25 22:00. Заголовок: Там не написано об о..


Там не написано об отличиях.
Я понимаю что новая версия компилятора лучше старой, но хотелось бы знать в чём отличия.
Какая лицензия на него ?

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




Пост N: 2399
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.02.25 22:12. Заголовок: Andrey пишет: хотел..


Andrey пишет:

 цитата:
хотелось бы знать в чём отличия


Я писал об этом на английском форуме библиотеки:

 цитата:
Here’s a comparison of Borland C++ 5.8.2 and the latest 7.70 version in a 32-bit Windows environment:

Borland C++ 5.8.2 (2003)
Advantages:
- Legacy Compatibility: Better suited for older Windows (e.g., XP) applications and existing Borland libraries.
- Lightweight: Simpler setup and fewer dependencies, making it suitable for basic GUI and console applications.
- Fast Compilation: Known for fast compile times on smaller projects.

Disadvantages:
- Outdated C++ Standards: Limited C++11+ support.
- Lacks Modern Features: Incomplete support for modern Windows API features and debugging.

Borland C++ 7.70 (Latest Embarcadero)
Advantages:
- Modern C++ Standards: Supports C++11/14, improving compatibility with contemporary libraries.
- Enhanced Windows API Support: Better integration with newer Windows features.
- Improved Optimization and Toolchain: Enhanced executable efficiency and debugging tools.

Disadvantages:
- Higher System Requirements: Resource-intensive, with a larger footprint.
- Complexity: More complex setup, potentially overkill for legacy or simple 32-bit applications.

In essence, BCC 5.8.2 is better for legacy, lightweight projects, while BCC 7.70 offers more robustness and compatibility for modern applications.

Borland C++ 5.8.2 (32-bit only) does not support 64-bit architectures, making it limited in modern 64-bit Windows environments. In contrast, the latest Embarcadero C++ Compiler (BCC 7.7) offers native 64-bit support, optimizing for modern processors and memory capacities.

Borland C++ 5.8.2
Advantages: Suitable for 32-bit applications on older Windows; efficient on smaller projects.
Limitations: No 64-bit support; limited to older Windows versions.

Borland C++ 7.7
Advantages: 64-bit support, C++11+ standards, modern Windows API integration.
Limitations: Higher system demands; complex setup.

The Borland C++ 64-bit Compiler 7.7 is indeed based on the LLVM/Clang framework and not on the original Borland C++ codebase. Embarcadero shifted to the LLVM backend to modernize their compiler suite, enabling support for the latest C++ standards (C++11 and beyond) and improved compatibility across platforms, including 64-bit support.

This LLVM integration allows BCC 7.7 to leverage Clang’s optimization capabilities and cross-platform flexibility. Although branded as "BCC," it represents a significant departure from Borland’s original compiler architecture, focusing on modern development needs.

For 64-bit applications, BCC 7.7 is essential, while 5.8.2 is outdated in this environment.



Andrey пишет:

 цитата:
Какая лицензия на него ?


Лицензия на него похожа на лицензию для MSVC 2022:
- бесплатно для индивидуальных разработчиков или команд разработчиков до 5-ти человек и с ежегодным доходом до 5000 долларов.
- лицензия дается на один год, но для версии компилятора для командной строки такой проверки нет.

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





Пост N: 252
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 02.02.25 16:25. Заголовок: METHOD AdjColumns TSBrowse


METHOD AdjColumns TSBrowse работает только на расширение размера колонок бровса на постоянную величину.
А если форма по ON SIZE или ON RESTORE уменьшается - то колонки размер не меняют (не влезают в окно).
Предлагаю внести изменения в h_tbrowse.prg увеличения/уменьшения размера колонок по средневзвешенной величине:
Скрытый текст


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




Пост N: 4672
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.02.25 17:47. Заголовок: krutoff пишет METHOD..


krutoff пишет
 цитата:
METHOD AdjColumns TSBrowse работает только на расширение размера колонок бровса на постоянную величину


Этот метод не предусмотрен для исп. в ON SIZE или ON RESTORE, его назначение именно пропорционально "приталить" колонки к ширине окна TBrowse и к реальным размерам колонки (в pixel) не имеет отношения - это могут быть просто пропорции в условных единицах. Т.е. окно всегда шире колонок и они все помещаются в него. Ваш вариант уже работает к конкретным размерам колонок при дальнейшем применении AdjColumns, возможно, параметрами можно совместить ваше предложение в методе

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




Пост N: 4676
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.02.25 13:12. Заголовок: gfilatov2002 В прим..


gfilatov2002
В примере Tsb_2tsb\demo3.prg надо убрать строки (это уже учтено в _TBrowse(...))
 
FUNCTION Tbrowse_Customization( oBrw, oTsb ) // донастройка таблицы
...
NEXT

// правим Super Header
//IF oBrw:lSelector .and. oBrw:nColumn( "ORDKEYNO", .T. ) > 0
// FOR nI := 1 TO Len( oBrw:aSuperHead ) // с первой или со 2-ой колонки менять
// oBrw:aSuperHead[ nI ][2] += 1
// NEXT
//ENDIF

RETURN NIL

PS
В сборке BCC 7.70 нет hbodbc.lib

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




Пост N: 2401
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 07.02.25 13:21. Заголовок: SergKis пишет: В пр..


SergKis пишет:

 цитата:
В примере Tsb_2tsb\demo3.prg надо убрать строки


Поправил, конечно.
Благодарю за помощь

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




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


Опубликована финальная MiniGUI сборка 25.02

Стандартная сборка (zip архив)

Профессиональная сборка (7z архив под паролем)

---
Также были подготовлены дополнительные сборки для следующих C компиляторов:

- MinGW GNU C 14.2.0 (32-bit и 64-bit)

- BCC 7.70 (32-bit и 64-bit)

- MinGW GNU C 14.2.0 (32-bit) and Harbour 3.4

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

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




Пост N: 2403
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.03.25 20:36. Заголовок: Всем кому это интересно...


Завершена подготовка следующей сборки библиотеки.

Что нового:
- исправление обнаруженных ошибок в ядре библиотеки;
- добавлена возможность вносить комментарии в файлы JPG;
- добавлена возможность собирать библиотеку со свежим компилятором xHarbour с помощью BCC 7.70;
- обновлен компилятор Харбор до крайней версии (r2502211016);
- обновлена библиотека SQLITE3 до свежей версии 3.49.1;
- добавлено 5 (пять) новых интересных примеров.

Благодарю за ваше внимание

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




Пост N: 4682
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.03.25 12:57. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение добавить
 
FUNCTION _TBrowse( oParam, uAlias, cBrw, nY, nX, nW, nH )
...
IF HB_ISOBJECT( uAlias ) .and. "TODBC" $ uAlias:ClassName
oParam:oTODBC := uAlias
oParam:aHead := {}
IF HB_ISARRAY( oParam:oTODBC:Fields ) .and. Len( oParam:oTODBC:Fields ) > 0
FOR EACH o IN oParam:oTODBC:Fields
AAdd( oParam:aHead, o:FieldName )
NEXT
ELSE
AAdd( oParam:aHead, "Fields not found !" )
ENDIF
o := oParam:oTODBC
IF HB_ISARRAY( o:aRecordset ) .and. Len( o:aRecordset ) > 0
uAlias := o:aRecordset
ELSE
uAlias := { Array( Len( oParam:aHead ) ) }
ENDIF

ELSEIF HB_ISCHAR( uAlias ) .AND. ! "." $ uAlias

dbSelectArea( uAlias )
...

Пример BASIC\ODBC может быть такойСкрытый текст


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




Пост N: 2404
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.03.25 13:19. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение добавить


Добавил эти изменения
Благодарю за помощь

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




Пост N: 4683
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.03.25 16:57. Заголовок: gfilatov2002 Если д..


gfilatov2002
Если добавить в пример (выше) строки
... 
oTsb:lZebra := .T.
oTsb:cSuperHd := "Table name: " + cTbl
oTsb:lSuperHd := .T.
oTsb:aSuperHdColor := {CLR_YELLOW, CLR_BLUE} // {CLR_BLUE}

...

таблица будет иметь более законченный вид

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




Пост N: 2405
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.03.25 17:27. Заголовок: SergKis пишет: доба..


SergKis пишет:

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


OK

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




Пост N: 7945
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.25 19:06. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
- добавлена возможность вносить комментарии в файлы JPG;


А это как делать и для чего ?

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




Пост N: 2406
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.03.25 20:19. Заголовок: Andrey пишет: для ч..


Andrey пишет:

 цитата:
для чего ?


Файлы формата JPEG поддерживают создание текстового комментария, в который можно записать данные о создателе файла или любую другую информацию. Теперь доступна возможность записи или удаления такого комментария из файла.
Примечание. Для использования этой возможности потребуется подключение бесплатной freeimage.dll

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




Пост N: 2407
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.03.25 10:51. Заголовок: Опубликована финальн..


Опубликована финальная MiniGUI сборка 25.03

Стандартная сборка (zip архив)

Профессиональная сборка (7z архив под паролем)

---
Также были подготовлены дополнительные сборки для следующих C компиляторов:

- MinGW GNU C 14.2.0 (32-bit и 64-bit)

- BCC 7.70 (32-bit и 64-bit)

Если есть интерес в этих сборках - пишите...

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

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




Пост N: 1988
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.03.25 18:43. Заголовок: Завис последней строки в Tsb


в методе ::Paint()
Замена строки WHILE nI <= nLines .AND. nSkipped == 1

на WHILE nI <= ::nRowCount() .AND. nSkipped == 1

Решает вопрос. Почему nLines получает некорректное значение не разбирался

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




Пост N: 2409
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 07.03.25 20:00. Заголовок: Haz пишет: в методе..


Haz пишет:

 цитата:
в методе ::Paint()


Поправил
Благодарю за помощь

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




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


gfilatov2002 пишет:

 цитата:
Поправил


Григорий, это заплатка, показывающая в каком месте проблема. Поскольку, я ::lAppendMode не пользую, меня устраивает, но скорее-всего перед циклом нужно тупо повторить строчку инициализации nLines и использовать эту переменную в условиях цикла. В общем у себя оставлю так пока.

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




Пост N: 4684
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.03.25 12:31. Заголовок: Haz пишет скорее-все..


Haz пишет
 цитата:
скорее-всего перед циклом нужно тупо повторить строчку инициализации nLines и использовать эту переменную в условиях цикла


Возможно, надо значение переменной получать в цикле, т.к. прорисовка процесс длительный и появление новой строки в этот момент вносит разницу nLine и ::nRowCount(), что приводит к завису. Но нужна стабильная ситуация для проверки - у меня такого не происходит (::lAppendMode не пользую)

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




Пост N: 1990
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.03.25 13:40. Заголовок: SergKis пишет: Но ..


SergKis пишет:

 цитата:
Но нужна стабильная ситуация для проверки


Поймать завис последней строки легко , просто нужно чтоб совпало , что под последнюю строку осталось места чуть меньше ( на пару пикселей ) чем высота строки. И не используется метод динамичекого подбора высоты ::SetNoHoles()
В методе ::Paint() расчёт nLines правильный, происходит до ::DrawHeading() и возможно это влияет на результат возврата ::nRowCount() в последующем
Это явно видно если сравнивать значение nLines и ::nRowCount() перед циклом - к примеру
nLines = 29 а ::nRowCount() = 28.
Отсюда и попытка норисова лишнюю строку.
Разбираться в трёх строчках кода я не вижу смысла, тк ::nRowCount() в условии цикла WHILE меня полностью устраивает

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




Пост N: 4685
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.03.25 14:39. Заголовок: Игорь, спасибо, за р..


Игорь, спасибо, за разъяснение ситуации ошибки .
У меня не происходит такого по причине использования всегда ::SetNoHoles(), даже, если все высоты строк заданы и от них размера высоту тсб (клиентской области) считаю (от кол-ва row)

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




Пост N: 2410
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.03.25 17:57. Заголовок: SergKis пишет: надо..


SergKis пишет:

 цитата:
надо значение переменной получать в цикле


Так и сделал.
Поигрался с высотой строк в примере SAMPLES\Advanced\Tsb_lastrow, пример отработал нормально - залипания последнего ряда не было.
Благодарю за помощь

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




Пост N: 1991
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.03.25 15:11. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Так и сделал.
Поигрался с высотой строк в примере SAMPLES\Advanced\Tsb_lastrow, пример отработал нормально - залипания последнего ряда не было



Пересчет переменной внутри цикла рабочая , но не эффективная идея Это приведет к увеличению времени прорисовки бровса, не значительно но все же.
Что делает этот пересчет - вызывает метод ::nRowCount(), который вызывает С-функцию CountRows(). Функция арифметически считает сколько целых строк при заданной высоте строки поместится в клиентском окне бровса между хидингами и футингами. Если хидинги и футинги инициализированы и заданы их высоты, то никакие новые строки не влияют на эту арифметику.

А вот что реально влияет на арифметику , так это изменение размера клиентской области окна ::hWnd GetClientRect( ::hWnd, @aRect ) после вызова ::oHScroll:SetRange( 1, Len( ::aColumns ) )
После прорисовки горизонтального скролбара происходит уменьшение клиентской области окна бровса и соответственно ::nRowCount() уже выдаст другое значение
Тоже поигрался - работает
Вывод -
1 убрать расчет из тела цикла
2 Вернуть nLines в параметр цикла WHILE nI <= nLines .AND. nSkipped == 1
3 Иницилизировать nLines после строки ::oHScroll:SetRange( 1, Len( ::aColumns ) )

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




Пост N: 2411
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.03.25 16:15. Заголовок: Haz пишет: Haz пише..


Haz пишет:

 цитата:
После прорисовки горизонтального скролбара происходит уменьшение клиентской области окна бровса


Понял

Haz пишет:

 цитата:
Вывод -
1 убрать расчет из тела цикла


Убрал.

Haz пишет:

 цитата:
3 Иницилизировать nLines после строки


Рассчитываю значение nLines прямо перед циклом WHILE nI <= nLines .AND. nSkipped == 1
Благодарю за помощь

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




Пост N: 4703
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.25 20:50. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправьте FUNCTION _TBrowse(...)
 
:ResetVScroll( .T. )
IF !Empty( :oHScroll )
:oHScroll:SetRange( 0, 0 )
ENDIF


END TBROWSE


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




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


SergKis пишет:

 цитата:
Поправьте FUNCTION _TBrowse(...)


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

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




Пост N: 2414
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.04.25 11:30. Заголовок: Опубликована финальн..


Опубликована финальная MiniGUI сборка 25.04

Стандартная сборка (zip архив)

Профессиональная сборка (7z архив под паролем)

---
Также были подготовлены дополнительные сборки для следующих C компиляторов:

- MinGW GNU C 14.2.0 (32-bit и 64-bit)

- BCC 7.70 (32-bit и 64-bit)

Эти сборки доступны для всех доноров проекта.

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

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




Пост N: 4704
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.04.25 12:42. Заголовок: gfilatov2002 Правка..


gfilatov2002
Правка не большая в ZipToMem
 
ON RELEASE _wSend(90) // Send event 90 on release

При Post, в завершении, окно с данными может destroy сделать раньше, чем выполнится код event 90 и других вызовов, если они есть в :Event(90,...), тут все события должны работать по Send

В Tsb_MergeRowCells
 
WITH OBJECT This.Object
:Event( 0, {|ow,ob| ob := ow:Cargo:oTbl, ob:SetFocus(), ob:DrawSelect(), ob:Show(), DoEvents() })

...
STATIC FUNCTION TablePatam(...)
...
oTsb:bInit := {|ob| ob:Hide() }

oTsb:bAfter := {|ob|
...

мелькания будет меньше

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




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


SergKis пишет:

 цитата:
Правка не большая


Поправил, конечно.
Благодарю за помощь

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




Пост N: 4706
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.25 13:48. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение для WaitWindow(...) иметь значения в базе _HMG_NAMESLIST
 
FUNCTION WaitWindow ( cMessage, lNoWait, nWidth, nSize, cFont, aFontColor, aBackColor )
...
LOCAL nY, nX, nW, nI, nK, oo, lo
...
IF PCount() == 0
...
ELSE

#ifdef _NAMES_LIST_
IF HB_ISNUMERIC( lNoWait )
oo := _SetGetNamesList():Get( cFormName )
IF ( lo := Empty( oo ) ) ; oo := oHmgData()
ENDIF
IF HB_ISCHAR( cMessage ) .and. !Empty( cMessage )
oo:cMessage := cMessage
ENDIF
IF HB_ISCHAR( cFont ) .and. !Empty( cFont )
oo:cFontName := cFont
ENDIF
IF HB_ISARRAY( aFontColor ) .and. Len( aFontColor ) == 3
oo:aFontColor := aFontColor
ENDIF
IF HB_ISARRAY( aBackColor ) .and. Len( aBackColor ) == 3
oo:aBackColor := aBackColor
ENDIF
IF lo ; _SetGetNamesList():Set( cFormName, oo )
ENDIF
RETURN oo
ENDIF
#endif

IF HB_ISLOGICAL( cMessage )
lNoWait := cMessage
cMessage := NIL
#ifdef _NAMES_LIST_
oo := _SetGetNamesList( cFormName )
IF HB_ISOBJECT( oo )
DEFAULT aFontColor := oo:aFontColor, cMessage := oo:cMessage, ;
aBackColor := oo:aBackColor, cFont := oo:cFontName
ENDIF
#endif
DEFAULT cMessage := "... Wait for the preparation to complete ..."
ENDIF

hb_default( @lNoWait, .F. )
hb_default( @cFont, _HMG_DefaultFontName )
...

Тогда задание default значений можно делать вызовом (можно сделать команду на установку\замену данных)
WaitWindow ( "... WAIT FOR COMPLETION ...", 0,,, "DlgFont", YELLOW, RED )
WaitWindow ( , 0,,, , , BLUE )
...
добавляется простое применение (при работе без #ifdef _NAMES_LIST_ такде вызов ниже работает)
WaitWindow(.T.)
...
WaitWindow()
старые вызовы остаются в работе, как были + WaitWindow ( .T., ,,, "DlgFont", YELLOW, RED ) тоже

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




Пост N: 4707
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.25 15:14. Заголовок: PS Возможно, надо сд..


PS
Возможно, надо сделать так в строке
 
IF ( HB_ISCHAR( cMessage ) .or. HB_ISARRAY( cMessage ) ) .and. !Empty( cMessage )
oo:cMessage := cMessage
ENDIF


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




Пост N: 2416
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.04.25 16:21. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение для WaitWindow(...)


Принято.
Как обычно, благодарю за помощь

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




Пост N: 4708
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.25 16:57. Заголовок: gfilatov2002 пишет П..


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


Тогда еще немного добавки, она скорее относится к MODAL окну, выполнение на нем блока кода в ON INIT ...
 
FUNCTION WaitWindow ( cMessage, lNoWait, nWidth, nSize, cFont, aFontColor, aBackColor )
...
LOCAL hFont, cTmp, nTmp, cLbl, bOnInit, l_No_Wait := .T.
#ifdef _NAMES_LIST_
LOCAL oo, lo
#endif
...
ELSE

IF HB_ISBLOCK( lNoWait )
bOnInit := lNoWait
lNoWait := NIL
ENDIF

#ifdef _NAMES_LIST_
...
ELSE
DEFINE WINDOW _HMG_CHILDWAITWINDOW MODAL
IF HB_ISBLOCK( bOnInit )
l_No_Wait := .F.
ENDIF

ENDIF
...
IF HB_ISBLOCK( bOnInit )
nK := GetFormIndex( cFormName )
_HMG_aFormInitProcedure [ nK ] := bOnInit
ENDIF

END WINDOW
...
_ActivateWindow ( { cFormName }, l_No_Wait )

_HMG_IsModalActive := lIsModal

IF ! lNoWait
IF _IsWindowDefined( cFormName )
InkeyGUI( 0 )

IF _IsControlDefined ( "Timer", cFormName )
nCtEfeito := 0
cDescEfeito := ""
ENDIF

DoMethod ( cFormName, "Release" )
ENDIF

ENDIF
...


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




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


SergKis пишет:

 цитата:
еще немного добавки


OK

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




Пост N: 2418
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.04.25 12:11. Заголовок: SergKis пишет: можн..


SergKis пишет:

 цитата:
можно сделать команду на установку\замену данных


Добавил такую команду:

 цитата:

SET WAITWINDOW [ PROMPT TO <cMessage> ] [ FONT <cFont> ] ;
[ FONTCOLOR <fontcolor> ] [ BACKCOLOR <backcolor> ]



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




Пост N: 2421
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.04.25 15:18. Заголовок: Всем кому это интересно...


Завершается подготовка следующей (майской) сборки библиотеки.

Что нового:
Скрытый текст

Если у вас есть собственные дополнения в библиотеку, то еще не поздно предложить их к рассмотрению.

Благодарю за ваше внимание

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

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




Пост N: 4713
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.04.25 09:14. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение. Поправить и перенести в h_objmisc.prg ф-ии _wPost(), _wSend() до #ifdef _OBJECT_ Скрытый текст

При SET OOP OFF использовать как пустышки в таких местах
ON INIT {|| This.Topmost := .F., _wPost(0) }
ON RELEASE {|| This.Hide, _wSend(90) }

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




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


SergKis пишет:

 цитата:
Поправить и перенести в h_objmisc.prg ф-ии _wPost(), _wSend()


Поправил, конечно.
Благодарю за помощь

P.S. Пока не определился с датой публикации этой сборки...

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




Пост N: 4714
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.04.25 11:04. Заголовок: gfilatov2002 Валитс..


gfilatov2002
Валится This.SplitBox.Height
Called from VERIFYCONTROLDEFINED(6714) in module: h_controlmisc.prg
Called from GETPROPERTY(5248) in module: h_controlmisc.prg
пример App_OopColumns
 
DEFINE SPLITBOX OF &cWnd HANDLE hSpl
DEFINE TOOLBAR ToolBar_1 CAPTION "REPORT" BUTTONSIZE 72,32 FLAT
...
END SPLITBOX

_logfile(.T., _HMG_aFormReBarHandle [ This.Index ], hSpl, ;
GetWindowHeight(hSpl) /*, This.SplitBox.Height*/)
...


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




Пост N: 4715
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.04.25 11:50. Заголовок: PS Как узнать куда п..


PS
Как узнать куда прицеплен ToolBar, т.е. параметр [ <bottom: BOTTOM> ] ?
Чтобы сделать
IF This.ToolBar.Bottom
...
ENDIF

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




Пост N: 2423
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.04.25 12:01. Заголовок: SergKis пишет: Вали..


SergKis пишет:

 цитата:
Валится This.SplitBox.Height


Это нормально
В этой записи SplitBox трактуется как имя контрола, а это - окно-контейнер.

Поэтому, если нужно определить высоту окна SplitBox, можно использовать такой вызов

 цитата:
h := GetWindowHeight ( hSpl )




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




Пост N: 4716
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.04.25 12:36. Заголовок: gfilatov2002 пишет Э..


gfilatov2002 пишет
 цитата:
Это нормально


Не уверен.
Мы применили нормальную команду, которой должно быть все равно контрол или контейнер в обработке.
Получается много лишних телодвижений, надо
- запоминать где то hSpl и потом применять
- или помнить переменную окна _HMG_aFormReBarHandle и через индекс с анализом handle получать 0 или высоту GetWindowHeight(_HMG_aFormReBarHandle[GetFormIndex(cForm)])
Эту канитель в GetProperty(...) обработать проще, если не контрол и параметр "Height" выдать высоту или 0

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




Пост N: 2424
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.04.25 14:58. Заголовок: SergKis пишет: GetW..


SergKis пишет:

 цитата:
GetWindowHeight(_HMG_aFormReBarHandle[GetFormIndex(cForm)])


Сделал, конечно.
Благодарю за настойчивость

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




Пост N: 2425
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.04.25 15:02. Заголовок: SergKis пишет: Как ..


SergKis пишет:

 цитата:
Как узнать куда прицеплен ToolBar


Попробуй
Bottom := And ( GetWindowLong ( hToolbar , GWL_STYLE ), CCS_BOTTOM ) == CCS_BOTTOM


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




Пост N: 4717
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.04.25 16:07. Заголовок: gfilatov2002 Так ра..


gfilatov2002
Так работает
? "ToolBar BOTTOM:", GetWindowRow( This.ToolBar.Handle ), ;
And( GetWindowLong( This.ToolBar.Handle, GWL_STYLE ), CCS_BOTTOM ) == CCS_BOTTOM
но надо тащить
#define CCS_BOTTOM 3
хотелось бы по красивее команду

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




Пост N: 2426
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.04.25 18:21. Заголовок: SergKis пишет: хоте..


SergKis пишет:

 цитата:
хотелось бы по красивее команду


Как вариант, можно написать эквивалентную функцию на Си, тогда эта константа будет скрыта в .obj файле.

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




Пост N: 4718
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.04.25 19:12. Заголовок: gfilatov2002 пишет м..


gfilatov2002 пишет
 цитата:
можно написать эквивалентную функцию на Си


В h_controlmisc.prg есть #include "i_winuser.ch", можно и GetProperty() написать, как "Enabled" к контролу, возвращает .T.\.F.

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




Пост N: 2427
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.04.25 11:16. Заголовок: SergKis пишет: можн..


SergKis пишет:

 цитата:
можно и GetProperty() написать


Добавил свойство Alignment с таким описанием:

 цитата:

* Enhanced: 'Alignment' property is supported for TOOLBAR control.
You can get this property at runtime:
- function syntax:
GetProperty ( FormName, ToolBarName, 'Alignment' ) --> cAlignment
- pseudo-OOP syntax:
FormName.ToolBarName.Alignment --> cAlignment
where
cAlignment may be 'TOP' or 'BOTTOM'.
Requested by Sergej Kiselev.
Contributed by Grigory Filatov


Использовать:
IsTBbottom := (FormName.ToolBarName.Alignment == 'BOTTOM') // возвращает .T.\.F.
Благодарю за помощь

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




Пост N: 7970
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.05.25 13:24. Заголовок: Небольшой глюк по ок..


Небольшой глюк по окнам.
В проге стоит
   SET WINDOW MODAL PARENT HANDLE ON  // окна Modal получают родителя 

MAIN окно, далее вызываю STANDART, делаю MAIN.Minimize.
В окне первый же вызов MODAL окна (типа Alert* или MsgDebug) после закрытия этого окна, на экран лезет MAIN окно !!!
Потом после этого не лезет.
Выходим в MAIN окно, заново делаем ... и опять тоже самое, первый раз ВСЕГДА на экран лезет MAIN окно на передний план !
Юзеру ОЧЕНЬ некомфортно....
Как исправить ?

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




Пост N: 4719
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.05.25 14:42. Заголовок: Andrey пишет Как исп..


Andrey пишет
 цитата:
Как исправить ?


Повторю
 
FUNC Modal2(cParent, ...) // cParent - имя Modal(1)
...
ACTIVATE WINDOW &cForm

IF _IsWindowDefined(cParent)
DoMethod(cParent, "SetFocus")
ENDIF

RETURN aRet

PS
Вопрос такой ты уже задавал давно

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




Пост N: 7971
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.05.25 16:17. Заголовок: Я использую стандарт..


Я использую стандартные функции Alert****() !
Как я могу заблокировать показ MAIN окна в них ???
При повторном использовании функции Alert****() такого уже не происходит,
т.е. первый вызов Alert****() и после него показывается MAIN окно.

Можно это исправить в ядре МиниГуи ???

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




Пост N: 2429
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.05.25 21:21. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно это исправить в ядре МиниГуи ?


Благодарю за сообщение
Поправил возврат из функции Alert****() в вызвавшее эту функцию дочернее немодальное окно.
В первый раз заметно небольшое мигание при переключении фокуса на вызвавшее окно, при повторном возврате этого мигания нет.

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




Пост N: 7972
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.05.25 23:29. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Поправил возврат из функции Alert****() в


Можно исправленный исходник прислать мне на почту ?
Я попробую у себя в проекте.

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




Пост N: 2430
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.05.25 10:45. Заголовок: Andrey пишет: исход..


Andrey пишет:

 цитата:
исходник прислать мне на почту


Отправил, конечно...

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




Пост N: 2431
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.05.25 11:23. Заголовок: Всем кому это интересно


Опубликована финальная MiniGUI сборка 25.05

Стандартная сборка (zip архив)

Профессиональная сборка (7z архив под паролем)

---
Также были подготовлены дополнительные сборки для следующих C компиляторов:

- MinGW GNU C 15.1.0 (64-bit)

- BCC 7.70 (32-bit и 64-bit)

Эти сборки доступны для всех доноров проекта

Поздравляю всех с наступающим юбилеем Великой Победы!

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




Пост N: 4720
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.25 08:46. Заголовок: gfilatov2002 У себя ..


gfilatov2002 У себя сделал немного по другому для SPLITBOX
 
IF Upper( Arg2 ) == "SPLITBOX" .and. Upper( Arg3 ) $ "HEIGHT,WIDTH" ;
.and. GetControlIndex( Arg2, Arg1 ) == 0
RetVal := 0
IF ( ix := GetFormIndex( Arg1 ) ) > 0
IF IsWindowHandle ( Arg8 := _HMG_aFormReBarHandle [ ix ] )
IF Upper( Arg3 ) == "WIDTH" ; RetVal := GetWindowWidth ( Arg8 )
ELSEIF Upper( Arg3 ) == "HEIGHT" ; RetVal := GetWindowHeight( Arg8 )
ENDIF
ENDIF
ENDIF
RETURN RetVal

ELSEIF ( Upper( Arg2 ) == "VSCROLLBAR" .OR. Upper( Arg2 ) == "HSCROLLBAR" )
IF .NOT. _IsWindowDefined ( Arg1 )
MsgMiniGuiError ( "Window: " + Arg1 + " is not defined." )
ENDIF
ELSE
VerifyControlDefined ( Arg1 , Arg2 )
ENDIF

т.к. используется для вычисления клиентской области окна, то 0 тоже надо возвращать, если нет SPLITBOX, т.е.
nCliH := This.ClientHeight - This.SplitBox.Height - This.StatusBar.Height

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




Пост N: 2432
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.25 09:43. Заголовок: SergKis пишет: 0 то..


SergKis пишет:

 цитата:
0 тоже надо возвращать, если нет SPLITBOX


Благодарю за предложение
Как обычно, это очень практичное предложение, которое упрощает работу.

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




Пост N: 4721
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.25 16:09. Заголовок: gfilatov2002 Неболь..


gfilatov2002
Небольшая правка, Андрей нашел
 
METHOD RButtonDown( nRowPix, nColPix, nFlags ) CLASS TSBrowse
...
IF ! ::lNoVScroll .and. !Empty( ::oVScroll )
::oVScroll:SetPos( ::RelPos( ::nLogicPos() ) )
ENDIF

IF ! ::lNoHScroll .and. !Empty( ::oHScroll )
::oHScroll:SetPos( ::nCell )
ENDIF
...


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




Пост N: 2433
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.25 16:26. Заголовок: SergKis пишет: Небо..


SergKis пишет:

 цитата:
Небольшая правка


Спасибо, но такие проверки отсутствуют и в других методах, не только в RButtonDown().

 цитата:

IF ! ::lNoVScroll .AND. ::oVScroll != NIL
...



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




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


gfilatov2002 пишет
 цитата:
такие проверки отсутствуют и в других методах


По идее, надо чистить. У Андрея задача с основным экраном тсб (колонки помещаются во окно) и второй экран, где правые колонки появляются по CheckBox и колонок больше чем 2-а окна тсб, но при этом oHScroll := NIL, нет горизонтального scroll, попытка установить правый клик, привели к сбою

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




Пост N: 2434
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.25 19:16. Заголовок: SergKis пишет: попы..


SergKis пишет:

 цитата:
попытка установить правый клик, привели к сбою


Поправил, конечно.
Благодарю за помощь

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




Пост N: 4723
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.25 20:09. Заголовок: gfilatov2002 Сканир..


gfilatov2002
Сканировал в h_tbrowse.prg "::oHScroll", мест где надо добавлять проверку немного, самое сложное место это где надо отделить значение ::Cell := ...
 
METHOD HThumbDrag( nPos ) CLASS TSBrowse
...
IF ::lIsTxt
IF ::oHScroll != NIL
::oHScroll:SetPos( ::nAt := nPos )
ENDIF
ELSE
IF ::lLockFreeze .AND. nPos <= ::nFreeze // watch out for frozen columns
::nCell := ::nFreeze + 1
IF ::oHScroll != NIL
::oHScroll:SetPos( ::nCell )
ENDIF

ELSE
::nCell := Min( nPos, Len( ::aColumns ) )
IF ::oHScroll != NIL
::oHScroll:SetPos( ::nCell )
ENDIF

ENDIF
...
цветом выделенное можно вынести за ENDIF, т.е.
IF ::lIsTxt
::nAt := nPos
IF ::oHScroll != NIL
::oHScroll:SetPos( ::nAt )
ENDIF
ELSE
IF ::lLockFreeze .AND. nPos <= ::nFreeze // watch out for frozen columns
::nCell := ::nFreeze + 1
ELSE
::nCell := Min( nPos, Len( ::aColumns ) )
ENDIF
IF ::oHScroll != NIL
::oHScroll:SetPos( ::nCell )
ENDIF
...


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




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


SergKis пишет:

 цитата:
METHOD HThumbDrag( nPos ) CLASS TSBrowse


В этом методе чуть выше уже есть проверка условия

 цитата:
IF ::oHScroll != NIL .AND. ! Empty( nPos )
...


так что дополнительные проверки излишни.

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




Пост N: 4724
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.25 22:50. Заголовок: gfilatov2002 :sm36:..


gfilatov2002 Не увидел

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




Пост N: 4728
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.05.25 14:41. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение добавить в _TBrowse к oTsb:lZebra вариант oTsb:lChess раскраска строк шахматкой
 
FUNCTION _TBrowse( oParam, uAlias, cBrw, nY, nX, nW, nH )
...
LOCAL i, j, o, lChess, aChess
...
.OR. !Empty( oParam:lZebraRow )
lChess := !Empty( oParam:lChess ) .OR. !Empty( oParam:lChessLine ) ;
.OR. !Empty( oParam:lChessRow )

...
IF lZebra
aZebra := oParam:aZebra ; DEFAULT aZebra := oParam:aZebraColor
DEFAULT aZebra := { GetSysColor( COLOR_WINDOW ), GetSysColor( COLOR_BTNFACE ) }
IF IsArray( aZebra ) .AND. Len( aZebra ) > 1
IF IsArray( aZebra[1] ) .and. IsArrayRGB( aZebra[1] )

aZebra[1] := HMG_RGB2n( aZebra[1] )
ENDIF
IF IsArray( aZebra[2] ) .and. IsArrayRGB( aZebra[2] )

aZebra[2] := HMG_RGB2n( aZebra[2] )
ENDIF
IF IsNumeric( aZebra[1] ) .AND. IsNumeric( aZebra[2] )
AAdd( aColor, { CLR_PANE, {|c,n,b| c := aZebra[2], n := aZebra[1], ;
iif( b:nAt % 2 == 0, c, n ) } } )
ENDIF
ENDIF
ELSEIF lChess
aChess := oParam:aChess ; DEFAULT aChess := oParam:aChessColor
DEFAULT aChess := { GetSysColor( COLOR_WINDOW ), GetSysColor( COLOR_BTNFACE ) }
IF IsArray( aChess ) .AND. Len( aChess ) > 1
IF IsArray( aChess[1] ) .and. IsArrayRGB( aChess[1] )
aChess[1] := HMG_RGB2n( aChess[1] )
ENDIF
IF IsArray( aChess[2] ) .and. IsArrayRGB( aChess[2] )
aChess[2] := HMG_RGB2n( aChess[2] )
ENDIF
AAdd( aColor, { CLR_PANE, {|nr,nc,nn|
IF nr % 2 == 0 ; nn := iif( nc % 2 == 0, 1, 2 )
ELSE ; nn := iif( nc % 2 == 0, 2, 1 )
ENDIF
Return aChess[ nn ]
} } )
ENDIF

ENDIF
...

Применять
oTsb:lChess := .T.
oTsb:aChess := { CLR_HGRAY, CLR_WHITE }
по умолчанию будет DEFAULT aChess := { GetSysColor( COLOR_WINDOW ), GetSysColor( COLOR_BTNFACE ) }

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




Пост N: 2441
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.05.25 18:56. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение добавить в _TBrowse вариант oTsb:lChess


Принято с благодарностью

Порадовало использование встроенной функции IsArrayRGB()

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




Пост N: 4733
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.25 11:41. Заголовок: gfilatov2002 Неболь..


gfilatov2002
Небольшая правка h_objects.prg
 
CLASS TWndData
...
VAR oEvents AS OBJECT
...
METHOD Def( nIndex, cName, nHandle, nParent, cType, cVar ) INLINE ( ;
::nIndex := nIndex, ::cName := cName, ::nHandle := nHandle, ;
::nParent := nParent, ::cType := cType, ::cVar := cVar, ;
::oCargo := oHmgData(), ::oOnEventBlock := oKeyData( Self, .T. ), ;
::oEvent := oKeyData( Self ), ::oUserKeys := oHmgData(), ;
::oName := oHmgData(), ::oHand := oHmgData(), ;
::oProp := oHmgData(), ::oParam := oHmgData(), ;
::oEvents := oHmgData(), ;

hmg_SetWindowObject( ::nHandle, Self ), ;
::nLeft := ::oApp:Left, ::nRight := ::oApp:Right, ;
::nTop := ::oApp:Top, ::nBottom := ::oApp:Bottom, ;
::nGapWidth := ::oApp:GapsWidth, ;
::nGapHeight := ::oApp:GapsHeight, ;
Self )
...


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




Пост N: 2442
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.05.25 12:21. Заголовок: SergKis пишет: Небо..


SergKis пишет:

 цитата:
Небольшая правка


Поправил, конечно.
Благодарю за помощь

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




Пост N: 4737
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.05.25 20:12. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение\правка _TBrowse(...), h_controlmisc2.prg в примерах (новые demo4., demo5.prg)
https://TransFiles.ru/75j4e
на ftp так же положил архив

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




Пост N: 2444
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.05.25 10:08. Заголовок: SergKis пишет: на f..


SergKis пишет:

 цитата:
на ftp так же положил архив


Забрал...

SergKis пишет:

 цитата:
правка _TBrowse(...)


Принято с благодарностью

SergKis пишет:

 цитата:
новые demo4., demo5.prg


Как всегда, просто и лаконично Одним словом - профессионально!

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




Пост N: 4738
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.05.25 17:12. Заголовок: gfilatov2002 Положи..


gfilatov2002
Положил на ftp demo6, добавил немного дизайна и показ удаленных записей

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




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


SergKis пишет:

 цитата:
добавил немного дизайна и показ удаленных записей


Спасибо

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




Пост N: 4739
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.05.25 11:49. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправьте в demo7.prg
 
MAIN NOSIZE TOPMOST ;
ON INIT _wPost( 0) ;
ON RELEASE _wSend(90)

_wPost(90) в примере будет тоже нормально работать, т.к. событие быстрое, но правильнее писать всегда _wSend(90)

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




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


SergKis пишет:

 цитата:
Поправьте в demo7.prg


OK

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




Пост N: 7993
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.05.25 17:50. Заголовок: Не работает закрытие..


Может в маленьких прогах это работает, но на больших -
НЕ работает закрытие окна, прога тупо ВЕШАЕТСЯ !!!
    
IF !Empty( _HMG_MainHandle ) ; _HMG_InplaceParentHandle := GetActiveWindow()
ENDIF

DEFINE WINDOW &cForm .... ;
MODAL NOSIZE ;
ON INIT _wPost( 0) ;
ON RELEASE _wSend(98)
...
:Event(98, {|ow,ky,cn| // ON Release
Local ah := ow:Cargo:ahIcoDel
? ProcNL()
?? "---[ "+ow:Name+":Event("+hb_ntos(ky)+") ]---",cn
? Repl(".", 5), "=> RELEASE WINDOW <=", ow:Name
? Repl(".", 5),"Delete handle icon - ow:Cargo:ahIcoDel="
?? ah, HB_ValToExp(ah)
IF IsArray(ah)
AEval(ah, {|h| DestroyIcon(h) }) // удалить хендлы иконок
ENDIF
(ow:Cargo:cAls)->( dbCloseArea() )
DbSelectArea(ow:Cargo:cAlsParent) // база с родительского окна
? Repl(".", 5),"Alias()=", ALIAS()
?v HMG_GetForms()
? "------------"
Return Nil
} )
Вот что в логе:
..... => RELEASE WINDOW <= FORM_ZAIVKA_F7Filter
..... Delete handle icon - ow:Cargo:ahIcoDel= ARRAY[1] {2949589}
..... Alias()= ZAIVKA
1 Form_Main
2 FORM_ZAIVKA
3 FORM_ZAIVKA_F7Filter <<<---------- окно не закрывается
------------

Куда копать ?

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




Пост N: 4740
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.05.25 18:26. Заголовок: Andrey пишет Куда ко..


Andrey пишет
 цитата:
Куда копать ?


Надо понимать, как это работает, ставя в ON RELEASE ... ?v HMG_GetForms() окно еще есть, т.к. RELEASE НЕ закончил работу работает блок кода заданный, т.е. твой

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




Пост N: 7994
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.05.25 21:39. Заголовок: SergKis пишет: Надо..


SergKis пишет:

 цитата:
Надо понимать, как это работает, ставя в ON RELEASE ... ?v HMG_GetForms() окно еще есть, т.к. RELEASE НЕ закончил работу работает блок кода заданный, т.е. твой


Там минимум кода. В других местах работает этот код.
А в этом коде на этом и ВИСИТ програ, значит не завершается...
Почему не завершается, что мешает ???
Хочу понять что неправильно делаю.

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




Пост N: 4741
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 31.05.25 03:16. Заголовок: gfilatov2002 Положи..


gfilatov2002
Положил на ftp пример по вопросу Андрея "ВИСИТ програ" + readme.txt

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




Пост N: 2447
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.05.25 12:58. Заголовок: SergKis пишет: прим..


SergKis пишет:

 цитата:
пример по вопросу Андрея "ВИСИТ програ" + readme.txt


Благодарю за пример и пояснения к нему.
Поправил код библиотеки для возврата фокуса на модальное окно из функции AlertInfo().
Убрал из примера строку EnableWindow( ky := ow:Handle ), и он отработал нормально.
Благодарю за помощь!

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




Пост N: 7996
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.05.25 15:58. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Поправил код библиотеки для возврата фокуса на модальное окно из функции AlertInfo().


У меня нет в коде вызова Alert*(), но прога всё равно вешается ДАЖЕ просто при выходе из окна.
Но при добавлении 4 строк - перестаёт вешаться:
      // --------- работает !!! 
:Event({88,"_F7Cancel"}, {|ow,ky,cn| //Отмена
?? "---[ "+ow:Name+":Event("+hb_ntos(ky)+") ]---",cn
App.Cargo:aRetFltr := {}
// ОБЯЗАТЕЛЬНО ! добавка для возврата на родит.окно
EnableWindow( ky := ow:Handle )
ow:Enabler(cn, .T.)
ow:SetFocus(ow:Cargo:cFocus)
DO EVENTS
// ОБЯЗАТЕЛЬНО ! добавка для возврата на родит.окно

_wSend(99, ow:Name) //ThisWindow.Release
Return Nil
} )

Надо проверить возврат в модальном окне
Пример могу выслать, если нужно.

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




Пост N: 4743
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.06.25 10:41. Заголовок: gfilatov2002 Может ..


gfilatov2002
Может стоит добавить в GetProperty(...) получение height, width или 0 для StatusBar, без исп. _IsControlDefined(...), для вычисления клиентской области окна ?
nH := This.ClientHeight - This.SplitBox.Height - This.StatusBar.Height
 
IF ( Upper( Arg2 ) == "VSCROLLBAR" .OR. Upper( Arg2 ) == "HSCROLLBAR" )

IF .NOT. _IsWindowDefined ( Arg1 )
MsgMiniGuiError ( "Window: " + Arg1 + " is not defined." )
ENDIF

ELSEIF Upper( Arg2 ) == "SPLITBOX"

IF ( ix := GetFormIndex ( Arg1 ) ) > 0 .AND. IsWindowHandle ( Arg8 := _HMG_aFormReBarHandle [ix] )

IF Arg3 == "WIDTH"
RETURN GetWindowWidth ( Arg8 )

ELSEIF Arg3 == "HEIGHT"
RETURN GetWindowHeight ( Arg8 )
ENDIF

ENDIF

ELSEIF Upper( Arg2 ) == "STATUSBAR" .and. ( Arg3 == "WIDTH" .or. Arg3 == "HEIGHT" )

RetVal := 0
IF ( ix := GetControlIndex( Arg2, Arg1 ) ) > 0
IF Arg3 == "HEIGHT"
RetVal := _HMG_aControlHeight[ ix ]
ELSEIF Arg3 == "WIDTH"
RetVal := _HMG_aControlWidth [ ix ]
ENDIF
ENDIF
RETURN RetVal

ELSE
VerifyControlDefined ( Arg1 , Arg2 )
ENDIF

PS.
По мне, это многое упростило бы, все запросы на width, height к контролам\окнам, если их нет, возвращали бы 0

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




Пост N: 2448
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.06.25 14:39. Заголовок: SergKis пишет: Може..


SergKis пишет:

 цитата:
Может стоит добавить в GetProperty(...) получение height, width или 0 для StatusBar


Благодарю за предложение, но уже сейчас это возможно, если напрямую использовать вызов этой функции

 цитата:
_getcontrolHeight("STATUSBAR","Form_1")


Она вернет 0, если статусбара нет на форме.

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




Пост N: 4744
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.06.25 15:07. Заголовок: Тогда, может быть, н..


Тогда, может быть, надо выделить в i_this.ch из общего списка
#xtranslate This . <c> . <p:Width> => _GetControlWidth ( <(c)>, _HMG_THISFORMNAME )
#xtranslate This . <c> . <p:Height> => _GetControlHeight ( <(c)>, _HMG_THISFORMNAME )
и в h_objects.prg CLASS TWndData добавить
 
METHOD Enabler( cName, xVal ) INLINE SetProperty( ::cName, cName, "Enabled", ! Empty( xVal ) )
METHOD GetWidth ( cName ) INLINE iif( Empty( cName ), ::Width , _GetControlWidth ( cName, ::cName ) )
METHOD GetHeight( cName ) INLINE iif( Empty( cName ), ::Height, _GetControlHeight( cName, ::cName ) )
METHOD GetRow( cName ) INLINE iif( Empty( cName ), ::Row, _GetControlRow ( cName, ::cName ) )
METHOD GetCol( cName ) INLINE iif( Empty( cName ), ::Col, _GetControlCol ( cName, ::cName ) )



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




Пост N: 2449
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.06.25 16:40. Заголовок: SergKis пишет: в h_..


SergKis пишет:

 цитата:
в h_objects.prg CLASS TWndData добавить


Но ведь в классе TCnlData (наследнике TWndData) уже есть эти определения

 цитата:

ACCESS Row INLINE _GetControlRow ( ::cName, ::oWin:Name )
...
ACCESS Col INLINE _GetControlCol ( ::cName, ::oWin:Name )
...
ACCESS Width INLINE _GetControlWidth ( ::cName, ::oWin:Name )
...
ACCESS Height INLINE _GetControlHeight( ::cName, ::oWin:Name )



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




Пост N: 4745
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.06.25 16:51. Заголовок: gfilatov2002 пишет в..


gfilatov2002 пишет
 цитата:
в классе TCnlData (наследнике TWndData) уже есть эти определения


Для этого надо получать объект контрола, т.е. ( This.&(cn).Object ):Height и ..., если в событии This окна, то проще использовать переменную ow
{|ow,ky,cn| _LogFile(.T., ky, ow:GetHeight(cn)) }
если в событии This контрола, то тогда конечно
{|obtn| _LogFile(.T., obtn:Height)}

но можно обойтись, конечно и This.&(cn).Height

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




Пост N: 2450
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.06.25 17:17. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для этого надо получать объект контрола


Понял.
Тогда, вероятно, имеет смысл вернутся к первому предложению.

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




Пост N: 7998
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.06.25 15:32. Заголовок: Ещё небольшое предло..


Ещё небольшое предложение.
Имеем такой синтаксис: This.&(cn).Enabled := .T.
Если писать по другому, то такой - ow:Enabler(cn, .T.)
Иногда ошибаешься и пишешь так - ow:Enabled(cn, .T.)
Можно в препроцессоре добавить замену для такого случая ?

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




Пост N: 4747
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.06.25 16:52. Заголовок: Andrey Имя Enabled у..


Andrey
Имя Enabled уже занято, см. CLASS TWndDatat
 
ACCESS Enabled INLINE IsWindowEnabled ( ::nHandle )
ASSIGN Enabled( xVal ) INLINE iif( Empty( xVal ), DisableWindow ( ::nHandle ), EnableWindow ( ::nHandle ) )

т.е. используем для состояния окна
ow:Enabled := .F.
...
ow:Enabled := .T.

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




Пост N: 2451
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.06.25 09:05. Заголовок: Опубликована финальн..


Опубликована финальная MiniGUI сборка 25.06

Стандартная сборка (zip архив)

Профессиональная сборка (7z архив под паролем)

---
Также были подготовлены дополнительные сборки для следующих C компиляторов:

- MinGW GNU C 15.1.0 (64-bit)

- BCC 7.70 (32-bit)

Эти сборки доступны для всех доноров проекта

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

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




Пост N: 4748
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.06.25 14:32. Заголовок: gfilatov2002 Может ..


gfilatov2002
Может стоит, сделать, что бы все контролы, на запрос width, height выдавали 0 при отсутствии ?
 
IF ( Upper( Arg2 ) == "VSCROLLBAR" .OR. Upper( Arg2 ) == "HSCROLLBAR" )

IF .NOT. _IsWindowDefined ( Arg1 )
MsgMiniGuiError ( "Window: " + Arg1 + " is not defined." )
ENDIF
/*
ELSEIF Upper( Arg2 ) == "SPLITBOX"

IF ( ix := GetFormIndex ( Arg1 ) ) > 0 .AND. GetControlIndex( Arg2, Arg1 ) == 0

IF IsWindowHandle ( Arg8 := _HMG_aFormReBarHandle [ix] )

IF Arg3 == "WIDTH"
RETURN GetWindowWidth ( Arg8 )

ELSEIF Arg3 == "HEIGHT"
RETURN GetWindowHeight ( Arg8 )
ENDIF
ELSE
RETURN 0
ENDIF

ENDIF

ELSEIF Upper( Arg2 ) == "STATUSBAR"

IF ( ix := GetControlIndex( Arg2, Arg1 ) ) > 0
IF Arg3 == "HEIGHT"
RETURN _HMG_aControlHeight [ix]
ELSEIF Arg3 == "WIDTH"
RETURN _HMG_aControlWidth [ix]
ENDIF
ELSE
RETURN 0
ENDIF[
*/

ELSEIF ( Arg3 == "HEIGHT" .or. Arg3 == "WIDTH" ) .and. !Empty( Arg1 )

IF GetControlIndex( Arg2, Arg1 ) == 0
IF Upper( Arg2 ) == "SPLITBOX" .and. IsWindowHandle ( Arg8 := _HMG_aFormReBarHandle [ix] )
RETURN iif( Arg3 == "WIDTH", GetWindowWidth ( Arg8 ), GetWindowHeight ( Arg8 ) )
ELSE
RETURN 0
ENDIF
ENDIF

ELSE
VerifyControlDefined ( Arg1 , Arg2 )
ENDIF


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




Пост N: 2452
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.06.25 16:26. Заголовок: SergKis пишет: сдел..


SergKis пишет:

 цитата:
сделать, что бы все контролы, на запрос width, height выдавали 0 при отсутствии


Нет, стандартным способом определить наличие контрола на форме остается вызов функции _IsControlDefined().
Исключение было сделано для SPLITBOX и STATUSBAR для удобства расчета размеров клиентской области, как ты и предлагал.

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




Пост N: 4749
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.06.25 20:13. Заголовок: gfilatov2002 Можно ..


gfilatov2002
Можно получить PRO версию на посмотреть

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




Пост N: 2453
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.06.25 21:25. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно получить PRO версию


Да, конечно. Полная версия дистрибутива 25.06 есть у Андрея.

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




Пост N: 4750
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.06.25 11:35. Заголовок: gfilatov2002 Нужен ..


gfilatov2002
Нужен пароль для архива, у Андрея его нет.
Архив я взял из Пост N: 2451 этой темы

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




Пост N: 2454
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.06.25 11:45. Заголовок: SergKis пишет: Нуже..


SergKis пишет:

 цитата:
Нужен пароль для архива


Отправил пароль по почте bilance@bilance...


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




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


gfilatov2002 пишет
 цитата:
Отправил пароль по почте bilance@bilance...


Для меня, этой почты\фирмы уже нет, фирму купили литовцы

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




Пост N: 2455
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.06.25 12:29. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для меня, этой почты\фирмы уже нет


Тогда куда кинуть?

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




Пост N: 4752
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.06.25 14:00. Заголовок: gfilatov2002 пишет Т..


gfilatov2002 пишет
 цитата:
Тогда куда кинуть?


Спасибо, Андрей уже дал пароль, он отработал

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




Пост N: 8001
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.06.25 00:41. Заголовок: Версия МиниГуи 25.06..


Версия МиниГуи 25.06
Что то WaitWindows() формы передергивает.
При закрытии моей формы MODAL вот такое событие:
         :Event({98,"_1Cancel"}, {|ow,ky,cn| // выход 
_LogFile(.T., " -->> Button: ",cn, ow:Name, ky)
_SetThisFormInfo(ow)
// запись всей записи базы
WaitWindow( {'Запись данных в БД-' + ow:Cargo:cAls, App.ExeName }, .T., 400, 16, NIL, WHITE, PURPLE )
....
WaitWindow()

_SetThisFormInfo()
aRet := {}
_wSend(99,ow:Name)
Return Nil
} )

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

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




Пост N: 4753
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.25 15:28. Заголовок: Andrey пишет Появляе..


Andrey пишет
 цитата:
Появляется окно MAIN, потом WaitWindow(), после записи переход на предыдущую форму. Мелькают формы на экране...


gfilatov2002
Такую ситуацию получить не удалось, но бяка нашлась. Пример https://TransFiles.ru/hvick
Жмем кнопки <Test 1> => <Modal> => <Modal> => <Calculation>
по завершению можем мышкой переключить фокус на main окно, а находимся на modal окне,
если сразу запустить кнопку <Info>, то снова все Ok! на main окно фокус не поставить
PS.
Вариант WaitWindow(cMsg, bWait) так же приводит к такому результату, т.е работа ф-ии
Скрытый текст

Примеры положил на ftp

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




Пост N: 2456
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.06.25 21:38. Заголовок: SergKis пишет: по з..


SergKis пишет:

 цитата:
по завершению можем мышкой переключить фокус на main окно


Да, я подтверждаю эту проблему.
Вывод: не стоит применять вызов функции WaitWindow() из модального окна, поскольку в этом случае вызывается дочернее окно, что, на самом деле, запрещено в системе.

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




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


gfilatov2002 пишет
 цитата:
подтверждаю эту проблему


Для варианта WaitWindow(..., .T., ...) - это child окно, но вариант WaitWindow(..., bBlock, ...) - это modal окно (пример из архива Tsb_2tsb_a.7z), т.е. работа блока кода в окне ожидания (событие ON INIT окна) так же приводит к проблемной ситуации. В ф-ии работает цепочка, выделенная цветом
 
IF lNoWait
_HMG_IsModalActive := .F.
DEFINE WINDOW _HMG_CHILDWAITWINDOW CHILD
ELSE
DEFINE WINDOW _HMG_CHILDWAITWINDOW MODAL
IF HB_ISBLOCK( bOnInit )
l_No_Wait := .F.
ENDIF

ENDIF

т.е. запуск модального окна ожидания под модальным окном, должно быть Ok!, а ситуация такая же как с child

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




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


gfilatov2002 пишет:

 цитата:
Вывод: не стоит применять вызов функции WaitWindow() из модального окна, поскольку в этом случае вызывается дочернее окно, что, на самом деле, запрещено в системе.


Какой тогда выход из такой проблемы ?
Делать своё окно, хорошее решение.
НО, хочется иметь стандартную функцию в МиниГуи, которая предназначена для таких случаев !!!
Может типа WaitWindowModal() с возможностью расположить ещё и иконку слева.
Григорий - можно ли это сделать ?

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




Пост N: 2457
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.06.25 22:27. Заголовок: SergKis пишет: запу..


SergKis пишет:

 цитата:
запуск модального окна ожидания под модальным окном, должно быть Ok


Решил эту проблему добавлением всего одной строки в код этой функции:
 
STATIC FUNCTION my_Report_2(ob)
Local ct := 'Waiting ... Calculation in progress - ' + ;
ob:cAlias + ";" + App.ExeName + ";"
Local bw := {||
Local cww := ThisWindow.Name, nn
Local alb := HMG_GetFormControls(cww, "LABEL")
Local clb := ATail(alb)
This.&(clb).Alignment := "Center"
FOR nn := 1 TO 5
This.&(clb).Value := hb_ntos(nn)
wApi_Sleep(1000)
NEXT
This.&(clb).Value := ""
wApi_Sleep(300)
ThisWindow.Release
Return Nil
}
_HMG_IsModalActive := .T.
WaitWindow( ct, bw, 400, 16, NIL, WHITE, PURPLE )

RETURN Nil


P.S. Уже поправил функцию WaitWindow() для этого случая - работает!

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




Пост N: 4755
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.25 22:45. Заголовок: gfilatov2002 пишет Р..


gfilatov2002 пишет
 цитата:
Решил эту проблему


К сожалению это не совсем так, пример положил на ftp (в нем еще пробный вариант h_windows.prg,
задание параметра WaitWindow(..., "M",...) для модал окна вместо child)
Жмем <Test 1> => <Modal> => <Modal> => <Counting> мышкой на main окно нет доступа, жмем <Exit>
и мышкой на main окно доступ есть, находимся на 1-ом modal окне

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




Пост N: 4756
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.06.25 10:07. Заголовок: gfilatov2002 Не оч...


gfilatov2002
Не оч. понятно назначение переменной _HMG_IsModalActive ?
Назначил в примере на все окна
ON KEY F1 ACTION _LogFile(.T., ThisWindow.Name, ThisWindow.Type, _HMG_IsModalActive)
При нажатии на всех вызванных окнах, в логе имеем значение _HMG_IsModalActive == .F.
После нажатия <Calculation> тоже .F. (без добавки
_HMG_IsModalActive := .T.
WaitWindow( ct, bw, 400, 16, NIL, WHITE, PURPLE )
), но после кнопки <Info>, значение, полученное по F1, _HMG_IsModalActive == .T.
по выходу из окон значение, полученное по F1, _HMG_IsModalActive == .F.


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




Пост N: 2458
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 14.06.25 11:13. Заголовок: SergKis пишет: Не о..


SergKis пишет:

 цитата:
Не оч. понятно назначение переменной _HMG_IsModalActive ?



Переменная _HMG_IsModalActive используется в коде как глобальный флаг для определения, активна ли в данный момент модальная форма (или окно). Вот как она используется и какая логика стоит за её применением:

---

### 📌 Назначение

_HMG_IsModalActive — логическая (boolean) переменная, которая:

* Принимает значение .T. (истина), когда активна модальная форма.
* Устанавливается в .F. (ложь), когда модальная форма закрыта или не используется.

---

### 🔍 Основные сценарии использования

Вот ключевые моменты:

1. Проверка перед инициализацией окна:


IF _HMG_IsModalActive .AND. bInit == NIL

→ Не разрешать открытие обычного окна, если активна модальная форма.

2. Контроль выполнения логики при показе окон:


IF _HMG_IsModalActive .AND. lNoWait == .F.

3. Установка состояния:


_HMG_IsModalActive := .T.
_HMG_IsModalActive := .F.

4. Сохранение и восстановление статуса:


lIsModal := _HMG_IsModalActive
...
_HMG_IsModalActive := lIsModal

→ Например, при временном переключении контекста.

---

### 🧠 Логика использования

1. Обеспечение модальности:

* Модальное окно блокирует доступ к другим окнам. Этот флаг гарантирует, что в это время нельзя открыть другие формы.

2. Избежание повторного запуска модальных окон:

* Проверки с .AND. _HMG_IsModalActive предотвращают наложение нескольких модальных окон друг на друга.

3. Сброс флага при завершении окна:

* После закрытия модального окна переменная обязательно сбрасывается в .F..

---

### ✅ Вывод

Переменная _HMG_IsModalActive — это управляющий флаг на уровне всей GUI-системы, который поддерживает корректную логику модальности окон: не позволяет открыть обычные окна или другие модальные окна, пока активна одна модальная форма, и корректно восстанавливает поведение после её закрытия.


Вот функции, в которых используется переменная _HMG_IsModalActive, а также краткий разбор их ролей:

---

### 🔹 1. FUNCTION _ActivateWindow

Использование:

IF _HMG_IsModalActive .AND. bInit == NIL
...
IF _HMG_IsModalActive .AND. lNoWait == .F.

Назначение:
Эта функция проверяет, активна ли модальная форма, перед тем как активировать новое окно. Если модальное окно активно, инициализация нового окна либо запрещается, либо обрабатывается особым образом.

---

### 🔹 2. FUNCTION _GenActivateId

Использование:

IF _HMG_IsModalActive == .F.
_HMG_IsModalActive := .T.
...
_HMG_IsModalActive := .F.

Назначение:
Функция генерирует активацию формы и устанавливает флаг модальности. После завершения действия модальность сбрасывается. Это типичная обертка для временного включения модального состояния.

---

### 🔹 3. FUNCTION _ShowWindow

Использование:

IF _HMG_IsModalActive
_HMG_IsModalActive := .T.

Назначение:
При показе окна проверяется текущая модальность. Возможно, эта функция повторно устанавливает флаг, если окно уже должно быть модальным, чтобы гарантировать, что статус не будет потерян.

---

### 🔹 4. FUNCTION WaitWindow

Использование:

lIsModal := _HMG_IsModalActive
...
_HMG_IsModalActive := .F.
_HMG_IsModalActive := .T.
...
_HMG_IsModalActive := lIsModal

Назначение:
Функция временно приостанавливает интерфейс (ждёт действия пользователя). Она сохраняет текущее состояние модальности, выключает его, выполняет действие, потом возвращает обратно. Это предотвращает "залипание" модального состояния при вложенных вызовах.

---

### 🧩 Вывод

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

* При показе или активации формы модальность устанавливается.
* Перед запуском новой формы модальность проверяется.
* После завершения — сбрасывается или восстанавливается предыдущее состояние.

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




Пост N: 4757
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.06.25 11:30. Заголовок: gfilatov2002 Спасиб..


gfilatov2002
Спасибо большое за детальное объяснение
Примерно так я и понял из кода, но меня смущает краткость действия этой переменной, т.е. если несколько модальных окон, то ее состояние, по мне, должно быть всегда .T. и не быть .F. (по F1 выше из примера в лог). Возможно, надо обрабатывать счетчик модальных окон в работе, т.к. добавка в пример еще одного уровня вызова простого модального окна ничего не дала, уже сразу по выходу из него, ситуация с переключением фокуса на др. окна работает, а по идее при наличии счетчика модальных окон > 0, этого не должно быть
Пример положил на ftp

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




Пост N: 4758
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.06.25 11:47. Заголовок: gfilatov2002 пишет И..


gfilatov2002 пишет
 цитата:
Избежание повторного запуска модальных окон


Это не оч. понятно, т.к. вызов модального окна из модального - нормальная ситуация для gui приложения

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




Пост N: 4759
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.06.25 12:27. Заголовок: gfilatov2002 пишет *..


gfilatov2002 пишет
 цитата:
* После закрытия модального окна переменная обязательно сбрасывается в .F..


Может надо установку значения делать от Len(HMG_GetForms("M")) > 0
PS
Поставил в ф-ии вызова модальных окон (в примере) перед выходом
 
...
ACTIVATE WINDOW &cForm

_HMG_InplaceParentHandle := 0
_HMG_IsModalActive := Len(HMG_GetForms("M")) > 0


RETURN NIL

т.е. при наличии модал окон переменная == .T., на фокус переключеня между окнами (после выхода из модал окна) это не отразилось - мышкой ставится

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




Пост N: 4760
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.06.25 17:42. Заголовок: gfilatov2002 Немного..


gfilatov2002
Немного модифицировал WaitWindow(..., .T., ...) запуск из модального окна, вызывает окно ожидания modal
Скрытый текст

PS. В h_alert.prg изменил hPrevious := GetActiveWindow() на
hPrevious := iif( _HMG_BeginWindowMDIActive, GetActiveMdiHandle(), GetActiveWindow() )

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




Пост N: 4761
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.06.25 08:05. Заголовок: SergKis пишет ..


SergKis пишет
 цитата:
             IF hWnd != NIL .and. ( nI := GetFormIndexByHandle ( hWnd ) ) > 0  
IF _HMG_aFormType [ nI ] == "M"
cModal := "M"
ENDIF
ENDIF


Лучше так
 
IF hWnd != NIL .and. ( nI := GetFormIndexByHandle ( hWnd ) ) > 0
IF _HMG_aFormType [ nI ] $ "MSY"
cModal := "M"
ENDIF
ENDIF


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




Пост N: 2459
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.06.25 14:08. Заголовок: SergKis пишет: Лучш..


SergKis пишет:

 цитата:
Лучше так


Благодарю за помощь!
Записал так:
 
...
nHeight += 8

#ifdef _HMG_COMPAT_
IF ! Empty( _HMG_MainHandle )
hWnd := iif( _HMG_BeginWindowMDIActive, GetActiveMdiHandle(), GetActiveWindow() )
IF hWnd != NIL .and. ( nI := GetFormIndexByHandle( hWnd ) ) > 0
IF _HMG_aFormType [ nI ] $ "MSY"
_HMG_IsModalActive := .T.
ENDIF
ENDIF
ENDIF
#endif
IF lNoWait .AND. ! _HMG_IsModalActive
DEFINE WINDOW _HMG_CHILDWAITWINDOW CHILD
ELSE
DEFINE WINDOW _HMG_CHILDWAITWINDOW MODAL
IF HB_ISBLOCK( bOnInit )
l_No_Wait := .F.
ENDIF
ENDIF


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




Пост N: 8003
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.06.25 15:32. Заголовок: Ставлю так: #include..


Ставлю так:
#include "minigui.ch" 
....
cForm := GetFormNameByIndex( nIndex )

Не компилируется... выдаёт ошибку:
Error: Unresolved external '_HB_FUN_GETFORMNAMEBYINDEX' referenced from 


Ставлю так:
#include "hmg.ch" 

Нормально компилируется.

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




Пост N: 4762
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.06.25 16:45. Заголовок: gfilatov2002 пишет И..


gfilatov2002 пишет
 цитата:
Использование: 

lIsModal := _HMG_IsModalActive
...
_HMG_IsModalActive := .F.
_HMG_IsModalActive := .T.
...
_HMG_IsModalActive := lIsModal


С этим большая непонятка, пример положил на ftp.
Запуск, жмем <Test 1> => <Modal> => <Modal> => <Wait> => [X] потом <Exit> => <Exit>
Вышли на уровень STANDARD окна, все работает, кроме переключения фокуса с модальных окон на main окно мышкой (это было)
Теперь то же самое делаем на кнопке <Test 2> => ...
На ней сделано с переменной, как написано выше, т.е. работа modal окон со значением .T.
 
:Event( 1, {|ow,ky,cn|
Local lIsModal := _HMG_IsModalActive

? ow:Name+" :Event( 1 ... start", _HMG_IsModalActive
SET WINDOW THIS TO ow:Name
_HMG_IsModalActive := .T.

?? "===>", _HMG_IsModalActive
Table_Four(ow, cn, .T.)
_HMG_IsModalActive := lIsModal

? ow:Name+" :Event( 1 ... stop ", _HMG_IsModalActive
SET WINDOW THIS TO
ky := ow
IF ow:Type == "M" ; EnableWindow( ky := ow:Handle )
ENDIF
ow:Enabler(cn, .T.)
ow:SetFocus(ow:Cargo:cFocus)
Return Nil
})

Можно сказать, что все хорошо (переключение мышкой фокуса блокировано), до возврата на окно STANDARD ... окно не в фокусе и выход только по TaskManager, т.е. полный завис

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




Пост N: 4763
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.06.25 10:42. Заголовок: SergKis пишет полный..


SergKis пишет
 цитата:
полный завис


Причину понял, окно MAIN и STANDARD в состоянии disable, поставил в блоки кода
 
окно MAIN
:Event( 1, {|ow,ky,cn|
_wSend(10,,{cn, .F.})
SET WINDOW THIS TO ow:Name

Table_One(ow, cn)
SET WINDOW THIS TO

_wSend(10,,{cn, .T.})
ow:SetFocus( ky := ow:Cargo:cFocus )
Return Nil
})
:Event( 2, {|ow,ky,cn|
_wSend(10,,{cn, .F.})
SET WINDOW THIS TO ow:Name

Table_Two(ow, cn)
SET WINDOW THIS TO

_wSend(10,,{cn, .T.})
ow:SetFocus( ky := ow:Cargo:cFocus )
Return Nil
})

в окно STANDARD кнопка <Test 2>
:Event( 1, {|ow,ky,cn|
Local lIsModal := _HMG_IsModalActive
SET WINDOW THIS TO ow:Name
_HMG_IsModalActive := .T.
Table_Four(ow, cn, .T.)
_HMG_IsModalActive := lIsModal
EnableWindow( _HMG_MainHandle )
EnableWindow( ky := ow:Handle )

ow:Enabler(cn, .T.)
ow:SetFocus(ow:Cargo:cFocus)
DO EVENTS
Return Nil
})


отработало как надо, т.е. надо, наверно, вводить команду на установку\снятие режима modal, при снятии всем оставшимся окнам делать EnableWindow( Handle )

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




Пост N: 2460
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.06.25 12:16. Заголовок: SergKis пишет: Прич..


SergKis пишет:

 цитата:
Причину понял


Пример отработал нормально.
Большое спасибо

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




Пост N: 4764
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.06.25 17:03. Заголовок: gfilatov2002 Почист..


gfilatov2002
Почистил пример, работает, положил на ftp

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




Пост N: 4765
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.06.25 11:12. Заголовок: gfilatov2002 Добавил..


gfilatov2002
Добавил в пример схему работы, по выборке данных, под окном кнопки <Wait>, для законченности варианта примера на событиях
положил на ftp

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




Пост N: 4766
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.06.25 17:20. Заголовок: gfilatov2002 Добавил..


gfilatov2002
Добавил в пример на кнопку <Wait> иконки ожидания, положил на ftp

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




Пост N: 2461
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.06.25 20:12. Заголовок: SergKis пишет: Доба..


SergKis пишет:

 цитата:
Добавил в пример на кнопку <Wait> иконки ожидания


Большое спасибо!

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




Пост N: 4767
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.06.25 13:42. Заголовок: gfilatov2002 Довел ..


gfilatov2002
Довел пример до раб. состояния (кнопки <Test 3\4>, <Wait> + в нее клавишу Esc),
положил на ftp

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




Пост N: 2462
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.06.25 14:45. Заголовок: SergKis пишет: поло..


SergKis пишет:

 цитата:
положил на ftp


Спасибо, обязательно посмотрю...

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




Пост N: 4768
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.06.25 14:42. Заголовок: gfilatov2002 Малень..


gfilatov2002
Маленькая правка в _TBrowse(...) (перенести строки) Скрытый текст


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




Пост N: 2463
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.06.25 14:49. Заголовок: SergKis пишет: прав..


SergKis пишет:

 цитата:
правка в _TBrowse(...)


OK

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




Пост N: 2464
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.06.25 17:21. Заголовок: Всем кому это интересно...


Завершена подготовка новой сборки 25.07, которая будет опубликована завтра.

Что нового:
- исправление обнаруженных ошибок после проведенного анализа используемых Си-функций (в том числе 96+ WinAPI функций);
- продолжено документирование исходного кода библиотеки, которое было начато в еще в декабре прошлого года;
- добавлена полезная функция HMG_ListTimers(), которая возвращает массив активных таймеров в виде { hParentWnd, nTimerID, nInterval }
- исправлена ошибка в коде функции Selector для режима OTM, добавлен тестовый пример для проверки всех основных SQL-выборок:
TestBasicSelector()
TestSelectorWithFilter()
TestSelectorWithGroupAndSummary()
TestSelectorOneToMany();
- обновлена библиотека libpng до свежей версии 1.6.49;
- обновлены различные примеры, как обычно.

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

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




Пост N: 4769
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.07.25 13:39. Заголовок: gfilatov2002 Обнару..


gfilatov2002
Обнаружил, что перестала работать (не знаю с какой версии) ф-я __objHasData( oMain, "Name" )
Стал смотреть Tsb_DemoMdi пример и получаю снятие при выходе из последнего окна просмотра, добавил в пример вывод в лог
Скрытый текст

Получил
>>> 98 'O' wMain .F. wMain
т.е. имеем .F., в версии hmg-23.12 все работает как надо, если это так, то надо в ф-ях сделать
 
FUNCTION _wPost( nEvent, nIndex, xParam )
...
cForm := nIndex:Name
//cForm := _HMG_THISFORMNAME
//IF __objHasData( nIndex, "Name" ) ; cForm := nIndex:Name
//ENDIF
...
FUNCTION _wSend( nEvent, nIndex, xParam )
...
cForm := nIndex:Name
//cForm := _HMG_THISFORMNAME
//IF __objHasData( nIndex, "Name" ) ; cForm := nIndex:Name
//ENDIF
...


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




Пост N: 4770
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.07.25 15:37. Заголовок: PS Есть файл checkre..


PS
Есть файл checkres.txt в примере с содержимым
C:\MiniGUI\SAMPLES\Advanced\Tsb_DemoMDI\DemoMdi.exe -- BRUSH,353372758,DOMETHOD(6027)->MAIN(317)
C:\MiniGUI\SAMPLES\Advanced\Tsb_DemoMDI\DemoMdi.exe -- BRUSH,-1425010468,MDICHILDOPEN(1009)->(b)MAIN(227)->DO_WINDOWEVENTPROCEDURE(84)->TWNDDATA:DOEVENT(1441)->DO_ONWNDLAUNCH(717)->(b)INIT(127)->EVENTS(1177)->DOMESSAGELOOP(0)->_ACTIVATEWINDOW(1648)->DOMETHOD(6027)->MAIN(317)

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