On-line: Pasha, Haz, гостей 0. Всего: 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 [только новые]


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




Пост N: 1513
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.06.17 11:12. Заголовок: PS Если принять вари..


PS
Если принять вариант GetControlIndex, то можно, пройдя по функциям, сделать:
 
*-----------------------------------------------------------------------------*
FUNCTION _SetFocus ( ControlName, ParentForm )
*-----------------------------------------------------------------------------*
LOCAL MaskStart As Numeric
// LOCAL H , T , x , i, ControlCount , ParentFormHandle
LOCAL H , T , x , ControlCount , ParentFormHandle
LOCAL i := GetControlIndex ( ControlName, ParentForm )

ParentForm := i

H := GetControlHandle( ControlName, ParentForm )
T := GetControlType ( ControlName, ParentForm )
// i := GetControlIndex ( ControlName, ParentForm )
...

работа без лишних макросов


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




Пост N: 5409
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.06.17 14:30. Заголовок: SergKis пишет: gfil..


SergKis пишет:

 цитата:
gfilatov2002
Повторю предложение,


А он вроде писал, что убегает в отпуск ....

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




Пост N: 1514
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.06.17 16:03. Заголовок: Andrey пишет А он вр..


Andrey пишет
 цитата:
А он вроде писал, что убегает в отпуск


Я в курсе, прошлый раз, Григорий, отказал, отослав к инструкции\описанию\религии МиниГуи.
Выкладываю сейчас, потому как, он придет из отпуска, я уйду.

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




Пост N: 1517
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.06.17 17:23. Заголовок: gfilatov2002 SergKi..


gfilatov2002
SergKis пишет сделать
 цитата:
 
*-----------------------------------------------------------------------------*
Function _DoControlEventProcedure ( bBlock , i , cEventType , nParam, p2, p3 )
*-----------------------------------------------------------------------------*
...
if valtype( bBlock ) == 'B' .and. i > 0
...
If _HMG_BeginWindowActive == .F. .or. !( cEventType == 'CONTROL_ONCHANGE' ) .or. _HMG_MainClientMDIHandle != 0
Eval( bBlock, nParam, p2, p3 )
EndIf
...
*-----------------------------------------------------------------------------*
Function _DoWindowEventProcedure ( bBlock , i , cEventType, nParam, p2, p3 )
*-----------------------------------------------------------------------------*
...
if valtype( bBlock ) == 'B' .and. i > 0
...
_HMG_ThisControlName := ""
lRetVal := Eval( bBlock, nParam, p2, p3 )
_PopEventInfo()
...


А правильнее так
 
*-----------------------------------------------------------------------------*
Function _DoControlEventProcedure ( bBlock , i , cEventType , nParam, p2, p3 )
*-----------------------------------------------------------------------------*
...
If Pcount() > 4; Eval( bBlock, p2, nParam, p3 ) // new
Else ; Eval( bBlock, nParam ) // old
EndIf
...

*-----------------------------------------------------------------------------*
Function _DoWindowEventProcedure ( bBlock , i , cEventType, nParam, p2, p3 )
*-----------------------------------------------------------------------------*
...
If Pcount() > 4; lRetVal := Eval( bBlock, p2, nParam, p3 ) // new
Else ; lRetVal := Eval( bBlock, nParam ) // old
EndIf
...


Тогда в примере будет Скрытый текст

без лишних ky := ky, ;


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




Пост N: 1520
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.17 14:11. Заголовок: gfilatov2002 Добави..


gfilatov2002
Добавил методы и подправил h_windows.prg Скрытый текст



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


Пост N: 1514
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.06.17 14:49. Заголовок: SergKis пишет: Доб..


SergKis пишет:

 цитата:
Добавил методы и подправил h_windows.prg


Я надеюсь, что вы высылаете исходники Григорию или хотя-бы diff файлы? А то боюсь, что он врядли вручную захочет все это реконструировать.


 цитата:
