On-line: PSP, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
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 [только новые]


gfilatov2002
moderator




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


Выложил 3-й апдейт сборки 21.07

Добавлены новые интересные функции, выполнена оптимизация использования внутренних STATIC переменных в ядре библиотеки (их количество уменьшилось на треть).

Обновил также Unicode архив.

Желаю всем участникам форума мира и добра

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




Пост N: 3844
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.08.21 07:50. Заголовок: gfilatov2002 Если п..


gfilatov2002
Если появилось облако переменных, может есть смысл, внести обработку в Events()
сообщения WM_COPYDATA, т.е. примерно так
 
...
CASE nMsg == WM_COPYDATA .and. _SetGetGlobal("b_WM_COPYDATA") != Nil
// to get data
cData := GetMessageData( lParam, @nDataID )
EVal( _SetGetGlobal("b_WM_COPYDATA"), nDataID, cData )

PS. Почему массив, а не Hash, переменных ведь много можно организовать или для системных переменных завести отдельное пространство переменных

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




Пост N: 1917
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.08.21 10:02. Заголовок: SergKis пишет: може..


SergKis пишет:

 цитата:
может есть смысл, внести обработку в Events()


Благодарю за предложение, но это, по-моему, излишне.
Хотя, есть над чем подумать...

SergKis пишет:

 цитата:
Почему массив, а не Hash


Так привычнее, поскольку для хранения PUBLIC переменных используется единый массив также.

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




Пост N: 3845
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.08.21 11:12. Заголовок: gfilatov2002 пишет P..


gfilatov2002 пишет
 цитата:
PUBLIC переменных используется единый массив также.


Это скорее, исторический, минус для hmg, т.к. структура внутри получилась довольно костяная и индивидуальная (описания контролов, где внутренние массивы различаются). Подключение пользовательских обработчиков через
SET EVENTS FUNCTION TO MYEVENTS
решает многое, но требуют знаний.

 цитата:
Так привычнее


Использую оч. давно механизм oKeyData() для решения пространства переменных программы и в реале их бывает оч. много и это с учетом, что на окнах такие данные (глобальные) перекрываются локальными значениями
В Hash ключ можно использовать не только строковые значения, что бывает очень удобно

PS. Пропустил, а удаление переменной есть ?

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




Пост N: 1918
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.08.21 11:56. Заголовок: SergKis пишет: а уд..


SergKis пишет:

 цитата:
а удаление переменной есть ?


Нет
Но Вы без труда напишите функцию _DelGlobal()

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




Пост N: 3846
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.08.21 12:26. Заголовок: gfilatov2002 пишет Н..


gfilatov2002 пишет
 цитата:
Но Вы без труда напишите функцию _DelGlobal()


Я бы пошел по пути
STATIC _HMG_STATIC := oKeyData() //{}
и уже все было бы через hash, CLASS TKeyData вынес бы за скобку #ifdef _OBJECT_
Код дополнительный для обслуживания _HMG_STATIC написан

PS. CLASS TThrData можно, наверно, удалить. Вряд ли его используют в потоках, а для др. он не нужен

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




Пост N: 3847
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.08.21 13:28. Заголовок: PS Ф-я может быть та..


PS
Ф-я может быть такой
 
STATIC _HMG_STATIC := oKeyData()

*-----------------------------------------------------------------------------*
FUNCTION _SetGetGlobal( cVarName, xNewValue )
*-----------------------------------------------------------------------------*
LOCAL xOldValue

IF pCount() == 0
RETURN _HMG_STATIC

ELSEIF pCount() == 1
IF ISCHAR(cVarName) ; cVarName := upper(cVarName)
ENDIF

RETURN _HMG_STATIC:Get(cVarName, NIL)

ELSEIF pCount() == 2
IF ISCHAR(cVarName) ; cVarName := upper(cVarName)
ENDIF

xOldValue := _HMG_STATIC:Get(cVarName, NIL)
IF ISNIL(xNewValue) ; _HMG_STATIC:Del(cVarName)
ELSE ; _HMG_STATIC:Set(cVarName, xNewValue)
ENDIF
ENDIF

RETURN xOldValue

Применять так дополнительно (кроме выше описанных)
aKeys := _SetGetGlobal():Keys() // список всех переменных и ключей
aValues := _SetGetGlobal():Values() // список всех значений
aAll := _SetGetGlobal():GetAll() // массив всех переменных и значений, т.е. {{key, value},...}
и дальше по списку методов класса TKeyData
Для строковых переменных можно работать
os := _SetGetGlobal()
cPath := os:cPathData
os:bMy := {|| ... }
примеры с Cargo есть на эту тему

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




