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




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


moderator




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


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

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

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

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

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




Пост 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 
ПрофильЦитата Ответить
moderator




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


SergKis пишет:

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


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

SergKis пишет:

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


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

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




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


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


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

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


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

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

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




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


SergKis пишет:

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


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

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




Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост 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 
ПрофильЦитата Ответить
moderator




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


SergKis пишет:

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


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

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


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

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

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




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


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

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

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




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


SergKis пишет:

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


Принято

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




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


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


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


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

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




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


SergKis пишет:

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


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

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




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


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

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

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

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




Пост 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 
ПрофильЦитата Ответить
moderator




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


SergKis пишет:

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


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

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




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


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


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

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




Пост 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 
ПрофильЦитата Ответить
постоянный участник




Пост 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 
ПрофильЦитата Ответить
администратор




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


SergKis пишет:

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


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

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




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


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


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

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

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