прошлый раз, Григорий, отказал, отослав к инструкции\описанию\религии МиниГуи.


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

Да еще - ваши упоминания о "религии MiniGUI" ни на йоту не приближают вас к успеху
Но я хотя бы понял, чего вы о ней вспомнили

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




Пост N: 5413
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.06.17 15:04. Заголовок: Да не так уж и много..


Да не так уж и много правок для ядра.
А почему не нужно это вставлять ?
По синтаксису понятно и пользоваться можно будет в будущем. Удобней кстати для использования.
А примеры для этого тоже бы желательно иметь более подробней написанные...

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




Пост N: 1521
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.17 15:07. Заголовок: Петр пишет Я надеюсь..


Петр пишет
 цитата:
Я надеюсь, что вы высылаете исходники Григорию


Пока, нет, т.к. нет ясности, будет ли это востребовано (работа по сообщениям) в MiniGui.
Выкладываю что бы услышать коменты (исправления) и может кому пригодиться.
Сборка изменений у меня есть (моя версия), но на какую версию 17.05\17.06 накладывать изменения ясности нет.

 цитата:
для ядра библиотеки - это слишком специфично и классово чуждо


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


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




Пост N: 1522
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.17 15:16. Заголовок: PS Нет ясности, у пр..


PS
Нет ясности, у примеру, как обозвать правильно функции:
oWndData() или oTWndData()
oCntData() или oTCntData()
oKeyData() или oTKeyData()


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




Пост N: 1523
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.17 15:24. Заголовок: Andrey пишет А приме..


Andrey пишет
 цитата:
А примеры для этого тоже бы желательно иметь более подробней написанные...


В примере, мне кажется, довольно подробно написано применение практически всех вариантов.

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


Пост N: 1515
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.06.17 15:44. Заголовок: Andrey пишет: Да не..


Andrey пишет:

 цитата:
Да не так уж и много правок для ядра.


Правки сырые, видно, что человек не читал хотя бы то, что в xhb-diff написано и примеров ООП в папке tests не смотрел.
И если собираетесь использовать в harbour классы, то нужно найти и почитать документацию по Class(y).
Реализация методов Destroy показывает, что еще есть чему учиться.

SergKis пишет:

 цитата:
Нет ясности, у примеру, как обозвать правильно функции:
oWndData() или oTWndData()


Если это функции классов, то префикс o здесь явно чуждый.

Что до T - это дань Делфи, "родные" функции классов в harbour начинаются c Hb


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


Пост N: 1516
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.06.17 16:01. Заголовок: SergKis пишет: в од..


SergKis пишет:

 цитата:
в одном месте ядра используем _HMG_


Дело в том, что вы положили в переменную, использование классов в процедурной библиотеке, выглядит достаточно странно.
А если учесть, что нет никакой продуманной обьектной модели, что визуальные обьекты, смешаны с невизуальными, довольно таки специфическими (TCntData )..

 цитата:
Пока, нет, т.к. нет ясности, будет ли это востребовано (работа по сообщениям)


Какое отношение имеет TCntData к "работе с сообщениями" ?
Какую модель работы с сообщениями вы выбрали?


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




Пост N: 1524
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.17 16:49. Заголовок: Петр пишет А если уч..


Петр пишет
 цитата:
А если учесть, что нет никакой продуманной обьектной модели, что визуальные обьекты, смешаны с невизуальными, довольно таки специфическими (TCntData )..


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

 цитата:
Какое отношение имеет TCntData к "работе с сообщениями"


Самое прямое, на нем, в первую очередь, ставятся\выполняются events этого This контрола + насколько команд, для упр. контролом внутри блока events.
На окно, соответсвенно, для самостоятельных (не связанных event с контролом) или для организации множественной рассылки сообщений контролам, с установкой соотв. среды This.

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


Вполне можно убрать, добавил только для "эстетического" написания\использования.
GetControlIndex(Self) или
GetControlIndex( , Self:Index)

 цитата:
Реализация методов Destroy показывает, что еще есть чему учиться.


Так всю жизнь этим занимаюсь.

 цитата:
Правки сырые, видно, что человек не читал хотя бы то, что в xhb-diff написано и примеров ООП в папке tests не смотрел


с xhb дел не имел (кроме сборки letodb) никаких.
Примеры ООП, в основном hb 2.0.
Правки сырые", действительно так, с "колес", но мне лично надо ехать, а шашечки ..., правильное оформление ...
Разве, кто подключится и поможет.






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


Пост N: 1517
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.06.17 17:39. Заголовок: Какое отношение име..



 цитата:

Какое отношение имеет TCntData к "работе с сообщениями"
Самое прямое


А, так это - TControl и что делает метод Sum(), а главное для чего он что-то делает?
Позвольте дать вам совет.
1) Для публичных библиотек не используйте конспирологические имена (:UsK)
2) Возьмите принятную для вас обьектную модель (Delphi, FoxPro, xailer ) и внимательно ее изучите.
SergKis пишет:

 цитата:
с xhb дел не имел (кроме сборки letodb) никаких.
Примеры ООП, в основном hb 2.0.
Правки сырые", действительно так, с "колес", но мне лично надо ехать, а шашечки ...


Не буду обьяснять почему, но вам в source еще рано.

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




Пост N: 1525
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.17 18:00. Заголовок: Петр пишет что дела..


Петр пишет

 цитата:
что делает метод Sum(), а главное для чего он что-то делает?