Пост N: 1919
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.08.21 14:14. Заголовок: SergKis пишет: Ф-я ..


SergKis пишет:

 цитата:
Ф-я может быть такой


Выполнил предложенные изменения для использования хэша и класса TKeyData.
Исправил присвоение
SergKis пишет:

 цитата:
STATIC _HMG_STATIC := oKeyData()


поскольку нельзя присваивать статической переменной возврат функции

ВСЕ РАБОТАЕТ (как описано выше)! БЛАГОДАРЮ ЗА ПОМОЩЬ

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




Пост N: 3851
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.08.21 14:01. Заголовок: gfilatov2002 Может ..


gfilatov2002
Может сделать THmgData класс, почистив от лишнего и вернуть TKeyData за скобку ?
Скрытый текст

PS. Можно и метод Destroy() убрать, hb сам справится с очисткой, при завершении работы

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




Пост N: 1920
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.08.21 15:35. Заголовок: SergKis пишет: Може..


SergKis пишет:

 цитата:
Может сделать THmgData класс


Принято

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




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


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


Допустил неточность в методе Eval(), поправил и выделил цветом


PS. Можно сделать псевдофункции на замену __mvPublic, __mvGet, ... и перенаправить с PUBLIC переменных на hash в переменной, к примеру, _HMG_PUBLIC

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




Пост N: 1921
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.08.21 16:36. Заголовок: SergKis пишет: Допу..


SergKis пишет:

 цитата:
Допустил неточность в методе Eval()


Спасибо, исправил.

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




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


Опубликован 4-й апдейт сборки 21.07

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

P.S. Обновил также Unicode архив.

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




Пост N: 3855
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 31.08.21 13:07. Заголовок: Григорий, сделав общ..


Григорий, сделав обще доступной с пользователем область переменных _SetGetGlobal(), не закладывается ли мина пересечения имен ? Может надо разделить, для пользователя _SetGetGlobal(), а для системных вещей, на пример, _SysGlobal()\_HmgGlobal(). По мне стремная ситуация получается с именами сейчас, к примеру
IF _SetGetGlobal( 'lOnChangeEvent' ) == NIL
Я так тоже люблю свои переменные называть.
Или выкинуть из описания для пользователя использование _SetGetGlobal(), можно оставить ф-ю oHmgData() для использования в таком виде
LOCAL oVar := oHmgData()
oVar:cPathData := "\HBK\DATA"
oVar:lShow := .T.
oVar:cTitle := "Bla bla bla"
...

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




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


SergKis пишет:

 цитата:
стремная ситуация получается с именами


Согласен.
Для безопасности добавлю префикс _HMG_ к этим системным переменным

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




Пост N: 3856
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 31.08.21 13:36. Заголовок: gfilatov2002 пишет Д..


gfilatov2002 пишет
 цитата:
Для безопасности добавлю префикс _HMG_ к этим системным переменным


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

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




Пост N: 1750
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.09.21 15:22. Заголовок: Нужны ли новые методы


Всем привет. нашел у себя в старом проекте. Совсем забыл

Может будет интересно
 

METHOD Show(lShow) CLASS TSBrowse
hb_default(@lShow, .t.)
if lShow
ShowWindow(::hWnd)
else
HideWindow(::hWnd)
end
RETURN nil




Используется для прорисовки в одних координатах разных бровсов в зависимости от условий, примерно так
 
...
oBrw_1:Show( lOk )
oBrw_2:Show( !lOk )
...

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

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




Пост N: 3857
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.09.21 21:22. Заголовок: Haz пишет Правда дел..


Haz пишет
 цитата:
Правда делал через __objAddMethod() чтоб исходники не менять.


В TControl уже есть методы
METHOD Hide() INLINE ShowWindow( ::hWnd, SW_HIDE )
METHOD Show() INLINE ShowWindow( ::hWnd, SW_SHOWNA )
они работают. Т.е. можно писать
iif( lOk, oBrw:Show(), oBrw:Hide() )
Через __objAddMethod() ты просто замещал метод oBrw:Show, наследованный от TControl, своим кодом

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




Пост N: 1751
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.09.21 21:33. Заголовок: Велосипед


SergKis пишет:

 цитата:
TControl уже есть методы
METHOD Hide() INLINE ShowWindow( ::hWnd, SW_HIDE )


Значит я изобрёл велосипед
Нашёл разгребая архивы, не проверив исходники. Спасибо

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




Пост N: 3858
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.09.21 21:53. Заголовок: Haz пишет Значит я и..


Haz пишет
 цитата:
Значит я изобрёл велосипед


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

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