TKeyData для работы с ключами hash, т.е. ключ - значение и Sum делает в рамках этих правил сумму (массив сумм) на ключ.
Local o1 := oKeyData()
Local o2 := oKeyData()
DO WHILE ! Eof()
o1:Sum("#", 1)
o1:Sum("KolVo", (oBrw1:cAlias)->KOLVO)
o1:Sum("Summa", (oBrw1:cAlias)->SUMMA)
o2:Sum("Itogo", {1, (oBrw1:cAlias)->KOLVO, (oBrw1:cAlias)->SUMMA}
SKIP
ENDDO
o1:Eval({|k,s,i| _LogFile(.T., i, k, s) })
o2:Eval({|k,s,i| _LogFile(.T., i, k, hb_valtoexp(s)) })
и все это можно использовать в event, к примеру, окна.


 цитата:
Для публичных библиотек не используйте конспирологические имена (:UsK)


Я приписал - на любителя, оставил, что бы текст выложенный и моей версиии, соответствовал
 цитата:
Возьмите принятную для вас обьектную модель (Delphi, FoxPro, xailer ) и внимательно ее изучите.



 цитата:
но вам в source еще рано


Скорее поздно, да и совершенно не стремлюсь.


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




Пост N: 1526
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.17 20:05. Заголовок: PS Вылез с предложен..


PS
Вылез с предложениями, только по причинам
1. Убрать лишнее макро выполнение в командах (у меня убрано). См. _SetFocus постах выше
2. Получить работу с сообщениями, если мой вариант, то дополнительно бонус
- список всех типов на окно
- список объектов контролов по запросу типов
- список объектов контролов по запросу имен
Цель, иметь возможность перехода на последние версии hmg.
Если предложения будут включены "правильным" образом с "правильным" описанием, я включу их в свою версию правильно.
В любом случае, я перешел с поделки на Label (аналог сообщений), используя повод :UserKeys, пусть и не "правильный" код


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


Пост N: 1519
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.06.17 21:18. Заголовок: SergKis пишет: Если..


SergKis пишет:

 цитата:
Если предложения будут включены "правильным" образом с "правильным" описанием, я включу их в свою версию правильно.


Ваш код в существующем виде не может быть включен в MiniGUI по банальной причине - MiniGUI Ext. поддерживает как harbour, так и xhb.
Для того, чтобы написать совместимый код нужно знать их отличия (xhb-diff) как на PRG уровне (элементарное различие в наименовании функций и к-ве параметров), так и C API.
Вот, к примеру, в xhb реализация деструктора обьекта приводит к повреждению HVM памяти.
Поэтому такие вещи сильно (иногда не сильно ) лимитируют использование нативных средств языка (harbour/xhb), вынуждая создавать соотв. функциональность с помощью WinAPI и совместимого C API.


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




Пост N: 1527
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.17 21:46. Заголовок: Петр Наверно по нез..


Петр
Наверно по незнанию,не вижу связи использования WinApi для установки свойства объекта (в реале STATIC переменной) в Nil, если не ставить - это произойдет все равно (как не использованная) мусоросборщиком. А др. в destroy нет.
В hb (в сравнении с vo, но это уже история ...) напрягает (чуть чуть) отсутствие автоматических AXIT и Destroy, делаем ручками.

 цитата:
Ваш код в существующем виде не может быть включен в MiniGUI по банальной причине - MiniGUI Ext. поддерживает как harbour, так и xhb.


Destroy это просто название метода, его можно было назвать ToNil, если на название реагирует xhb , нет проблем, сменим, если для xhb надо отдельно метод инициализации, тоже нет проблемы, сделаем метод Init или Define и будем писать
TWndData():New():Init( <параметры> )
Покажите как надо, оформлю, но изучать xhd-diff ..., т.к по жизни нет необходимости в этом


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


Пост N: 1520
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.06.17 22:31. Заголовок: SergKis пишет: В hb..


SergKis пишет:

 цитата:
В hb (в сравнении с vo, но это уже история ...) напрягает (чуть чуть) отсутствие автоматических AXIT и Destroy,


Ага-ага. Да посмотрите вы примеры, пожалуйста..
harbour\tests\destruct.prg

CREATE CLASS myClass
VAR TYPE
VAR var1
CLASS VAR var2
METHOD INIT
DESTRUCTOR dtor
END CLASS

В harbour деструкторы как раз таки, есть и работают не плохо. В xhb из-за особенностей реализации HVM есть проблемы.
Поэтому изучив xhb-diff, напичкав свой код #ifdef ваяете что-то не слишком замысловатое (оно же еще в multithread работать должно, а там опять грабли при переносе с одной системы на другую) или забиваете на классы и с помощью WinAPI/C API/PRG кода в старом добром процедурном стиле решаете нужную вам проблему и предлагаете ее Григорию для включения в MiniGUI.


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




Пост N: 1528
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.17 23:44. Заголовок: Петр Спасибо за под..


Петр
Спасибо за подробное разъяснение "религии" hmg.
"Забивать на классы" не получится (задачи тоже на них), теряюсь когда надо писать процедурным языком, отвык однако . Останется сложный переход на new версию hmg, если понадобится.
Если заложить в hmg следующее:
1. Оставить введенные переменные _HMG_aFormMiskData1, _HMG_aFormMiskData2 b _HMG_aControlMiskData0 или зарезервировать места аналоги этих переменных и где сейчас заполнялись объектами эти переменные, сделать вызов блоков кода Eval(_HMG_bFormInit, k), Eval(_HMG_bControlInit, k). Где k index регистрации элемента.
2. В процедурах _DoWindowControlEventProcedure, _DoWindowEventProcedure, сделать как предлагал выше или хотя бы добавить параметры в вызов и Eval и ввести проверку i > 0
3. _EraseControl, _ReleaseWindow, там где вставлял свой код, добавить выполнение блоков кода
Eval(_HMG_bControlErase, k)
Eval(_HMG_bFormRelease, k)
Названия переменных условное, так к примеру.
Может что то еще упустил, но тогда WM_USER+..., действительно обрабатывать можно в своем MyEvent.
Тогда классы можно вывести в пример и сгородить весь огород по сообщениям в примере.

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