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 [только новые]


gfilatov2002
moderator




Пост N: 1140
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.07.17 21:03. Заголовок: SergKis пишет: тогд..


SergKis пишет:

 цитата:
тогда в
FUNC Do_OnCtlRelease( i, p )
можно убрать


Благодарю снова за это важное исправление!
Теперь модальные окна работают нормально с ООП, но вернулась проблема с очисткой переменной ::oName после закрытия любого дочернего окна.
Возможно, надо убрать эти строки

 цитата:
::oName := iif( HB_ISOBJECT( ::oName ), ::oName:Destroy() , Nil ), ;
::oHand := iif( HB_ISOBJECT( ::oHand ), ::oHand:Destroy() , Nil ), ;

также из класса TWndData

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



Пост N: 1587
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.07.17 11:47. Заголовок: gfilatov2002 Был не..


gfilatov2002
Был не прав применив CLASSDATA, т.к. хотел другого. Поправил Скрытый текст



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




Пост N: 1141
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.07.17 12:58. Заголовок: SergKis пишет: Рабо..


SergKis пишет:

 цитата:
Работает как надо.


Подтверждаю, что после этих исправлений все работает нормально

SergKis пишет:

 цитата:
Пробовал пересобрать Вашу сборку


Выложил очередную бетку с учетом Ваших изменений по старому адресу.
Благодарю за оперативную помощь

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



Пост N: 1589
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.07.17 21:42. Заголовок: gfilatov2002 Такой ..


gfilatov2002
Такой пример получился с исп. MESSAGEONLY ... Скрытый текст


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



Пост N: 1590
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.07.17 21:49. Заголовок: PS пропустил ошибку ..


PS
пропустил ошибку
ACCESS WmApp INLINE ( WM_USER + 100 )
надо
ACCESS WmApp INLINE ( WM_USER + ::nApp )

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




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


SergKis пишет:

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


Благодарю за хороший пример для новой сборки

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




Пост N: 1143
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.07.17 11:49. Заголовок: Подготовил первый RC..


Подготовил первый RC для новой сборки 17.07 со следующим списком изменений
Скрытый текст

Благодарю за оперативную помощь в подготовке этой сборки SergKis

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



Пост N: 1591
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.07.17 13:56. Заголовок: gfilatov2002 В клас..


gfilatov2002
В класс TCnlData добавил
METHOD SetSize( y, x, w, h ) INLINE _SetControlSizePos( ::cName, ::oWin:cName, y, x, w, h )


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




Пост N: 1144
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.07.17 15:33. Заголовок: SergKis пишет: В кл..


SergKis пишет:

 цитата:
В класс TCnlData добавил


Благодарю за помощь
Добавил этот метод также...

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



Пост N: 1592
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.07.17 16:22. Заголовок: gfilatov2002 У себя..


gfilatov2002
У себя сделал такие штуки (на Ваше усмотрение) Скрытый текст


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





Пост N: 47
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 20.07.17 07:37. Заголовок: SergKis пишет: У се..


SergKis пишет:

 цитата:
У себя сделал такие штуки



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

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



Пост N: 1593
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.17 08:38. Заголовок: Alex_Cher пишет как ..


Alex_Cher пишет
 цитата:
как все это можно реально использовать в своей работе


Какой момент вас интересует ? Если последний со StatusBar и ClientHeight, то исп. так
 
DEFINE WINDOW &cWnd AT 0,0 WIDTH 650 + nWdt HEIGHT 500 ;
...
PUBL oMain := ThisWindow.Object
PRIV oWnd := oMain, oBrw1
...
DEFINE STATUSBAR
STATUSITEM ''
STATUSITEM '' WIDTH 300
END STATUSBAR
// вместо This.StatusBar.Item(2) := "Right click ( TBrowse ) for context menu" // можно писать так
oWnd:StbSay("Right click ( TBrowse ) for context menu", 2) // или
oMain:StbSay("Right click ( TBrowse ) for context menu", 2)

DEFINE SPLITBOX HANDLE hSplit
DEFINE TOOLBAR ToolBar_1 BUTTONSIZE 16,16 FLAT
...
END TOOLBAR

END SPLITBOX
... // вместо таких строк
nY := GetWindowHeight(hSplit)
nX := 10
nW := This.ClientWidth - nX * 2 - nWdt
nH := This.ClientHeight - GetWindowHeight( This.StatusBar.Handle ) - nY - 1
// можно писать
nY := oWnd:ReBarHeight
nX := 10
nW := This.ClientWidth - nX * 2 - nWdt
nH := oWnd:ClientHeight
...
Если вопрос про события, то написав, к примеру к контролу
cNam := 'ID'
@ nY, nX LABEL &cNam VALUE '' WIDTH nLen HEIGHT oBrw1:nHeightCell CENTERALIGN

WITH OBJECT oWnd:GetObj(cNam)
:Cargo := 0
:Event( 1, {|oc,kd,id| kd := Eval( oBrw1:GetColumn('KODS'):bData ), ; // Get
id := Eval( oBrw1:GetColumn('ID'):bData ), ;
oc:Value := alltrim(cValToChar(id))+"-<"+ ;
alltrim(cValToChar(kd))+">" } )
:Event( 2, {|oc | oc:Window:oCargo:Set(oc:Name, oc:Value) } ) // Put
:Window:oCargo:Set(cNam, :Value ) // init value to oCargo
END WITH
вы собрали в одном месте механизмы заполнения значения ( Event(1) ) и сохранения в базе этого значения (Event(2)).
Теперь, не важно на каком окне находится контрол, мы работаем с ним через очередь, посылая сообщения
// заполнить value контрола
oWnd:GetObj("ID"):PostMsg(1) // без ожидания
oWnd:GetObj("ID"):SendMsg(1) // с ожиданием завершения
// сохранить value контрола где то
oWnd:GetObj("ID"):PostMsg(2) // без ожидания
oWnd:GetObj("ID"):SendMsg(2) // с ожиданием завершения
т.к. контролов много, можно собрать в пакет такие сообщения и зарегестрировать на окно как события
WITH OBJECT oWnd // ---- Window events
:Event( 1, {|ow| AEval( ow:GetObj4Type('LABEL,GETBOX'), {|oc| oc:SendMsg(1) }) } ) // Get
:Event( 2, {|ow| AEval( ow:GetObj4Type('LABEL,GETBOX'), {|oc| oc:SendMsg(2) }) } ) // Put
// ...
END WITH // ---- Window events
т.е. послав окну сообщение oWnd:PostMsg(1) или oWnd:SendMsg(1) выполнятся события Event(1) для всех LABEL+GETBOX окна. По кнопке OK можно сделать oWnd:PostMsg(2) или oWnd:SendMsg(2) сохранить данные контролов где то.
На события можно повесить расчеты\формы\отправки писем ...
Т.е. ваша прогр. начинает работать (как и система) через сообщения



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



Пост N: 1594
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.17 08:53. Заголовок: PS Посылать сообщени..


PS
Посылать сообщения можно через псевдо ООП
// заполнить value контрола
(This.ID.Object):PostMsg(1) // без ожидания
(This.ID.Object):SendMsg(1) // с ожиданием завершения
// сохранить value контрола где то
(This.ID.Object):PostMsg(2) // без ожидания
(This.ID.Object):SendMsg(2) // с ожиданием завершения
для окна
(ThisWindow.Object):PostMsg(1)
(ThisWindow.Object):PostMsg(2)


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




Пост N: 1145
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.07.17 10:24. Заголовок: SergKis пишет: Како..


SergKis пишет:

 цитата:
Какой момент вас интересует ?


Благодарю за Ваши пояснения, которые очень полезны.
Но возникают и другие вопросы:
- почему Statusbar м Splitbox выделяются для присвоения им свойств на уровне класса TWndData
Ведь эти элементы управления имеют свои собственные объекты, которые были созданы при их определении
в функциях _BeginMessageBar(), _DefineItemMessage() и _DefineSplitChildWindow(). И, соответственно, эти
объекты имеют требуемую информацию о размерах этих контролов и т.п.
т.е. вместо присвоения
oWnd:StbSay("Right click ( TBrowse ) for context menu", 2)
д.б., например, так
oWnd:oStb:Say("Right click ( TBrowse ) for context menu", 2)

Или я что-то путаю

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




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


Alex_Cher пишет:

 цитата:
.... может я и не прав


Прав, конечно

Alex_Cher пишет:

 цитата:
где об этом можно почитать


Документация Харбора
- doc\xhb-diff.txt
-doc\en\command.txt

 цитата:
   $DESCRIPTION$ 
CLASS creates a class from which you can create objects.
The CLASS command begins the class specification, in which the VAR
elements (also known as instance variables) and METHODS of the
class are named. The following scoping commands may also appear.
They control the default scope of VAR and METHOD commands that follow them.

<fixed>
EXPORTED:
VISIBLE:
HIDDEN:
PROTECTED:
</fixed>
The class specification ends with the END CLASS command.

Classes can inherit from multiple <SuperClasses>, and the chain of
inheritance can extend to many levels.

A program uses a Class by calling the Class Constructor, usually the
New() method, to create an object. That object is usually assigned
to a variable, which is used to access the VAR elements and
methods.

Harbour's OOP syntax and implementation supports Scoping (Protect, Hidden and Readonly)
and Delegating, and is largely compatible with Class(y)(tm), TopClass(tm)
and Visual Objects(tm).



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



Пост N: 1595
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.17 11:42. Заголовок: gfilatov2002 пишет И..


gfilatov2002 пишет
 цитата:
Или я что-то путаю


Все правильно Вы пишете , разница в том, что на уровне окна идет проверка, есть StatusBar, работаем, нет - пустышка, т.е. есть\нет StatusBar - все работает.
Запись oWnd:Stb:Say... предполагает точное наличие StatusBar. Потому и написал "на Ваше усмотрение".
SplitBox высота исп., только для расчета ClientHeight, т.е. ToolBar на SplitBox и StatusBar вычитаются из высоты клиентской области окна.
Возможно, надо сделать переменные :nTop, ::nRight, ::nBottom, :nLeft и управлять ими, для клиентской области - общий случай для окна.



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



Пост N: 1596
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.17 11:46. Заголовок: Alex_Cher пишет: где..


Alex_Cher пишет:
 цитата:
где об этом можно почитать


Еще http://www.kresin.ru/hrbfaq_3.html#Doc3

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



Пост N: 1597
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.17 12:01. Заголовок: gfilatov2002 пишет В..


gfilatov2002 пишет
 цитата:
Ведь эти элементы управления имеют свои собственные объекты


#xcommand DEFINE SPLITBOX ;
..., т.е.
FUNCTION _DefineSplitBox ( ParentForm, bottom, inverted )
...
не создает объект (и реальных размеров SplitBoxа еще не будет, появятся только в #xcommand END SPLITBOX), потому менял
FUNCTION _EndSplitBox ()


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




Пост N: 1147
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.07.17 12:15. Заголовок: SergKis пишет: на у..


SergKis пишет:

 цитата:
на уровне окна идет проверка, есть StatusBar, работаем, нет - пустышка


Понятно, тогда просто м.б. использовать проверку на уровне окна

 цитата:
:::IsStb := _IsControlDefined( "StatusBar", ::cName ) )


и далее использовать эту переменную для проверки наличия статуса у окна

SergKis пишет:

 цитата:
FUNCTION _DefineSplitBox ( ParentForm, bottom, inverted )
...
не создает объект


Все верно, но она помещает требуемый для расчета ClientHeight хэндл в элемент массива родительского окна

 цитата:
_HMG_aFormReBarHandle [ i ] := ControlHandle


который Вы можете использовать в классе окна как ::nReBarHandle := _HMG_aFormReBarHandle [ ::Index ]
без необходимости изменять функцию _EndSplitBox ()

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



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


gfilatov2002 пишет
 цитата:
который Вы можете использовать в классе окна как ::nReBarHandle := _HMG_aFormReBarHandle [ ::Index ]


В _EndToolBar() происходит
ResizeSplitBoxItem ( _HMG_aFormReBarHandle , nBand - 1, aSize[1], aSize[2], aSize[1] )
только после этого имеем реальные его размеры. Т.е. после END TOOLBAR.
 цитата:
без необходимости изменять функцию _EndSplitBox ()


Тогда выходим на уровень prg, как сейчас (для себя я убрал во внутрь), т.к. на mdi заготовки окон могут быть, mdi child (StatusBar на Main), так и
Modal со своим StatusBar или без него, тогда на Main.

 цитата:
и далее использовать эту переменную для проверки наличия статуса у окна


:oStatusBar и есть такая переменная (_IsControlDefined(...) в классе повторяет вычисления индексов, стараюсь избегать это, псевдо ООП для этого),
т.е. iif( Empty(:Stb), ..., ...) заменяет _IsControlDefined(...).

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




Пост N: 5434
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.07.17 15:28. Заголовок: SergKis - лучше напи..


SergKis - лучше напиши демонстрашку маленькую, тогда понятней будет для чего всё это затевается !
Только с комментариями на русском !

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



Пост N: 1599
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.17 16:14. Заголовок: Andrey пишет лучше н..


Andrey пишет
 цитата:
лучше напиши демонстрашку маленькую, тогда понятней будет для чего всё это затевается


Вроде для чего и примеры, разъяснения все время даю. Выйдет версия посмотри примеры и перечитай написанное для начала.
Затевается для работы с окнами\контролами через посылку сообщений, как дополнение к тому что есть в hmg.

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




Пост N: 1148
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.07.17 22:15. Заголовок: SergKis пишет: CLAS..


SergKis пишет:

 цитата:
CLASS TStbData INHERIT TCnlData


Добавил предложенный класс в ядро библиотеки (с исправлением обнаруженных опечаток) и проверил его работу на простом примере:
Скрытый текст

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

P.S. Еще, по-видимому, надо добавить обработчик ошибок в родительский класс TWndData:

 цитата:
ERROR HANDLER OnError( uParam1 )



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



Пост N: 1600
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.17 23:22. Заголовок: gfilatov2002 пишет n..


gfilatov2002 пишет
 цитата:
nY := GetWindowHeight( _HMG_aFormReBarHandle [ oWnd:Index ] )


Это возможный вариант, но красивее тогда как было
DEFINE SPLITBOX HANDLE hSplit
...
nY := GetWindowHeight(hSplit)
По поводу ERROR HANDLE ... пока не задумывался, но, наверно, надо.



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



Пост N: 1601
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.17 23:28. Заголовок: gfilatov2002 пишет n..


gfilatov2002 пишет
 цитата:
nH := This.ClientHeight - GetWindowHeight( oWnd:Stb:Handle ) - nY


Можно так
nH := This.ClientHeight - oWnd:Stb:Height - nY

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




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


SergKis пишет:

 цитата:
красивее тогда как было


SergKis пишет:

 цитата:
Можно так


Благодарю за помощь!
Поправил, конечно...

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



Пост N: 1602
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.07.17 10:38. Заголовок: gfilatov2002 пишет P..


gfilatov2002 пишет
 цитата:
PUBLIC oWnd := ThisWindow.Object


Пожелания (названия переменных условны)
- для Main окна делать PUBLiC oMain := ThisWindow.Object
- для окна узел (имеет подчиненные окна) PUBLIC oForm := ThisWindow.Object
- для текущего окна PRIVATE oWnd := ThisWindow.Object
Тогда, все с текущего окна хорошо переносится на др. окна и в некоторых случаях,
подменив на время ссылку на объект в oWnd, можно выполнить что то общее с др. окна,
при наличии нескольких окон одновременно, легко окнам общаться сообщениями,
oMain всегда доступно, т.е. для примера
PUBL oMain := ThisWindow.Object
PRIV oWnd := oMain


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



Пост N: 1603
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.07.17 10:50. Заголовок: PS PUBLIC oForm := T..


PS
PUBLIC oForm := ThisWindow.Object
можно делать и PRIVATE ..., к примеру
PRIV oDokum := ThisWindow.Object
PRIV oKlient := ThisWindow.Object
...

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




Пост N: 1150
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.07.17 11:09. Заголовок: SergKis пишет: для..


SergKis пишет:

 цитата:
для примера
PUBL oMain := ThisWindow.Object
PRIV oWnd := oMain


Благодарю за пояснение!
Поправил пример с учетом этой логики

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



Пост N: 1606
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.07.17 18:20. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение по GetBox, добавить события LDblClick и WM_KEYDOWN VK_F...
Изменения Скрытый текст



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



Пост N: 1607
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.07.17 18:23. Заголовок: PS пока переносил по..


PS
пока переносил потерял
 
METHOD DoKeyEvent( nKey ) CLASS Get
...
If ( n := AScan( ::aKeyEvent, {|a| a[1] == cKey } ) ) > 0
If HB_ISBLoCK( ::aKeyEvent[ n ][2] )
EVal( ::aKeyEvent[ n ][2], Self, nKey, cKey )
r := 1
EndIf
EndIf



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



Пост N: 1608
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.07.17 18:32. Заголовок: PS нашел у себя стар..


PS
нашел у себя старую ошибку (замену не делал, потому и не натыкался)
 
METHOD SetKeyEvent( nKey, bKey, lCtrl, lShift, lAlt ) CLASS Get
...
If ( n := AScan( ::aKeyEvent, {|a| a[1] == cKey } ) ) > 0
::aKeyEvent[ n ] := { cKey, bKey }
Else
AAdd( ::aKeyEvent, { cKey, bKey } )
EndIf


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




Пост N: 5435
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.07.17 21:39. Заголовок: SergKis пишет: цита..


SergKis пишет:
цитата:
Это надо при работе с ячейками и lEdit := .T.

gfilatov2002 пишет:

 цитата:

Понятно, я уже добавил этот переключатель



Т.е. можно делать так при настройке тсб :
oBrw:lNoKeyChar := .T.  // отключить edit от нажатия клавиш цифр\букв  

В какой версии этот переключатель есть ?


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




Пост N: 1151
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.07.17 13:00. Заголовок: Andrey пишет: В как..


Andrey пишет:

 цитата:
В какой версии этот переключатель


В новой, которая выйдет на следующей неделе

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




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


SergKis пишет:

 цитата:
Предложение по GetBox


Благодарю за Ваше предложение - все работает
Также интересует добавить выделение текста GetBox при нажатии и удержании клавиши Shift вместе со стрелками влево/вправо

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



Пост N: 1609
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.07.17 14:30. Заголовок: gfilatov2002 пишет Т..


gfilatov2002 пишет
 цитата:
Также интересует добавить выделение текста GetBox при нажатии и удержании клавиши Shift вместе со стрелками влево/вправо


Еще интересует LDblClick на GetBox в состоянии ReadOnly, но я пока плохо знаю систему get в hb3.2, надо изучать (в hb2.0 иначе)

 цитата:
все работает


Надо иметь ввиду, что в блоке кода (в предложении) НЕ создается среда _HMG_This... контрола, т.к. в классе GET нет переменной Index, связывать с _DoControlEventProcedure ( bBlock, i, ... ) я не стал, т.к. сам использую блоки кода для сообщений.

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




Пост N: 5438
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.07.17 16:29. Заголовок: Перешёл на версию 17..


Перешёл на версию 17.06 (Update 2)
Выдаёт теперь ошибку:
Error: Unresolved external '_HB_FUN__SETGETUSERDATA' referenced from W:\HB_PROJECT\4PRJ\
Error: Unresolved external '_HB_FUN__SETCONTROLACTION' referenced from W:\HB_PROJECT\4PRJ\

Как исправить ?

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




Пост N: 1153
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.07.17 16:40. Заголовок: Andrey пишет: Как и..


Andrey пишет:

 цитата:
Как исправить ?



 цитата:
_SetGetUserData (cObject, cForm, cObject) // Cargo


эквивалентно

 цитата:
SetProperty (cForm, cObject, 'Cargo', cObject)



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




Пост N: 5439
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.07.17 16:41. Заголовок: А эту функцию - _SET..


А эту функцию - _SETCONTROLACTION как исправить ?
_SetControlAction(cObj, cForm, bBlock , 'ONLOSTFOCUS' )

И вот это как исправить _SetGetUserData(cObjDop, cForm, .F. ) ?
Правильно или нет - SetProperty (cForm, cObjDop, 'Cargo', .F.) ?

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



Пост N: 1611
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.07.17 09:08. Заголовок: gfilatov2002 Добавк..


gfilatov2002
Добавка к классам Скрытый текст

Использование
oGet := (This.Get_1.Object):Get
(This.Get_1.Object):Get:SetKeyEvent(VK_F5, {|og| ... })
(This.Get_1.Object):Get:SetKeyEvent('LDblClick', {|og| ... })
в ACTION
(This.Object):Get:VarGet()
(This.Object):Get:VarPut(...)
...

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




Пост N: 1154
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.17 09:41. Заголовок: SergKis пишет: Доба..


SergKis пишет:

 цитата:
Добавка к классам


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

P.S. Обновил - можете скачать для проверки

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



Пост N: 1612
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.07.17 11:39. Заголовок: gfilatov2002 пишет ..


gfilatov2002 пишет
 цитата:
Обновил - можете скачать для проверки


Добавил Скрытый текст

для наглядности

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




Пост N: 1155
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.17 12:10. Заголовок: SergKis пишет: для ..


SergKis пишет:

 цитата:
для наглядности


Благодарю Добавил, конечно

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



Пост N: 1616
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.07.17 11:31. Заголовок: gfilatov2002 Вы был..


gfilatov2002
Вы были правы, надо добавить в класс TWndData
ACCESS IsStatusBar INLINE ! Empty(::oStatusBar)

Немного по GetBoxСкрытый текст

Потестить надо, я покрутил, но ...
Может задуматься об управлении Tone(...), у себя убрали совсем (только мешает).
Можно в класс внести Get внести переменную и плясать от нее или как то иначе ...


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




Пост N: 1159
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.07.17 11:48. Заголовок: Завершена подготовка..


Завершена подготовка новой сборки 17.07 для BCC 5.51 (Harbour и xHarbour) , которая будет опубликована завтра.

Под заказ возможно сделать индивидуальные сборки для таких дополнительных С-компиляторов:

- MinGW 7.1.0 32-bit и Harbour 3.4.0dev (наиболее востребованная);

- MinGW 7.1.0 64-bit и Harbour 3.4.0dev;

- MS VisualC 2015 32-bit и Harbour 3.2.0dev;

- MS VisualC 2017 32-bit и Harbour 3.2.0dev;

- BCC 10.1 32-bit и Harbour 3.2.0dev;

- PellesC 8.0 32-bit и xHarbour 1.2.3 build 10194 (на любителя).

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

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




Пост N: 1160
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.07.17 11:51. Заголовок: SergKis пишет: Немн..


SergKis пишет:

 цитата:
Немного по GetBox


Это уже изменения для следующей сборки, если таковая появится в обозримом будущем...

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



Пост N: 1617
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.07.17 16:39. Заголовок: gfilatov2002 Если д..


gfilatov2002
Если добавить в TsBrowse
 
METHOD DrawSelect( xRow ) CLASS TSBrowse
...
nBegin := Min( If( ::nColPos <= ::nFreeze, ( ::nColPos := ::nFreeze + 1, ::nColPos - ::nFreeze ), ;
::nColPos - ::nFreeze ), nLastCol )

If ::bOnDrawLine != Nil
Eval( ::bOnDrawLine, Self )
EndIf

For nI := nBegin To nLastCol
...

то можно обходиться без SET RELATION Скрытый текст


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




Пост N: 1161
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.07.17 22:37. Заголовок: SergKis пишет: Немн..


SergKis пишет:

 цитата:
Немного по GetBox


Благодарю за помощь!
Не удержался, и решил включить эти изменения в новую сборку (уже давно был запрос на такие возможности в GetBox)

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




Пост N: 1162
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.07.17 10:32. Заголовок: Опубликована очередн..


Опубликована очередная сборка 17.07 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор лежит по адресу

http://hmgextended.com/files/CONTRIB/hmg-17.07-setup.exe

Благодарю за Ваше внимание и помощь в подготовке этой сборки

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



Пост N: 1618
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.07.17 16:14. Заголовок: gfilatov2002 Пропущ..


gfilatov2002
Пропущено
 
h_tbrowse.prg
Function _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight,;
...
_HMG_aControlMiscData2 [k] := ''

IF _HMG_lOOPEnabled
Eval ( _HMG_bOnControlInit, k, mVar )
ENDIF

Return oBrw
...



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




Пост N: 5449
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.07.17 16:16. Заголовок: Пробую новую версию...


Пробую новую версию.
Глобальный переключатель oBrw:lNoKeyChar := .T. // отключить edit от нажатия клавиш цифр\букв теперь есть !
Это классно.

А нельзя ли сделать такой же переключатель - только выборочно по столбцам ?
Типа oBrw:aColumns[nI]:lNoKeyChar := .F.

Для ENTER же есть - oBrw:aColumns[nI]:lEdit := .F.

Или как то блокировать редактирование полей справочника ?
Т.е. в тестовом проекте (который я высылал Tsb_composite(1.6).7z), редактируется неизвестно что, после нажатия букв/цифр на колонке справочника. Хотя я там блокирую редактирование:
         oBrw1:aColumns[9]:bPrevEdit := {|| SelectStreet(oBrw1), TblFocus(), FALSE }  




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



Пост N: 1619
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.07.17 16:33. Заголовок: Andrey такой перекл..


Andrey
такой переключатель у тебя в руках Скрытый текст



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




Пост N: 5450
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.07.17 16:40. Заголовок: SergKis пишет: тако..


SergKis пишет:

 цитата:
такой переключатель у тебя в руках


Я согласен что он в руках. Но хочется простоты, без обработки функции - :bKeyDown или :bUserKeys
Просто на столбце задать запрет и всё.
Если глянешь мой пример, то там нет в основной таблице: oBrw1:bKeyDown или oBrw1:bUserKeys.
Для многих программ их и не надо.

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



Пост N: 1620
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.07.17 16:44. Заголовок: Andrey пишет Хотя я ..


Andrey пишет
 цитата:
Хотя я там блокирую редактирование:


:bPrevEdit возвращая .F., блокирует edit в METHOD KeyDown(...), но не блокирует выполнение METHOD KeyChar(...),
где вкл. edit от цифр\букв.
попробуй поставь перед возвратом из :bPrevEdit
oBrw:nUserKey := 255 // want to inhibit the KeyDown and KeyChar Methods for key pressed
т.е.
oBrw1:aColumns[9]:bPrevEdit := {|xv,ob| xv := ob, SelectStreet(oBrw1), TblFocus(), ob:nUserKey := 255, FALSE }

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



Пост N: 1621
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.07.17 16:55. Заголовок: Andrey пишет Для мно..


Andrey пишет
 цитата:
Для многих программ их и не надо.


Ты хочешь управлять METHOD KeyChar(...) на самом деле и тогда, вероятно, надо делать,
добавив переменную в класс DATA bKeyChar
 
METHOD KeyChar( nKey, nFlags ) CLASS TSBrowse
...
Default ::nUserKey := nKey

IF ::bKeyChar != Nil .and. !Empty( EVal( ::bKeyChar, Key, Self, nFlag )
RETURN 0
ENDIF

If ::nUserKey == 255 .or. ::lNoKeyChar // from KeyDown() method
Return 0
EndIf


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




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


SergKis пишет:

 цитата:
Пропущено


Благодарю, уже поправил в архиве на сайте

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




Пост N: 5451
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.07.17 17:02. Заголовок: SergKis пишет: oBrw..


SergKis пишет:

 цитата:
oBrw1:aColumns[9]:bPrevEdit := {|xv,ob| xv := ob, SelectStreet(oBrw1), TblFocus(), ob:nUserKey := 255, FALSE }


Не работает ! Все равно редактирует поле справочника после выбора из справочника !

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




Пост N: 1164
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.07.17 11:19. Заголовок: Сделал быстрое обнов..


Сделал быстрое обновление новой сборки с учетом последних изменений.

Список изменений см. ниже
Скрытый текст

Прямая ссылка на архив

http://hmgextended.com/files/CONTRIB/hmg-17.07.7z

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




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


SergKis пишет:

 цитата:
Вы были правы, надо добавить в класс TWndData
ACCESS IsStatusBar INLINE ! Empty(::oStatusBar)


Благодарю Добавил в класс такую строку

 цитата:
ACCESS HasStatusBar INLINE !( Empty( ::oStatusBar ) )

Пример использования:
		IF oWnd:HasStatusBar 
SetStatusbarProperties()
ENDIF
Если есть еще пожелания/предложения для следующей сборки, то они с удовольствием будут приняты...

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




Пост N: 5457
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.17 12:51. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Если есть еще пожелания/предложения для следующей сборки, то они с удовольствием будут приняты...


Есть для Tsbrowsa !
Сделать блокирование столбцов на цифры/буквы, что бы можно было задавать отдельно на любой столбец !
Желательно отдельно - вот так:
oBrw:aColumns[nI]:lNoKeyChar := .F.

Тогда кода можно будет меньше делать, т.е. можно будет обходиться без :bUserKeys и :bKeyDown
Для простых задач - самое нужное ! Для примера смотреть - Tsb_composite

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



Пост N: 1625
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.17 13:13. Заголовок: Andrey пишет oBrw:aC..


Andrey пишет
 цитата:
oBrw:aColumns[nI]:lNoKeyChar := .F.


Чем твоя запись отличается от такой ?
oBrw:aColumns[nI]:bPrevEdit := {|xv,ob| xv := ob, ob:lNoKeyChar := .T., .T. }
Можешь сразу поставить (что лучше)
oBrw:lNoKeyChar := .F.\.T.
на нужных колонках сделать .T.\.F.
Обходимся без bUserKeys

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



Пост N: 1626
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.17 13:17. Заголовок: PS Можно в Cargo кол..


PS
Можно в Cargo колонки записать состояние для :lNoKeyChar и
oBrw:aColumns[nI]:bPrevEdit := {|xv,ob| xv := ob, ob:lNoKeyChar := ob:aColumns[ob:nCell]:Cargo, .T. }

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



Пост N: 1627
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.17 15:14. Заголовок: Andrey пишет oBrw:aC..


Andrey пишет
 цитата:
oBrw:aColumns[nI]:lNoKeyChar := .F.


В примере Tsb_composite, на 9,10 колонках в :bPrevEdit вызов списков, поэтому, даже введя такую переменную в колонку, не решим проблему вкл. Edit, т.к. по цифре\букве мы уже в методе :KeyDown и вызывается :Edit. В примере со списком в :bprevEdit, работает
 
oBrw1:aColumns[ 9]:bPrevEdit := {|| SelectStreet(oBrw1), TblFocus(), _PushKey( VK_ESCAPE ), FALSE }
oBrw1:aColumns[10]:bPrevEdit := {|| SelectLang(oBrw1), _PushKey( VK_ESCAPE ), FALSE }


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




Пост N: 5462
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.17 15:14. Заголовок: SergKis пишет: PS М..


SergKis пишет:

 цитата:
PS
Можно в Cargo колонки записать состояние для :lNoKeyChar и
oBrw:aColumns[nI]:bPrevEdit := {|xv,ob| xv := ob, ob:lNoKeyChar := ob:aColumns[ob:nCell]:Cargo, .T. }


Так не работает !

SergKis пишет:

 цитата:
В твоем случае решается
oBrw1:aColumns[9]:bPrevEdit := {|| SelectStreet(oBrw1), TblFocus(), _PushKey( VK_ESCAPE ), FALSE }
oBrw1:aColumns[10]:bPrevEdit := {|| SelectLang(oBrw1), _PushKey( VK_ESCAPE ), FALSE }



А до этого и не додумался ! Простое и классное решение !
Спасибо за помощь !

Можно это oBrw:aColumns[nI]:lNoKeyChar := .F. теперь и не делать !!!

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




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


gfilatov2002 пишет:

 цитата:
Если есть еще пожелания/предложения для следующей сборки, то они с удовольствием будут приняты...



Немного по дизайну.
Надоел мне, да и юзерам тоже стандартный CHECKBOX .... Ну маленький он очень, пока мышкой попадёшь....
Можно ли сделать стандартны расширенный объект CHECKBOXEX в котором можно было бы задавать картинки для этого чекбокса.
Не хочется связываться со своими самопальными элементами... Хочется стандартных элементов.

Картинки можно взять из MiniGUI\SAMPLES\Advanced\Tsb_BitMaps\RES - check0.bmp и check1.bmp
( формат png тоже бы надо поддерживать )


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



Пост N: 1628
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.17 17:54. Заголовок: Andrey А CheckLabel..


Andrey
А CheckLabel не подходит ?
BASIC\CheckLabel
BASIC\CheckLabel_2


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




Пост N: 5464
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.17 18:05. Заголовок: SergKis пишет: А Ch..


SergKis пишет:

 цитата:
А CheckLabel не подходит ?


Пропустил его...
То что нужно !
Предлагаю добавить в этот пример добавить ещё один CheckLabel
с картинками SAMPLES\Advanced\Tsb_BitMaps\RES - check0.bmp и check1.bmp

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




Пост N: 5469
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.08.17 18:16. Заголовок: Григорий, можно полу..


Григорий, можно получить сборку последней версии МиниГуи для MS VisualC 2015 ?
Попробовать хочу на нём собирать проекты.

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




Пост N: 1166
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.08.17 20:38. Заголовок: Andrey пишет: можно..


Andrey пишет:

 цитата:
можно получить сборку последней версии МиниГуи для MS VisualC


http://hmgextended.com/files/MISC/minigui-vc17.zip

MS VisualC 2017 лежит по ссылке

http://hmgextended.com/files/MISC/vc2017.zip


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




Пост N: 5470
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.08.17 21:44. Заголовок: Спасибо ! :sm36: ..


Спасибо !

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




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


Подготовил второй RC для следующей сборки 17.08

Список изменений см. ниже
Скрытый текст
Если у Вас есть интересные дополнения или пожелания, то пишите...

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




Пост N: 1177
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.08.17 10:25. Заголовок: Опубликована очередн..


Опубликована очередная сборка 17.08 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор лежит по адресу

http://hmgextended.com/files/CONTRIB/hmg-17.08-setup.exe

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

P.S. Очень жаль, что в подготовке этой сборки не участвовал Петр

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




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


gfilatov2002 пишет:

 цитата:
Опубликована очередная сборка 17.08 для BCC 5.51 для компиляторов Harbour и xHarbour



Протестировал несколько систем на новой сборке. Полёт нормальный !

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




Пост N: 1181
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.09.17 13:21. Заголовок: Завершена подготовка..


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

Список изменений см. ниже
Скрытый текст

P.S. Увы, но в подготовке этой сборки не участвовал Петр
Хорошая новость: в команду добавлен новый участник из Италии - Pierpaolo Martinello

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




Пост N: 1182
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.09.17 10:04. Заголовок: Опубликована очередн..


Опубликована очередная сборка 17.09 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор лежит по адресу

http://hmgextended.com/files/CONTRIB/hmg-17.09-setup.exe

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

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




Пост N: 5541
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.09.17 15:14. Заголовок: Нашёл баг при сборке..


Нашёл баг при сборке проекта.

При названии папки, где в конце стоит точка ( типа - XLS_to_CSV.)
Вылет при сборке такой:


Я так и не понял при чем тут MINIPRINT ?

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




Пост N: 1183
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.09.17 11:55. Заголовок: Сделал быстрое обнов..


Сделал быстрое обновление новой сборки с учетом последних исправлений.

Список изменений см. ниже
Скрытый текст

Прямая ссылка на архив

http://hmgextended.com/files/CONTRIB/hmg-17.09.7z



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




Пост N: 1184
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.10.17 14:27. Заголовок: Выполнил адаптацию б..


Выполнил адаптацию библиотеки к новому исправленному MinGW версии 7.20 в связке с Харбором 3.2dev

Собранный Харбор брал с сайта http://whosaway.com

Контрольные примеры отработали нормально, но удивил рост размера библиотеки на 35+ кБайт в сравнении с Харбором 3.4

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

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




Пост N: 6605
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.10.17 15:10. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
в сравнении с Харбором 3.4


А такой разве есть ?

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




Пост N: 1185
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.10.17 16:03. Заголовок: Dima пишет: такой р..


Dima пишет:

 цитата:
такой разве есть ?


Ага. Это продвинутый форк Харбора, который можно посмотреть по адресу

https://github.com/vszakats/harbour-core/releases

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




Пост N: 5583
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.10.17 15:16. Заголовок: Пример SAMPLES\B..


Пример SAMPLES\BASIC\COLORED_TAB
Добавляем в код строку:
	DEFINE TAB Tab_1 ; 
OF Form_1 ;
......
FONT "Arial Black" SIZE 16 BOLD ;
....

Потом при изменении в меню Style (Top pages/Bottom pages) при прорисовке TAB идёт полоса, т.е. наименований табов не видно !
Как там бы учесть новую высоту Tab зависимую от высоты шрифта ?

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




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


Всем, кому это интересно

Опубликована очередная сборка 17.10 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор лежит по адресу

http://hmgextended.com/files/CONTRIB/hmg-17.10-setup.exe

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

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


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


gfilatov2002 пишет:

 цитата:
Всем, кому это интересно


Григорий спасибо. С каждым релизом проект МГ, движется вперёд.
И без лести скажу - в этом большая Ваша заслуга.
Лет примерно 17 назад думал стоит ли дальше использовать МГ после того как Роберто объявил об отказе
от bcc. Но появился Ваш МГ экстендет и это решило выбор на тот момент. Потом появился MG ext под друие компиляторы и это только подтверждение тому что выбор правильный


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




Пост N: 6618
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.11.17 22:36. Заголовок: Haz пишет: И без ле..


Haz пишет:

 цитата:
И без лести скажу - в этом большая Ваша заслуга


+1

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




Пост N: 1188
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.11.17 22:46. Заголовок: Haz пишет: это толь..


Haz пишет:

 цитата:
это только подтверждение тому что выбор правильный


Благодарю за добрые слова!

Увы, но новых идей, как и энтузиазма, с годами не прибавляется...

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

Хочу поблагодарить за такую поддержку двух человек на этом форуме:

Андрея Верченко и Сашу Савова

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




Пост N: 1189
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.11.17 15:34. Заголовок: Подготовил второй RC..


Подготовил второй RC для следующей сборки 17.11

Список изменений см. ниже
Скрытый текст

Если у Вас есть интересные дополнения или пожелания, то пишите...

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




Пост N: 5602
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.11.17 19:49. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Если у Вас есть интересные дополнения или пожелания, то пишите...



Есть предложение !
Расширить объект TEXTBOX форматом для INPUTMASK как в Харборе.
Например: 
cFormat := "!" + REPL("Х",35)
@ ... TEXTBOX Text_1 ...... ;
INPUTMASK cFormat ;
....


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




Пост N: 1190
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.11.17 21:32. Заголовок: Andrey пишет: Расши..


Andrey пишет:

 цитата:
Расширить объект TEXTBOX форматом для INPUTMASK


Именно по этой причине появился в MiniGUI Ex элемент управления GETBOX, который задумывался, как замена контролу TEXTBOX, и который поддерживает все Клипперовские форматы ввода (кстати, первоначально для GETBOX предлагалось использовать имя CLIPPERBOX )

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




Пост N: 5603
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.17 11:14. Заголовок: Понял, Спасибо ! :s..


Понял, Спасибо !

Глюк при выводе CHECKLABEL в цветном TAB !


При первоначальном показе формы другие CHECKLABEL2,3,4 и 5 прорисовываются на Вкладке "Page_1".
Почему ?
Пример отправил на почту.

А ещё заодно, можно ли добавить в объект CHECKLABEL свойство как у CHECKBOX:
ON CHANGE ( lStaticF1p1 := GetProperty(ThisWindow.Name, This.Name, "Checked") )

вместо сейчас используемого:
ONCLICK ( lStaticF1p1 := Form_1.Label_F1p1.Checked, Form_1.Label_F1p1.Checked := !lStaticF1p1 )



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




Пост N: 1191
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.11.17 11:53. Заголовок: Andrey пишет: При п..


Andrey пишет:

 цитата:
При первоначальном показе формы другие CHECKLABEL2,3,4 и 5 прорисовываются на Вкладке "Page_1"


Добавь следующие две строки в конце процедуры OnInitForm

 цитата:
Form_1.Tab_1.Hide
Form_1.Tab_1.Show


для перерисовки первой вкладки

Также можно использовать для перерисовки Таба в этой процедуре следующую строку

 цитата:
UpdateTab(Form_1.Tab_1.Index)



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




Пост N: 5604
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.17 12:36. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Также можно использовать для перерисовки Таба в этой процедуре следующую строку


Спасибо ! Помогло !

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




Пост N: 1192
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.11.17 10:41. Заголовок: Опубликована очередн..


Опубликована очередная сборка 17.11 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор лежит по адресу

http://hmgextended.com/files/CONTRIB/hmg-17.11-setup.exe

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

P.S.

Имеются также готовые сборки для следующих пар (Си-компилятор+Харбор):

- MinGW 7.2.0 32-bit and Harbour 3.2.0dev;

- MinGW 7.2.0 64-bit and Harbour 3.4.0dev;

- MS VisualC 2017 32-bit and Harbour 3.2.0dev.

ссылки на которые будут доступны по Вашему запросу

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




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


gfilatov2002 пишет:

 цитата:
Если у Вас есть интересные дополнения или пожелания, то пишите...


Научился собирать свою DLL-ку с картинками, иконками и т.д.
Как из полученной DLL-ки показывать эти ресурсы на форме - не знаю !
Хотелось бы иметь демо-пример, как это делать ?
Свою сборку выслал на почту.

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




Пост N: 6638
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.11.17 17:14. Заголовок: Andrey Так примеры ..


Andrey
Так примеры же есть

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



Пост N: 1652
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.11.17 18:21. Заголовок: Dima пишет Андрей и..


Dima пишет [quote]`
Андрей имеет ввиду, что сейчас ресурсы назначены на exe, переменная
extern HINSTANCE g_hInstance;
от нее пляшем.
Он хочет уст. в g_hInstance новый handle hDll, сохранив старое значение.
Поработав с рес. dll, потом вернуть старое значение от exe и ...
Если я правильно понимяю



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




Пост N: 6639
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.11.17 18:45. Заголовок: SergKis пишет: Если..


SergKis пишет:

 цитата:
Если я правильно понимяю


Фиг его знает о чем он
Я про этот пример C:\MiniGUI\SAMPLES\BASIC\Icons\demo2.prg

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



Пост N: 1653
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.11.17 22:21. Заголовок: Dima пишет Я про это..


Dima пишет
 цитата:
Я про этот пример


LoadIcon(...) имеет параметр для hDll, а bmp и т.д. работают от g_hInstance, к примеру
 
HB_FUNC( LOADBITMAP )
{
HBITMAP hBitmap;

hBitmap = ( HBITMAP ) LoadImage( g_hInstance, hb_parc( 1 ), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR );
...

т.е. все image идут от g_hInstance


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




Пост N: 5606
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.11.17 10:51. Заголовок: Dima пишет: Фиг его..


Dima пишет:

 цитата:
Фиг его знает о чем он
Я про этот пример C:\MiniGUI\SAMPLES\BASIC\Icons\demo2.prg


Там только иконка.
А как работать с картинками, звуком, CUSTOM из внешней DLL-ки - примеров нет.

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



Пост N: 1654
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.11.17 12:50. Заголовок: Andrey пишет А как р..


Andrey пишет
 цитата:
А как работать с картинками, звуком, CUSTOM из внешней DLL-ки - примеров нет.


Нет команды
SET RESOURCE TO [<cDllName>] // подключить\отключить dll
нет и примеров

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




Пост N: 6640
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.11.17 14:27. Заголовок: SergKis пишет: Нет ..


SergKis пишет:

 цитата:
Нет команды
SET RESOURCE TO


По идее её можно слямздить в FW из source\winapi\resource.c
В ней есть SETRESOURCES и FREERESOURCES из которых состоят команды в FW
 
#xcommand SET RESOURCES TO <cName1> [,<cName2>] ;
=> ;
[ SetResources( <cName2> ); ] SetResources( <cName1> )

#xcommand SET RESOURCES TO => FreeResources()



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




Пост N: 1193
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.11.17 14:52. Заголовок: SergKis пишет: Нет ..


SergKis пишет:

 цитата:
Нет команды
SET RESOURCE TO [<cDllName>] // подключить\отключить dll


Благодарю за наводку

Добавил такую команду в новую сборку.
Она позволяет сейчас вывести на форму следующие ресурсы из DLL:
- картинка
- картинка на кнопку BUTTONEX
- иконка
- анимация из AVI-файла

Dima пишет:
 #xcommand SET RESOURCES TO <cName1> [,<cName2>] ;         => ;            [ SetResources( <cName2> ); ] SetResources( <cName1> )  

#xcommand SET RESOURCES TO => FreeResources()

Так и сделал...

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




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


gfilatov2002 пишет:

 цитата:
Она позволяет сейчас вывести на форму следующие ресурсы из DLL:


А еще нужен звук и CUSTOM для выгрузки в файл...

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




Пост N: 1194
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.11.17 15:37. Заголовок: Andrey пишет: нужен..


Andrey пишет:

 цитата:
нужен звук и CUSTOM для выгрузки в файл


Пример со звуком и выгрузкой в файл отправил по почте...

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




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


gfilatov2002 пишет:

 цитата:
Пример со звуком и выгрузкой в файл отправил по почте...



Классно получилось !!! Не ожидал, что так быстро получиться.

А можно ресурсы загружать в переменные, а потом передавать их в другие функции и там на форму выводить ?

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



Пост N: 1655
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.11.17 09:11. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение
 
*-----------------------------------------------------------------------------*
FUNCTION _GetValue ( ControlName, ParentForm, Index )
*-----------------------------------------------------------------------------*
...
CASE T == "MASKEDTEXT"
...
CASE T == "CHECKLABEL"

retval := GetChkLabel( c )

CASE T == "TEXT" .OR. T == "BTNTEXT" .OR. T == "EDIT" .OR. "LABEL" $ T .OR. T == "HYPERLINK" .OR. T == "CHARMASKTEXT" .OR. T == "RICHEDIT"
...

*-----------------------------------------------------------------------------*
FUNCTION _SetValue ( ControlName, ParentForm, Value, index )
*-----------------------------------------------------------------------------*
...
ELSEIF T == "CHECKLABEL"

IF Value == NIL
Value := ! GetChkLabel ( c )
ENDIF

SetChkLabel ( c , Value )

ELSEIF !( "LABEL" $ T ) .AND. T != "RICHEDIT"
...

*-----------------------------------------------------------------------------*
FUNCTION GetControlValue ( ControlName , ParentForm )
*-----------------------------------------------------------------------------*
LOCAL i

IF ( i := GetControlIndex ( ControlName , ParentForm ) ) == 0
RETURN Nil
ENDIF

IF _HMG_aControlType [ i ] == "CHECKLABEL"
RETURN GetChkLabel( _HMG_aControlHandles [ i ] )
ENDIF

RETURN ( _HMG_aControlValue [ i ] )

тогда включить
*-----------------------------------------------------------------------------*
FUNCTION _DefineChkLabel ( ControlName, ParentFormName, x, y, Caption, w, h, ;
...
_HMG_aControlMiscData2 [k] := ''

IF _HMG_lOOPEnabled
Eval ( _HMG_bOnControlInit, k, mVar )
ENDIF

IF blink == .T. .AND. .NOT. lDialogInMemory
...


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



Пост N: 1656
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.11.17 09:35. Заголовок: PS. Возможно пойдет ..


PS. Возможно пойдет и такое
 
*-----------------------------------------------------------------------------*
FUNCTION _DefineChkLabel ( ControlName, ParentFormName, x, y, Caption, w, h, ;
...
DEFAULT ProcedureName TO {|| _SetValue( ControlName, ParentFormName, NIL ) }


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




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


SergKis пишет:

 цитата:
Предложение


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

Принято в полном объеме

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




Пост N: 1196
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.11.17 14:33. Заголовок: Подготовил очередную..


Подготовил очередную бетку для следующей сборки 17.12

Список изменений см. ниже
Скрытый текст

Благодарю за Ваше внимание и поддержку

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




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


Всем, кому это интересно

Подготовил второй RC для следующей сборки 17.12 со следующим списком изменений (см. ниже)
Скрытый текст

Благодарю за Ваше внимание всех, кто оказывал поддержку этому проекту

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




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


Григорий, а вот в соседней ветке Vlad04 интересуется как получить результат со справочника !
Я высылал тебе пример Tsb_composite - в нём есть такое !
Вдобавок ко всему можно прикрутить свой справочник городов и улиц, там тоже показано как делать.
Т.е. добавить колонку справочника города,
а в справочник улиц передавать фильтр по городу - KCITY==код и будет сразу работать.
Если надо, то ещё раз вышлю архив примера.

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



Пост N: 1664
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.12.17 22:39. Заголовок: Попробовал в mdi пер..


Попробовал в mdi перевести несколько примеров ... Облом. Не работает.
Может кому интересно (может я где не прав). Пример: http://my-files.ru/fzs4u1


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



Пост N: 29
Зарегистрирован: 17.12.14
ссылка на сообщение  Отправлено: 15.12.17 13:03. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Опубликована очередная сборка 17.11 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор лежит по адресу



Григорий, мне приглянулся hbtip.lib из этой сборки
можно где-то взять его сырцы?
боюсь, что сырцы harbour с github слишком для меня "сырые"

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




Пост N: 1203
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.12.17 13:20. Заголовок: alexandr11 пишет: м..


alexandr11 пишет:

 цитата:
можно где-то взять его сырцы?


Библиотека hbtip строится при сборке Харбора из сырцов на github как и другие contrib библиотеки из следующего списка

 цитата:
hbct hbhpdf hbmisc hbmzip hbnf hbcomio hbfoxpro hbgzio hbmemio hbnetio hbpipeio hbtcpio hbtip hbwin hbzebra rddbm xhb


alexandr11 пишет:

 цитата:
сырцы harbour с github слишком для меня "сырые"


Я так понимаю, что Вам нужен батник для сборки этой библиотеки


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




Пост N: 1204
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.12.17 13:24. Заголовок: SergKis пишет: Не р..


SergKis пишет:

 цитата:
Не работает


Очень нравятся Ваши примеры.

Пересобрал этот пример с библиотекой из текущей сборки 17.12 - вроде, нет проблем.

А что точно не работает в Вашем примере

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



Пост N: 30
Зарегистрирован: 17.12.14
ссылка на сообщение  Отправлено: 15.12.17 13:36. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Я так понимаю, что Вам нужен батник для сборки этой библиотеки


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

я с успехом цепляю эту библиотеку к своему проекту, но мне хотелось бы внести в нее изменения...
а если я собираю hbtip.lib из последнего harbour night, то все выходит гораздо хуже...
возможно, я просто не так ее собираю

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



Пост N: 1665
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.12.17 14:01. Заголовок: gfilatov2002 пишет А..


gfilatov2002 пишет
 цитата:
А что точно не работает в Вашем примере


Dokum1
не работает EDITABLE в колонках, т.е. не меняется значения в колонке пробелом

Dokum3
корректировка записи включена (загружены все 3-и окна dokum), нажатие на 1-ом поле Enter вызывает переключение фокуса окна на календарь.
Label надписей у textbox не реагирует на BackColor, устанавливаю как у окна gProp(BColor)



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




Пост N: 1205
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.12.17 14:49. Заголовок: alexandr11 пишет: х..


alexandr11 пишет:

 цитата:
хотелось бы получить батник


Это можно

 цитата:
@echo off

SET HMGPATH=c:\minigui

SET PATH=%HMGPATH%\harbour\bin;c:\bcc55\bin;%PATH%

hbmk2 hbtip.hbp >> build.log



и файл проекта ниже

 цитата:
-hblib
-inc

-ohbtip

-workdir=obj

-w3 -es2 -ko

encurlc.c
mime.c
misc.c

cgi.prg
client.prg
credent.prg
encb64.prg
encoder.prg
encqp.prg
encurl.prg
ftpcli.prg
httpcli.prg
log.prg
mail.prg
popcli.prg
sendmail.prg
sessid.prg
smtpcli.prg
thtml.prg
url.prg


alexandr11 пишет:

 цитата:
именно те сырцы


Сырцы надо брать на github, я ничего не изменял.
Для успешной сборки библиотеки добавил в каталог 2 файла:
- hbssl.ch
- hbssl.hbx

Лог-файл сборки - ниже
hbmk2: Compiling Harbour sources... 
hbmk2: Compiling...
obj\cgi.c:
obj\client.c:
obj\credent.c:
obj\encb64.c:
obj\encoder.c:
obj\encqp.c:
obj\encurl.c:
obj\ftpcli.c:
obj\httpcli.c:
obj\log.c:
obj\mail.c:
obj\popcli.c:
obj\sendmail.c:
obj\sessid.c:
obj\smtpcli.c:
obj\thtml.c:
obj\url.c:
encurlc.c:
mime.c:
misc.c:
hbmk2: Creating static library... hbtip.lib
TLIB 4.5 Copyright (c) 1987, 1999 Inprise Corporation
/P32 hbtip.lib -+ obj\cgi.obj -+ obj\client.obj -+ obj\credent.obj -+ obj\encb64.obj -+ obj\encoder.obj -+ obj\encqp.obj -+ obj\encurl.obj -+ obj\ftpcli.obj -+ obj\httpcli.obj -+ obj\log.obj -+ obj\mail.obj -+ obj\popcli.obj -+ obj\sendmail.obj -+ obj\sessid.obj -+ obj\smtpcli.obj -+ obj\thtml.obj -+ obj\url.obj -+ obj\encurlc.obj -+ obj\mime.obj -+ obj\misc.obj

Пробуйте

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



Пост N: 31
Зарегистрирован: 17.12.14
ссылка на сообщение  Отправлено: 15.12.17 14:52. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Пробуйте


Григорий, большое спасибо!

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



Пост N: 32
Зарегистрирован: 17.12.14
ссылка на сообщение  Отправлено: 15.12.17 15:29. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Пробуйте


Григорий, а где credent.prg взять?

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




Пост N: 1206
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.12.17 16:11. Заголовок: alexandr11 пишет: г..


alexandr11 пишет:

 цитата:
где credent.prg взять?


Это заготовка класса, которую потом убрали из библиотеки

 цитата:
#include "hbclass.ch" 

/*
* Credentials class
* A way to give basic credentials
*/

CREATE CLASS TIPCredentials

VAR cMethod
VAR cUserid
VAR cPassword

ENDCLASS



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




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


SergKis пишет:

 цитата:
не работает EDITABLE в колонках, т.е. не меняется значения в колонке пробелом

Dokum3
корректировка записи включена (загружены все 3-и окна dokum), нажатие на 1-ом поле Enter вызывает переключение фокуса окна на календарь.
Label надписей у textbox не реагирует на BackColor, устанавливаю как у окна gProp(BColor)


Да, есть такие ошибки

Это подтверждает, что mdi-интерфейс еще не готов к серьезной работе
Возможно, Вы можете помочь довести его до рабочего состояния

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



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


gfilatov2002 пишет
 цитата:
помочь довести его до рабочего состояния


Не отказываюсь, но сил хватает посмотреть просмотреть Change.txt и некоторые примеры, к сожалению.
Немного почистил пример и добавил управление на 4-ом item StatusBar: http://TransFiles.ru/4wcis
Что бы было.

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




Пост N: 1208
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.12.17 22:50. Заголовок: SergKis пишет: сил ..


SergKis пишет:

 цитата:
сил хватает просмотреть Change.txt и некоторые примеры


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

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




Пост N: 5630
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.12.17 02:24. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Пересобрал этот пример с библиотекой из текущей сборки 17.12 - вроде, нет проблем.



Я что то пропустил... Библиотека сборки 17.12 уже опубликована или ещё нет ?

Нашёл непонятку в сборке 17.11 - перестала работать команда:
DEFINE BKGBRUSH newBrush PATTERN IN &cFormName PICTURE cResFon, где  cResFon - PNG картинка.

Раньше работала, а с какой версии перестала, уже и не найти.

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



Пост N: 1667
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.12.17 09:14. Заголовок: gfilatov2002 Глянул..


gfilatov2002
Глянул, c_WindowsMdi.c нашей версии, есть разница. Текст, как есть Скрытый текст


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



Пост N: 1668
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.12.17 10:03. Заголовок: PS. На MdiChild окна..


PS. На MdiChild окнах исп. GetBox, TextBox по прежнему сбивает фокус - не побороли.

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




Пост N: 1209
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.12.17 10:57. Заголовок: Andrey пишет: Нашёл..


Andrey пишет:

 цитата:
Нашёл непонятку в сборке 17.11 - перестала работать команда:
DEFINE BKGBRUSH newBrush PATTERN IN &cFormName PICTURE cResFon, где cResFon - PNG картинка.


Попробуй записать эту команду таким образом

 цитата:
DEFINE BKGBRUSH newBrush PATTERN IN &cFormName PICTURE &cResFon


У меня работает нормально с PNG картинкой

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




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


gfilatov2002 пишет:

 цитата:
&cResFon


Да, так заработало ! Спасибо !

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




Пост N: 1210
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.12.17 15:57. Заголовок: Andrey пишет: Библи..


Andrey пишет:

 цитата:
Библиотека сборки 17.12 уже опубликована или ещё нет ?


По секрету, она будет опубликована в понедельник

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




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


gfilatov2002 пишет:

 цитата:
По секрету, она будет опубликована в понедельник


Здорово ! Ждем !

А можно в следующей версии сделать изменение для Checklabel ?
Сейчас Checklabel не работает с PNG-картинкой, хочется чтобы заработал.
А у BMP-слишком белый фон лезет, на разных цветах.

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


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


Пост N: 744
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 17.12.17 09:14. Заголовок: Andrey Пример отосл..


Andrey

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


Мог бы примеры и выкладывать для общего обозрения

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




Пост N: 5635
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.12.17 12:05. Заголовок: Vlad04 пишет: Мог б..


Vlad04 пишет:

 цитата:
Мог бы примеры и выкладывать для общего обозрения


Зачем выкладывать нерабочий пример ? Там PNG-картинка не работает.
Как Григорий его подправит, тогда можно и выложить.
А законченные примеры смотри, я их выкладываю:
http://abonent4.ru/minigui/
http://abonent4.ru/fastreport/
http://abonent4.ru/letodb/

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




Пост N: 1211
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.12.17 11:44. Заголовок: Опубликована очередн..


Опубликована очередная сборка 17.12 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-17.12-setup.exe

Имеются в наличии также готовые сборки для следующих пар (Си-компилятор+Харбор):

- MinGW 7.2.0 32-bit для Harbour 3.2.0dev;

- MinGW 7.2.0 64-bit для Harbour 3.4.0dev;

- MS VisualC 2017 32-bit для Harbour 3.2.0dev;

- Borland/Embarcadero C++ 7.3 (32-bit) для Harbour 3.2.0dev.

ссылки на которые будут доступны по Вашему запросу

Поздравляю всех с наступающим Днем святого Николая

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




Пост N: 5641
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.12.17 17:17. Заголовок: Vlad04 пишет: Мог б..


Vlad04 пишет:

 цитата:
Мог бы примеры и выкладывать для общего обозрения


Выкладываю - https://cloud.mail.ru/public/LaU2/K68x1AHwF

Григорий !
Спасибо за новую версию !

Вижу новую доработку для TAB
   - function syntax: 
SetProperty ( Form, Tab, 'Enabled', nPage, .T.|.F. )
GetProperty ( Form, Tab, 'Enabled', nPage )
- pseudo-OOP syntax:
Form.Tab.Enabled( nPage ) := .T.|.F.
Form.Tab.Enabled( nPage ) --> lStatus


А можно сделать вкладку Show/Hide по номеру ?
Типа: Form.Tab.Visible( nPage ) := .T.|.F.

Часто нужно скрывать/разрешать показ вкладок от желания пользователя.

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




Пост N: 1212
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.12.17 11:09. Заголовок: Andrey пишет: А мож..


Andrey пишет:

 цитата:
А можно сделать вкладку Show/Hide по номеру ?


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

Скрытый текст

Надеюсь, что идея понятна

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




Пост N: 5642
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.12.17 12:09. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Надеюсь, что идея понятна


СПАСИБО ! Буду применять у себя !

Попробовал... Фигня получается...
Для одноцветного Tab работает, а для многоцветного нет.

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

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




Пост N: 1226
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.01.18 15:32. Заголовок: Продолжаем хорошие новости


Завершена подготовка первого RC для новой сборки 18.01 со следующими изменениями:

- исправление обнаруженных ошибок и неточностей кода в ядре библиотеки;
- добавлена поддержка картинок из внешней DLL для всех элементов управления (в текущей версии подделживается только ButtonEx);
- добавлена в ядро новая функция GetDeskTopArea(), которая возвращает координаты рабочего стола без учета размеров панели задач;
- добавлен новый метод ReDraw для всех окон и контролов;
- исправления в билиотеках PScript, TSBrowse и WinReport;
- новые примеры и обновления старых примеров (как обычно).

Поздравляю всех с наступающим православным Рождеством!

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



Пост N: 1690
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.01.18 19:57. Заголовок: gfilatov2002 Столкн..


gfilatov2002
Столкнулся с :lEnabled в тсб, метод :Enabled(...) в моей версии с цветами странное поведение:
при :Enabled(.F.) сохраняет цвета и остается только Header и Footer (тела строк нет - белое), должно было быть серым (?)
при :Enabled(.T) возвращает цвета нормально после :Refresh() и картинка со строками ок.
отложил метод пока, использую только :lEnabled := .T.\.F., практически все хорошо, кроме :KeyDown, перемещает курсор,
предлагаю (т.к. тексты версий совпадают в этом):
 
METHOD KeyChar( nKey, nFlags ) CLASS TSBrowse
...
If ! ::lKeyChar
Return 0
ElseIf ! ::lEnabled
Return 0

ElseIf ::nUserKey == 255 // from KeyDown() method
Return 0
EndIf
...
METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse
...
If ! ::lEnabled
Return 0
Endif

Default nFireKey := VK_F2
...


Присоединяюсь к поздравлению !


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




Пост N: 1227
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.01.18 20:27. Заголовок: SergKis пишет: пред..


SergKis пишет:

 цитата:
предлагаю


Принимается
Благодарю за помощь


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




Пост N: 5677
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.01.18 21:47. Заголовок: Всех с наступающим Р..


Всех с наступающим Рождеством !

Как там насчёт сделать вкладку Show/Hide по номеру ?
А то пример стоит, не получается.

Andrey пишет (Пост N: 5642):

 цитата:
Попробовал... Фигня получается...
Для одноцветного Tab работает, а для многоцветного нет.
Пример отправил на почту.



В примере, если закрыть вкладку 1 (Visible Page 1) и выйти из программы (сохраняются параметры),
то после повторного запуска получается ошибка.
Невозможно отобразить элементы на 1-ой вкладке:
Error MGERROR/0 Control: Label_F1p1 Of Form_1 Not defined. Program terminated
Это то понятно... Но как правильно сделать не знаю.
Была бы скрытая вкладка, то такого бы не было - это раз !
И второе - цвета с не показываемой вкладки переходят на следующую вкладку ! С этим как бороться ?

Если примера нет, могу выслать повторно.
Я думаю этот пример желательно разместить в библиотеке.
Хоть будет один сложный пример для всех желающих. Т.е. наглядное пособие сложного решения.


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



Пост N: 1691
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.01.18 11:39. Заголовок: gfilatov2002 пишет П..


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


Не отключенным оказалось WM_MOUSEWHEEL, можно делать
 
METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TSBrowse
...
ElseIf nMsg == WM_MOUSEWHEEL
If ::hWnd != 0 .and. ! ::lDontChange .and. :lEnabled
nDelta := Bin2I( I2Bin( HiWord( nWParam ) ) ) / 120
::MouseWheel( nMsg, nDelta, LoWord( nLParam ), HiWord( nLParam ) )
EndIf
Return 0
...
посмотрев, думаю лучше будет
METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TSBrowse
Local nDelta, ix

Default ::lNoPaint := .F., ; //V90
::lDontChange := .F. //V90

If ! ::lEnabled
Return 0
EndIf

If hb_IsBlock( ::bEvents )
...

но может упускаю что то ?



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



Пост N: 1692
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.01.18 14:13. Заголовок: SergKis пишет но мож..


SergKis пишет
 цитата:
но может упускаю что то ?


В таком виде работу метода :Enabled. Поковырял, получилось так
 
METHOD DrawLine( xRow ) CLASS TSBrowse
...
// IF !::lEnabled
// RETURN SELF
// endif

...
METHOD DrawSelect( xRow, lFoot ) CLASS TSBrowse
...
// IF !::lEnabled
// RETURN SELF
// endif

...
METHOD Enabled( lEnab ) CLASS TSBrowse
...
IF ValType( lEnab ) == "L"
...
ENDIF
::Refresh()

ENDIF

RETURN 0
...
METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TSBrowse
...
// If ! ::lEnabled
// Return 0
// EndIf

...
ElseIf nMsg == WM_VSCROLL
If ::lDontchange
Return Nil
EndIf
if nLParam == 0 .and. ::Enabled
Return ::VScroll( Loword( nWParam ), HiWord( nWParam ) )
endif
Elseif nMsg == WM_HSCROLL
If ! ::lEnabled
Return 0
ElseIf ::lDontchange
//V90
Return Nil //V90
EndIf //V90

Return ::HScroll( Loword( nWParam ), HiWord( nWParam ) )
...
ElseIf nMsg == WM_LBUTTONDBLCLK .and. _GetKeyState( VK_SHIFT )
If ! ::lEnabled
Return 0
ElseIf ::lCanSelect .and. !::lEditable

::Selection()
Endif
ElseIf nMsg == WM_MOUSEWHEEL
If ::hWnd != 0 .and. ::lEnabled .and. ! ::lDontChange
nDelta := Bin2I( I2Bin( HiWord( nWParam ) ) ) / 120
...
METHOD KeyUp( nKey, nFlags ) CLASS TSBrowse

If ! ::lEnabled
Return 0
EndIf

...
METHOD Selection() CLASS TSBrowse
...


Заработал метод :Enabled(.F.\.T.) с раскраской (над цветами, возможно, еще надо поработать)



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




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


SergKis пишет:

 цитата:
Заработал метод :Enabled(.F.\.T.) с раскраской


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

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



Пост N: 1696
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.01.18 13:16. Заголовок: gfilatov2002 Еще пр..


gfilatov2002
Еще правки:
 
METHOD Enabled( lEnab ) CLASS TSBrowse
...
::lEnabled := .F.
::SetColor( { 2 }, { CLR_HGRAY } )
::SetColor( { 3, 4 }, { CLR_GRAY, CLR_HGRAY } )
::SetColor( { 9, 10 }, { CLR_GRAY, CLR_HGRAY } )
::SetColor( { 16, 17 }, { CLR_GRAY, CLR_HGRAY } )
::SetColor( { 18, 19 }, { CLR_GRAY, CLR_HGRAY } )

ELSE
...


CLASS TWndData
...
VAR oName AS OBJECT
VAR oHand AS OBJECT
VAR lAction INIT .T.


EXPORTED:
...
ASSIGN Cargo( xVal ) INLINE _WindowCargo( Self, xVal )

ACCESS Action INLINE ::lAction
ASSIGN Action( lAction ) INLINE ::lAction := ! empty(lAction)

ACCESS StatusBar INLINE ::oStatusBar
...

METHOD UserKeys( Key, Block, p2, p3 ) INLINE iif( HB_ISBLOCK( Block ), ::oUserKeys:Set( Key, Block ), ;
iif( ::lAction, ::oUserKeys:Do ( Key, Block, p2, p3 ), Nil ) )

METHOD Event ( Key, Block, p2, p3 ) INLINE iif( HB_ISBLOCK( Block ), ::oEvent:Set( Key, Block ), ;
iif( ::lAction, ::oEvent:Do ( Key, Block, p2, p3 ), Nil ) )

METHOD PostMsg( nKey, nHandle ) INLINE iif( ::lAction, ;
PostMessage(::nHandle, ::WM_nMsgW, nKey, hb_defaultValue(nHandle, 0)), Nil )
METHOD SendMsg( nKey, nHandle ) INLINE iif( ::lAction, ;
SendMessage(::nHandle, ::WM_nMsgW, nKey, hb_defaultValue(nHandle, 0)), Nil )

METHOD Release() INLINE iif( ::IsWindow, iif( ::lAction, PostMessage(::nHandle, WM_CLOSE, 0, 0), Nil ), Nil )
...

как это работает в готовом реал. примере (на своей lib) http://my-files.ru/dkcnbc
жмем F9 ToServ и блокируется работа всех кнопок и дверь выхода с окна с раскраской
Похожий пример потом можно сгородить

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



Пост N: 1697
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.01.18 13:30. Заголовок: PS Виноват, надо в a..


PS
Виноват, надо в article.ini
PathUmz=C:\UCHET\MATERIAL\SPR
указать, создать и переписать из DATA U02.dbf
Прога под конкретного клиента, по изменению Артикула в базе.


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



Пост N: 1698
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.01.18 14:11. Заголовок: PS по текстам так вы..


PS
по текстам так выглядит Скрытый текст


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



Пост N: 1699
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.01.18 01:03. Заголовок: gfilatov2002 Что то..


gfilatov2002
Что то в TsBrowse не оказалось Cargo, может стоит добавить, для удобства ?
oBrw:Cargo := 123
nVal := oBrw:Cargo



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




Пост N: 1229
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.01.18 12:21. Заголовок: SergKis пишет: може..


SergKis пишет:

 цитата:
может стоит добавить


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

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




Пост N: 5687
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.18 10:13. Заголовок: Присоединяюсь к доба..


Присоединяюсь к добавлениям ... Если конечно это не сложно и не помешает логике.
   ? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Row") 
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Col")
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Width")
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Height")

Добавить
  ? oBrw:nRowWnd 
? oBrw:nColWnd
? oBrw:nWidthWnd
? oBrw:nHeightWnd



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



Пост N: 1700
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.01.18 10:40. Заголовок: Andrey This.Row Thi..


Andrey
This.Row
This.Col
This.Width
This.Height
ThisWindow.Row
ThisWindow.Col
ThisWindow.Width
ThisWindow.Height
Form_1.Row
Form_1.Col
Form_1.Width
Form_1.Height
GetWindowRow(oBrw:hWndParent)
GetWindowCol(oBrw:hWndParent)
GetWindowWidth(oBrw:hWndParent)
GetWindowHeight(oBrw:hWndParent)
SET OOP ON
oWnd := Do_Obj(oBrw:hWndParent)
oWnd:Row
oWnd:Col
oWnd:Width
oWnd:Height
oTsb := Do_Obj(oBrw:hWnd)
oTsb:Window:Row
oTsb:Window:Col
oTsb:Window:Width
oTsb:Window:Height
маловато будет ?


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



Пост N: 1701
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.01.18 12:01. Заголовок: PS в дополнение созд..


PS
в дополнение
создать среду _HMG_This... для блока кода (при работе с тсб, к примеру)
1. для окна
xRet := Do_WindowEventProcedure ( bBlock, GetFormIndex('Form_1'), p1, p2, p3, p4 )
2. для контрола
xRet := Do_ControlEventProcedure ( bBlock, GetControlIndex('Имя_контрола', 'Form_1'), p1, p2, p3, p4 )
среда _HMG_This... для блока кода создается, потом восстанавливается предыдущая

в продолжение SET OOP ON (без среды This)
FUNC My( obj, par1, par2, par3 )
...
RETURN { par1,par2,par3, obj:IsWindow }
1.
aRet := Do_Obj(oBrw:hWndParent, {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC')
или
aRet := Do_Obj(GetFormHandle('Form_1'), {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC')
получим
? aRet[4] // .T.
2.
aRet := Do_Obj(oBrw:hWnd, {|ob,p1,p2,p3| My(ob,p1,p2,p3) }, 'AAA', 'BBB', 'CCC')
или
aRet := Do_Obj(GetControlHandle('Имя_контрола', 'Form_1'), {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC')
получим
? aRet[4] // .F.
в первом случае блок получит объект окна
во втором объект Tsb\ контрола



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




Пост N: 5688
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.18 12:16. Заголовок: SergKis пишет: мало..


SergKis пишет:

 цитата:
маловато будет ?


В самый раз !

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


Пост N: 754
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 10.01.18 17:56. Заголовок: Примеры кода ... a..


Примеры кода

 цитата:

...
aRet := Do_Obj(GetControlHandle('Имя_контрола', 'Form_1'),
или
aRet := Do_Obj(GetControlHandle('Имя_контрола', 'Form_1'), {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC')
...


и др.
Это , конечно, круто, но совсем не наглядно. На мой взгляд, все сложности и хитрости должны быть за "бортом" прикладных программ - где-то в исходниках
библиотеки, dLL и т.п.
Мне больше по душе :
This.Row
This.Col
This.Width
This.Height
This.Value
This.Name
..
А все остальные действия должны быть типа 2+3 и т.п

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



Пост N: 1702
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.01.18 19:37. Заголовок: Это , конечно, крут..




 цитата:
Это , конечно, круто, но совсем не наглядно...
Мне больше по душе


Где среда This создается - удобно, где ее нет, this уже не работает, в той же тсб.
Есть ф-ии для добывания объктов
o := _WindowObj(FormName\FormHandle)
o := _ControlObj(ControlHandle[\ControlName, FormName])
вместо них использую получить любой объект по handle
o := Do_Obj(Handle[, block,....])
в основном, исп. без блока, но при наличии массива Handle
AEval(aHandle, {|nh| Do_Obj(nh, {|obj| MyFun(obj) }) })
даже очень ничего, т.е.
AEval(_HMG_aFormHandles, {|nh,nn| Do_Obj(nh, {|obj| MyFun(obj, nn) }) })
обработаем все окна, причем в MyFun(oWnd) работать с объектом окна, т.е.
oWnd:Type
oWnd:Name
oWnd:Index
oWnd:Row
oWnd:Col
oWnd:Width
oWnd:Height
oWnd:ClientWidth
oWnd:ClientHeight
oWnd:Value
...
crazy пример, перебор всех контролов всех окон
AEval(_HMG_aControlHandles, {|nh,nn| Do_Obj(nh, {|obj| MyFun(obj, nn) }) })
MyFun(oCtl) будет работать с обектами контролов
oCtl:Type
oCtl:Name
oCtl:Index
oCtl:Row
oCtl:Col
oCtl:Width
oCtl:Height
oCtl:ClientWidth
oCtl:ClientHeight
oCtl:Value
...
не все контролы вкл. в SET OOP ON, где то будет Nil возврат.



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




Пост N: 5689
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.18 22:22. Заголовок: Andrey пишет: Присо..


Andrey пишет:

 цитата:
Присоединяюсь к добавлениям ... Если конечно это не сложно и не помешает логике.
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Row")
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Col")
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Width")
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Height")
Добавить
? oBrw:nRowWnd
? oBrw:nColWnd
? oBrw:nWidthWnd
? oBrw:nHeightWnd



SergKis пишет:

 цитата:
Где среда This создается - удобно, где ее нет, this уже не работает, в той же тсб.
Есть ф-ии для добывания объктов



Так я и хочу короткого написания функций
oBrw:nRowWnd вместо GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Row") .
Может и неправильно написал, надо наверное так:
   ? oBrw:nRowBrw   
? oBrw:nColBrw
? oBrw:nWidthBrw
? oBrw:nHeightBrw


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



Пост N: 1703
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.01.18 22:36. Заголовок: Andrey пишет Так я и..


Andrey пишет
 цитата:
Так я и хочу короткого написания функций


Есть (METHOD New смотри) координаты, я понимаю
oBrw:nTop
oBrw:nLeft
oBrw:nBottom
oBrw:Right


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




Пост N: 5690
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.18 22:49. Заголовок: SergKis пишет: Есть..


SergKis пишет:

 цитата:
Есть (METHOD New смотри) координаты, я понимаю


Пропустил ! Спасибо !
То что нужно.

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



Пост N: 1704
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.01.18 22:50. Заголовок: PS создавай this сре..


PS
создавай this среду в своей функции, запускай через блок кода для тсб
xRet := Do_ControlEventProcedure ( bBlock, GetControlIndex(oBrw:cControlName, oBrw:cParentWnd), p1, p2, p3, p4 )


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




Пост N: 5691
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.18 22:55. Заголовок: SergKis пишет: созд..


SergKis пишет:

 цитата:
создавай this среду в своей функции, запускай через блок кода для тсб
xRet := Do_ControlEventProcedure ( bBlock, GetControlIndex(oBrw:cControlName, oBrw:cParentWnd), p1, p2, p3, p4 )


Не всё сразу. Надо с более простым решением разобраться.

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


Пост N: 755
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 12.01.18 14:09. Заголовок: SergKis пример, пе..


SergKis


 цитата:
пример, перебор всех контролов всех окон



Для чего ? Не могу даже представить , для чего мне бы это потребовалось. Окно - это визуальное представление данных, а данные в таблицах, которые везде видны,
ну и переменных памяти. Обычно работа идет с одним активным основным окном и с несколькими вспомогательными.

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



Пост N: 1705
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.01.18 14:21. Заголовок: Vlad04 SergKis пише..


Vlad04
SergKis пишет
 цитата:
crazy пример, перебор всех контролов всех окон


Выбрать контролы одного окна, тоже надо перебрать _HMG_aControlHandles и по handle окна это сделать.



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




Пост N: 5692
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.01.18 15:52. Заголовок: SergKis пишет: по т..


SergKis пишет:

 цитата:
по текстам так выглядит


Мне очень понравился стиль написания программы.
Жалко что не было такого раньше.


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




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


gfilatov2002 пишет:

 цитата:
Если есть еще пожелания/предложения для следующей сборки, то они с удовольствием будут приняты...


У меня возник вопрос: А как можно задать фонт для титула таблицы для Excel2() ?
Мне ответили - пока никак, надо развивать Exel2.

Есть пожелание для небольшого развития
METHOD Excel2( cFile, lActivate, hProgress, cTitle, lSave, bPrintRow ) CLASS TSBrowse

1) Добавить возможность задания фонта для титула таблицы, это то что над шапкой таблицы.
А то выходит очень маленьким фонтом.

А в идеале бы хотелось чтобы туда можно было передавать хотя бы 3 фонта в массиве (титул,шапка,ячейки),
для независимого построения листа экселя !
Таким образом можно будет подобрать приличный вид листа экселя.
Всё равно же при задании большого фонта в таблице высота ячейки не меняется.

2) Да и еще бы использовать то что предложил SergKis в Пост N: 1706.





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



Пост N: 1708
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.01.18 18:40. Заголовок: С пожеланием Ардрея,..


С пожеланием Ардрея, получилось так :
 
METHOD Excel2( cFile, lActivate, hProgress, xTitle, lSave ) CLASS TSBrowse
...
nOldCol := ::nCell
Local nCntCols := ::nColCount(), oCol, ;
aFntLine := array(nCntCols), ;
aFntHead := array(nCntCols), ;
aFntFoot := array(nCntCols), ;
hFntTitl, cTitle


Default nInstance := 0

If HB_ISARRAY(xTitle) .and. Len(xTitle) > 1
cTitle := xTitle[1]
hFntTitl := xTitle[2]
EndIf

Default cFile := "Book1.xls", ;
lActivate := .T., ;
lSave := .F., ;
cTitle := "", ;
hFntTitl := hFont


CursorWait()

For i := 1 To nCntCols
oCol := ::aColumns[ i ]
aFntLine[ i ] := oCol:hFont
aFntHead[ i ] := oCol:hFontHead
aFntFoot[ i ] := oCol:hFontFoot
If HB_ISBLOCK(oCol:hFont)
oCol:hFont := hFont
EndIf
If HB_ISBLOCK(oCol:hFontHead)
oCol:hFontHead := hFont
EndIf
If HB_ISBLOCK(oCol:hFontFoot)
oCol:hFontFoot := hFont
EndIf
Next

::lNoPaint := .F.
...
For nCol := 1 To Len( ::aColumns )

If Empty( ::aColumns[ nCol ]:hFont ) .and. Empty( ::aColumns[ nCol ]:hFontHead )
Loop
EndIf

hFont := ::aColumns[ nCol ]:hFont

If hFont != Nil
aFontTmp := GetFontParam(hFont)
IF AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ;
e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ;
e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } ) == 0

AAdd( aFont, aFontTmp )
endif

EndIf

If hFont != Nil .and. hFntTitl != hFont

hFont := hFntTitl
aFontTmp := GetFontParam(hFont)
IF AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ;
e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ;
e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } ) == 0

AAdd( aFont, aFontTmp )
endif

EndIf

hFont := ::aColumns[ nCol ]:hFontHead

If hFont != Nil
aFontTmp := GetFontParam(hFont)
IF AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ;
e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ;
e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } ) == 0

AAdd( aFont, aFontTmp )
endif

EndIf

hFont := ::aColumns[ nCol ]:hFontFoot

If hFont != Nil
aFontTmp := GetFontParam(hFont)
IF AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ;
e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ;
e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } ) == 0

AAdd( aFont, aFontTmp )
endif

EndIf

Next

If Len( aFont ) > 4
ASize( aFont, 4 )
EndIf
...
For nRow := 1 To ( ::nLen )

If nRow == 1

If ! Empty( cTitle )
cTitle := StrTran( cTitle, CRLF, Chr( 10 ) )
nAlign := If( Chr( 10 ) $ cTitle, 5, 1 )
hFont := hFntTitl
aFontTmp := GetFontParam( hFont )
nFont := AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ;
e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ;
e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } )
FWrite( nHandle, BiffRec( 4, cTitle, 0, 0,, nAlign,, Max( 0, nFont - 1 ) ) )

nLine := 3
EndIf

For nCol := 1 To Len( ::aColumns )

uData := If( ValType( ::aColumns[ nCol ]:cHeading ) == "B", ;
Eval( ::aColumns[ nCol ]:cHeading, nCol, Self ), ;
::aColumns[ nCol ]:cHeading )
...
Next

If ::lDrawFooters

For nCol := 1 To Len( ::aColumns )

uData := If( ValType( ::aColumns[ nCol ]:cFooting ) == "B", ;
Eval( ::aColumns[ nCol ]:cFooting, nCol, Self ), ;
::aColumns[ nCol ]:cFooting )

If ValType( uData ) != "C"
uData := " "
EndIf

uData := Trim( StrTran( uData, CRLF, Chr( 10 ) ) )
nAlign := Min( LoWord( ::aColumns[ nCol ]:nFAlign ), 2 )
nAlign := If( Chr( 10 ) $ uData, 4, nAlign )
hFont := ::aColumns[ nCol ]:hFontFoot
aFontTmp := GetFontParam( hFont )
nFont := AScan( aFont, {|e| e[ 1 ] == aFontTmp[ 1 ] .and. e[ 2 ] == aFontTmp[ 2 ] .and. ;
e[ 3 ] == aFontTmp[ 3 ] .and. e[ 4 ] == aFontTmp[ 4 ] .and. ;
e[ 5 ] == aFontTmp[ 5 ] .and. e[ 6 ] == aFontTmp[ 6 ] } )

FWrite( nHandle, BiffRec( 4, uData, nLine - 1, nCol - 1, .T., nAlign + 1,, ;
Max( 0, nFont - 1 ) ) )

If hProgress != Nil

If nCount % nEvery == 0
SendMessage(hProgress, PBM_SETPOS, nCount, 0)
EndIf

nCount ++

EndIf

Next

++nLine

EndIf

FWrite( nHandle, BiffRec( 10 ) )
FClose( nHandle )

For i := 1 To nCntCols
oCol := ::aColumns[ i ]
oCol:hFont := aFntLine [ i ]
oCol:hFontHead := aFntHead [ i ]
oCol:hFontFoot := aFntFoot [ i ]
Next

If hProgress != Nil
SendMessage(hProgress, PBM_SETPOS, nTotal, 0)
EndIf
...

т.е. титул задавать массивом {"TEST TITLE EXCEL.", GetFontHandle('Font_5') }



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




Пост N: 5699
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.01.18 18:47. Заголовок: SergKis пишет: METH..


SergKis пишет:

 цитата:
METHOD Excel2( cFile, lActivate, hProgress, xTitle, lSave )



1) Чтобы у всех не свалились программы, наверное нужно сделать проверку на массив.
Если не массив, то работать нужно по старому, а если массив то по новому !

2) И как сделать показ своей функции ?
Допустим показа простого кол-ва: nCol / Len( ::aColSizes )
Блин, на старых компах так медленно идёт загрузка 5 тыс. записей...


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



Пост N: 1709
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.01.18 19:29. Заголовок: Andrey пишет Если не..


Andrey пишет
 цитата:
Если не массив, то работать нужно по старому, а если массив то по новому !


Ты прав, пропустил
 
If HB_ISARRAY(xTitle) .and. Len(xTitle) > 1
cTitle := xTitle[1]
hFntTitl := xTitle[2]
Else
cTitle := xTitle

EndIf

убрал у себя
cTitle := AllTrim(cTitle)
это всегда можно сделать снаружи

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




Пост N: 5700
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.01.18 19:32. Заголовок: SergKis пишет: это ..


SergKis пишет:

 цитата:
это всегда можно сделать снаружи


Нет не всегда. Я очень не люблю когда рабочии системы - пересобираешь новой версией и они начинают валиться !

А как сделать показ своей функции ?
Допустим показа простого кол-ва: nCol / Len( ::aColSizes )
Я вызываю свою фоновую функцию WaitThreadSay(cVal) // вывод доп.информации
Если это сложно, то фиг с ним, не надо.


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




Пост N: 1230
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.01.18 11:53. Заголовок: SergKis пишет: С по..


SergKis пишет:

 цитата:
С пожеланием Ардрея, получилось так


Добавил эти правки в RC 2 новой сборки.
Благодарю за помощь

P.S. В связи с необходимостью лечения позвоночника (остеохондроз и прочее) вынужден сократить время посещения форума и работы над новой сборкой, которая запланирована к выходу на следующей неделе...

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



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


gfilatov2002
еще немного правок в excel2
 
...
For nCol := 1 To Len( ::aColumns )

If ::aColumns[ nCol ]:lBitMap
Loop
Else
If Empty( ::aColumns[ nCol ]:hFont ) .and. Empty( ::aColumns[ nCol ]:hFontHead )
Loop
EndIf

hFont := ::aColumns[ nCol ]:hFont
...
For nRow := 1 To ( ::nLen )

If nRow == 1
...
For nCol := 1 To Len( ::aColumns )

If ::aColumns[ nCol ]:lBitMap
Loop
EndIf

uData := If( ValType( ::aColumns[ nCol ]:cHeading ) == "B", ;
...
EndIf
...


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




Пост N: 1231
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.01.18 21:56. Заголовок: SergKis пишет: еще ..


SergKis пишет:

 цитата:
еще немного правок в excel2


OK, спасибо

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



Пост N: 1711
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.01.18 15:44. Заголовок: gfilatov2002 еще пр..


gfilatov2002
еще правки
 
METHOD LButtonDown( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse
...
oCol, ix

If ! ::lEnabled
Return 0
EndIf

Default ::lDontChange := .F.
...
METHOD LButtonUp( nRowPix, nColPix, nFlags ) CLASS TSBrowse

Local nClickRow, nDestCol

If ! ::lEnabled
Return 0
EndIf

If nKeyPressed != Nil
::DrawPressed( nKeyPressed, .F. )
EndIf
...


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




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


SergKis пишет:

 цитата:
еще правки


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

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




Пост N: 1233
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.01.18 12:14. Заголовок: Завершена подготовка..


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

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



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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 22.01.18 14:34. Заголовок: gfilatov2002 Но мы..


gfilatov2002

Но мы Вас ещё ведь услышим? Или лечение не позволит попасть на форум?

Спасибо: 0 
Vlad04
постоянный участник


Пост N: 757
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 22.01.18 14:55. Заголовок: длительного лечения ..



 цитата:
длительного лечения позвоночника



Будьте осторожны ! Никаких операций! Будьте здоровы.

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



Пост N: 1712
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.01.18 15:24. Заголовок: Мой опыт борьбы (бол..


Мой опыт борьбы (более 15 лет) с неисправностью позвоночника (без травм, из за сдвига дисков, от сидения - работа такая),
одна нога почти на 10 см. была короче другой. По каким только врачам, институтам не ходил, толку 0. Пока
3 женщины с лечебной физкультуры не стали делать растяжку мышц, сухожилий, дело чуть сдвинулось и по их
наводке, попал к мануалисту, занимающемуся со спортсменами, кикбоксеры, бойцы без правил, ...
Год ходил каждую неделю, потом раз в 2, месяц (мышцы, сухожилия обладают памятью). Он поставил меня на ноги.
Сейчас продолжаю ходить по самочувствию. А с операциями, Vlad04 прав, надо очень осторожно. Насмотрелся я в
реабилитационных центрах на людей после них ....
Удачи в лечении.

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




Пост N: 1234
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.01.18 15:38. Заголовок: SergKis пишет: Удач..


SergKis пишет:

 цитата:
Удачи в лечении


Благодарю за добрые слова!
Пока прописали "скорую помощь" - занятия на профилакторе Евминова

Alw Spencer пишет:

 цитата:
мы Вас ещё ведь услышим?


Обязательно

Просто сокращаетя до минимума время сидения перед монитором...

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




Пост N: 1235
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.01.18 11:02. Заголовок: Опубликована новая с..


Опубликована новая сборка 18.01 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-18.01-setup.exe

Имеются в наличии также готовые сборки для следующих пар (Си-компилятор+Харбор):

- MinGW 7.2.0 32-bit для Harbour 3.2.0dev;

- MinGW 7.2.0 64-bit для Harbour 3.4.0dev;

- MS VisualC 2017 32-bit для Harbour 3.2.0dev;

- Borland/Embarcadero C++ 7.3 (32-bit) для Harbour 3.2.0dev.

ссылки на которые будут доступны по Вашему запросу

До новых встреч!

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




Пост N: 5702
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.01.18 17:18. Заголовок: Собрал на новой верс..


Собрал на новой версии несколько своих проектов ! Полёт нормальный !!!
Ждем новых встреч !!!

Обратите внимание на новый пример: MiniGUI\SAMPLES\Advanced\Tsb_array_3


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



Пост N: 1752
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.02.18 12:17. Заголовок: gfilatov2002 Немног..


gfilatov2002
Немного правок
 
CLASS TWndData
...
METHOD Release() INLINE iif( ::IsWindow, iif( ::lAction, PostMessage(::nHandle, WM_CLOSE, 0, 0), Nil ), Nil )

METHOD Restore() INLINE ShowWindow( ::nHandle, SW_RESTORE )
METHOD Show() INLINE _ShowWindow( ::cName )
METHOD Hide() INLINE _HideWindow( ::cName )

_METHOD DoEvent( Key, nHandle )
...
CLASS TCnlData INHERIT TWndData
...
METHOD PostMsg( nKey ) INLINE iif( ::oWin:Action, PostMessage( ::oWin:nHandle, ::WM_nMsgC, nKey, ::nHandle ), )
METHOD SendMsg( nKey ) INLINE iif( ::oWin:Action, SendMessage( ::oWin:nHandle, ::WM_nMsgC, nKey, ::nHandle ), )
...
...
METHOD Restore() INLINE ::Show()

METHOD Show() INLINE _ShowControl( ::cName, ::oWin:cName )
...


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




Пост N: 1239
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 17.02.18 20:30. Заголовок: SergKis пишет: Немн..


SergKis пишет:

 цитата:
Немного правок


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

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



Пост N: 1756
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.18 09:19. Заголовок: gfilatov2002 В прод..


gfilatov2002
В продолжение
 
CLASS TStbData INHERIT TCnlData
...
METHOD Enable ( lEnab ) INLINE ::oTBrowse:lEnabled := iif( HB_ISLOGICAL(lEnab), lEnab, ::oTBrowse:lEnabled )
METHOD Enabled ( lEnab ) INLINE ::oTBrowse:Enabled( lEnab )
METHOD Restore() INLINE ::oTBrowse:Show()
METHOD Show() INLINE ::oTBrowse:Show()
METHOD Hide() INLINE ::oTBrowse:Hide()
METHOD SetFocus() INLINE ::oTBrowse:SetFocus()

...
*-----------------------------------------------------------------------------*
Function _GetValue ( ControlName, ParentForm , Index )
*-----------------------------------------------------------------------------*
...
do case
#ifdef _TSBROWSE_
case T == "TBROWSE"
oGet := _HMG_aControlIds[ ix ]
retval := EVal( oGet:GetColumn( oGet:nCell ):bData )
#endif

#ifdef _DBFBROWSE_
...
*-----------------------------------------------------------------------------*
Function _SetValue ( ControlName, ParentForm, Value , Index, lSetGet )
*-----------------------------------------------------------------------------*
...
do case
#ifdef _TSBROWSE_
case T == "TBROWSE"
oGet := _HMG_aControlIds[ ix ]
EVal( oGet:GetColumn( oGet:nCell ):bData, Value )
#endif

#ifdef _DBFBROWSE_
...


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



Пост N: 1757
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.18 09:22. Заголовок: PS Не углядел лишний..


PS
Не углядел лишний параметр из своей либы (убрать)
Function _SetValue ( ControlName, ParentForm, Value , Index, lSetGet )

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



Пост N: 1758
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.18 09:26. Заголовок: PPS и класс не TStbD..


PPS
и класс не TStbData, а TTsbData
CLASS TTsbData INHERIT TCnlData


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




Пост N: 1240
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.02.18 21:35. Заголовок: SergKis пишет: В пр..


SergKis пишет:

 цитата:
В продолжение


Дополнил.
Благодарю за помощь

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



Пост N: 1759
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.02.18 00:01. Заголовок: Григорий, прошу прощ..


Григорий, прошу прощения, пропустил наследованные методы в TTsbata Disable(), Refresh()
 
вместо
METHOD Enable ( lEnab ) INLINE ::oTBrowse:lEnabled := iif( HB_ISLOGICAL(lEnab), lEnab, ::oTBrowse:lEnabled )
сделать
METHOD Enable () INLINE ::oTBrowse:lEnabled := .T.
добавить
METHOD Disable() INLINE ::oTBrowse:lEnabled := .F.
METHOD Refresh( lPaint ) INLINE ::oTBrowse:Refresh(lPaint)



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



Пост N: 1760
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.02.18 09:42. Заголовок: gfilatov2002 И еще ..


gfilatov2002
И еще
 
CLASS TWndData
...
METHOD Hide() INLINE _HideWindow ( ::cName )
METHOD SetSize( y, x, w, h ) INLINE _SetWindowSizePos( ::cName, y, x, w, h )

в TCnlData есть такой метод

в TSBROWSE добавил
METHOD GetValue( xCol ) INLINE ( xCol := hb_defaultValue(xCol, ::nCell), ;
EVal( ::GetColumn(xCol):bData ) )
METHOD SetValue( xCol, xVal ) INLINE ( xCol := hb_defaultValue(xCol, ::nCell), ;
EVal( ::GetColumn(xCol):bData, xVal ) )

надоело писать Eval


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



Пост N: 1761
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.02.18 09:50. Заголовок: PS Может методы назв..


PS
Может методы назвать надо было короче Get и Put, взял по аналогии с _GetValue и _SetValue

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




Пост N: 5729
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.02.18 11:41. Заголовок: SergKis пишет: Може..


SergKis пишет:

 цитата:
Может методы назвать надо было короче Get и Put, взял по аналогии с _GetValue и _SetValue



Лучше GetColumn() и PutColumn(xCol)

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




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


SergKis пишет:

 цитата:
пропустил наследованные методы в TTsbata Disable(), Refresh()


Исправил и добавил все предложенные методы.

SergKis пишет:

 цитата:
Может методы назвать надо было короче


Полностью полагаюсь на Ваш вкус в этом вопросе.

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

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



Пост N: 28
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: 19.02.18 13:01. Заголовок: После перехода с вер..


После перехода с версии 17.11 на 17.12 ( и 18.01 ) изменилось поведение CHECKLABEL ( пример c:\MiniGUI\SAMPLES\BASIC\CheckLabel\ )

@ 200,30 CHECKLABEL Label_1 ;
WIDTH 200 HEIGHT 24 ;
VALUE 'Check Label_1 standard' ;
CHECKED ;
FONT 'Arial' SIZE 9 BACKCOLOR YELLOW ;
ON MOUSEHOVER Rc_Cursor( "MINIGUI_FINGER" ) ;
ONCLICK (MsgInfo(HB_VALTOSTR(Form_Main.Label_1.Value)), lChecked := Form_Main.Label_1.Checked, Form_Main.Label_1.Checked := !lChecked )

ранее выдавало значение Form_Main.Label_1.Value = 'Check Label_1 standard',
а теперь Form_Main.Label_1.Value = Form_Main.Label_1.Checked

Ну соответственно новое значение Form_Main.Label_1.Value не присваивается.

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




Пост N: 1242
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.02.18 13:16. Заголовок: Avf пишет: а теперь..


Avf пишет:

 цитата:
а теперь Form_Main.Label_1.Value = Form_Main.Label_1.Checked


Все верно

 цитата:
* Enhanced: CHECKLABEL control supports the optional 'Value' property as
synonym for the 'Checked' property.
You can set/get 'Value' property at runtime as usually.
Added a default action for 'On Click' event: it will switch a value
similar to the CheckBox control.
Suggested and contributed by Sergej Kiselev.



Avf пишет:

 цитата:
новое значение Form_Main.Label_1.Value не присваивается


Пробуйте

 цитата:
ONCLICK (Form_Main.Label_1.Caption:='New Value', lChecked := Form_Main.Label_1.Checked, Form_Main.Label_1.Checked := !lChecked )



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



Пост N: 29
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: 19.02.18 13:46. Заголовок: Спасибо, не посмотр..


Спасибо, не посмотрел изменения.


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



Пост N: 1764
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.02.18 17:14. Заголовок: gfilatov2002 Обнару..


gfilatov2002
Обнаружил, что GetControlHandle(...) возвращает массив Handle, вернее This.Spinner_Year.Handle, т.е.
GetProperty(cForm, 'Spinner_Year', 'Handle')
 
Тут сделано так:
*-----------------------------------------------------------------------------*
FUNC Do_OnCtlInit( i, cVar )
*-----------------------------------------------------------------------------*
LOCAL nCtlIndex := i
LOCAL cCtlName := _HMG_aControlNames[ i ]
LOCAL nHandle := iif( ISARRAY( _HMG_aControlHandles[ i ] ), ;
_HMG_aControlHandles[ i ][ 1 ], _HMG_aControlHandles[ i ] )

LOCAL nParent := _HMG_aControlParentHandles[ i ]
...
что то, нет ясности, где править GetControlHandle(...) или GetProperty(...) ?



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



Пост N: 1765
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.02.18 17:22. Заголовок: PS Это меня заклинил..


PS
Это меня заклинило\глюкнуло.
Надо знать про массив и где нужно делать руками This.Spinner_Year.Handle[1]



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



Пост N: 1766
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.02.18 14:59. Заголовок: gfilatov2002 Возмож..


gfilatov2002
Возможно, будет интересен пример SET OOP ON с event-ами. http://my-files.ru/ii331e
Работа с event-ами позволяет создавать This среду для контролов (для тсб тоже).
К примеру события 101, 102 вызываются и из меню 1.1, 1.2 ( This - окно ), а с кнопок Button_1, Button_2 This среда контролов.

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




Пост N: 1245
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.02.18 16:14. Заголовок: SergKis пишет: Возм..


SergKis пишет:

 цитата:
Возможно, будет интересен пример SET OOP ON с event-ами.


Да, этот пример будет интересен, как и все Ваши примеры использования ООП в Минигуи
Благодарю за внимание

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



Пост N: 1769
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.02.18 10:15. Заголовок: gfilatov2002 Лишние..


gfilatov2002
Лишние скобки надо убрать
 
METHOD Eval( Block ) CLASS TKeyData
...
IF b; Eval( Block, hb_HValueAt( ::aKey, i ), hb_HKeyAt( ::aKey, i ), i )
ELSEIF l; AAdd( a, { hb_HValueAt( ::aKey, i ) } )
ELSE ; AAdd( a, { hb_HValueAt( ::aKey, i ), hb_HKeyAt( ::aKey, i ), i } )
...
METHOD Eval( Block ) CLASS TThrData
...
If ::lMT
m := ::SGD( 4, i )
IF b; Eval( Block, m[ 2 ], m[ 1 ], i )
ELSEIF l; AAdd( a, { m[ 2 ] } )
ELSE ; AAdd( a, { m[ 2 ], m[ 1 ], i } )
ENDIF
ELSE
IF b; Eval( Block, hb_HValueAt( ::aKey, i ), hb_HKeyAt( ::aKey, i ), i )
ELSEIF l; AAdd( a, { hb_HValueAt( ::aKey, i ) } )
ELSE ; AAdd( a, { hb_HValueAt( ::aKey, i ), hb_HKeyAt( ::aKey, i ), i } )
ENDIF
ENDIF
...


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




Пост N: 1246
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.02.18 11:22. Заголовок: SergKis пишет: Лишн..


SergKis пишет:

 цитата:
Лишние скобки надо убрать


Убрал, конечно.
Благодарю за помощь

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




Пост N: 1248
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.02.18 10:53. Заголовок: Опубликована новая с..


Опубликована новая сборка 18.02 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-18.02-setup.exe

Имеются в наличии также готовые сборки для следующих пар (Си-компилятор+Харбор):

- MinGW 7.2.0 32-bit для Harbour 3.2.0dev;

- MinGW 7.2.0 64-bit для Harbour 3.4.0dev;

- MS VisualC 2017 32-bit для Harbour 3.2.0dev;

- Borland/Embarcadero C++ 7.3 (32-bit) для Harbour 3.2.0dev.

ссылки на которые будут доступны по Вашему запросу

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




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


Всем кому это интересно
Подготовил вторую бету для новой мартовской сборки библиотеки

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

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




Пост N: 5769
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.03.18 11:11. Заголовок: Всем привет. Созрело..


Всем привет.
Созрело предложение по цветам.
Сейчас в i_color.ch только 19 цветов и все задаются через {....}
Для новых кнопок с градиентами нужны числовые цвета.

В TSBROWSE.CH только 16 цветов, нет ORANGE и неск.других,
да и не всегда удобно к проекту его добавлять, там куча всего.
Название цветов мне нравиться больше как в TSBROWSE.CH
Посмотреть заодно и как в FW сделано.


Предлагаю в i_color.ch добавить цвета:

#define CLR_YELLOW		RGB( 255 , 255 , 0   )	 
#define CLR_PINK RGB( 255 , 128 , 192 )
#define CLR_HRED RGB( 255 , 0 , 0 )
#define CLR_HMAGENTA RGB( 255 , 0 , 255 )
#define CLR_BROWN RGB( 128 , 64 , 64 )
#define CLR_ORANGE RGB( 255 , 128 , 64 )
#define CLR_HGREEN RGB( 0 , 255 , 0 )
#define CLR_PURPLE RGB( 128 , 0 , 128 )
#define CLR_BLACK RGB( 0 , 0 , 0 )
#define CLR_WHITE RGB( 255 , 255 , 255 )
#define CLR_GRAY RGB( 128 , 128 , 128 )
#define CLR_HBLUE RGB( 0 , 0 , 255 )

#define CLR_HGRAY RGB( 192 , 192 , 192 )
#define CLR_RED RGB( 128 , 0 , 0 )
#define CLR_OLIVE RGB( 128 , 128 , 0 )
#define CLR_LGREEN RGB( 0 , 128 , 0 )
#define CLR_HCYAN RGB( 0 , 255 , 255 )
#define CLR_BLUE RGB( 0 , 0 , 128 )
#define CLR_CYAN RGB( 0 , 128 , 128 )

Может что и упустил...

И ещё можно добавить вот такие цвета:

#define CLR_SKYPE          RGB(   0, 176,240 )  // голубой, как SKYPE 
#define CLR_VIBER RGB( 125, 82,158 ) // фиолетовый, как в Viber
#define CLR_VK RGB( 93, 114,148 ) // сине-серый, как в Контакте
#define CLR_TWIT RGB( 118, 170,235 ) // голубой, как TWITER
#define CLR_FB RGB( 71, 89,149 ) // синеватый, как Фейсбук
#define CLR_OK RGB( 238, 89,149 ) // оранжевый, как Одноклассники


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



Пост N: 1776
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.03.18 08:54. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение заменить, подправить
 
METHOD DoEvent ( Key, nHandle ) CLASS TWndData

LOCAL o := Self
LOCAL i := o:Index
LOCAL w := o:IsWindow

IF ! empty(nHandle)
IF hmg_IsWindowObject( nHandle ) // control handle
o := hmg_GetWindowObject( nHandle )
i := o:Index
w := o:IsWindow
ELSEIF nHandle > 0 .and. nHandle <= Len( _HMG_aControlHandles ) // control index
IF hmg_IsWindowObject( _HMG_aControlHandles[ nHandle ] )
o := hmg_GetWindowObject( _HMG_aControlHandles[ nHandle ] )
i := o:Index
w := o:IsWindow
ELSE
i := nHandle
w := .F.
ENDIF
ENDIF
ENDIF

IF w
RETURN Do_WindowEventProcedure ( ::oEvent:Get( Key ), i, o, Key )
ENDIF

RETURN Do_ControlEventProcedure( ::oEvent:Get( Key ), i, o, Key )


и пример APP_OOPEVENTS

DEFINE MAIN MENU
POPUP 'MENU_1' NAME 100
ITEM 'Item main menu 1.1' NAME 101 IMAGE 'n1' ;
ACTION (ThisWindow.Object):PostMsg(val(This.Name), This.Index)

ITEM 'Item main menu 1.2' NAME 102 IMAGE 'n2' ;
ACTION (ThisWindow.Object):PostMsg(val(This.Name))

ITEM 'Item main menu 1.3 ( This -> Button_2 )' NAME 103 IMAGE 'n3' ;
ACTION (ThisWindow.Object):PostMsg(val(This.Name), This.Button_2.Index)

SEPARATOR
ITEM 'Exit' NAME 199 ;
ACTION (ThisWindow.Object):PostMsg(val(This.Name))

END POPUP



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




Пост N: 1251
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.03.18 11:11. Заголовок: SergKis пишет: заме..


SergKis пишет:

 цитата:
заменить, подправить


Благодарю за помощь
Поправлю, конечно...

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



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


gfilatov2002
Поправьте, пожалуйста
 
METHOD Sum( Key, xSum ) CLASS TKeyData

LOCAL sum := ::Get( Key, 0 )

IF HB_ISNUMERIC( xSum )
IF HB_ISNUMERIC( sum ); sum += xSum
ELSE ; sum := xSum
ENDIF
::Set( Key, sum )

ELSEIF HB_ISARRAY( xSum )
IF HB_ISARRAY( sum ) .AND. Len( sum ) == Len( xSum )
AEval( xSum, {| s, i| sum[ i ] := iif( HB_ISNUMERIC( s ), sum[ i ] + s, s ) } )
ELSE
sum := xSum
ENDIF
::Set( Key, sum )

ENDIF

RETURN NIL
...
METHOD Sum( Key, xSum ) CLASS TThrData

LOCAL sum := ::Get( Key, 0 )

IF HB_ISNUMERIC( xSum )
IF HB_ISNUMERIC( sum ); sum += xSum
ELSE ; sum := xSum
ENDIF
::Set( Key, sum )

ELSEIF HB_ISARRAY( xSum )
IF HB_ISARRAY( sum ) .AND. Len( sum ) == Len( xSum )
AEval( xSum, {| s, i| sum[ i ] := iif( HB_ISNUMERIC( s ), sum[ i ] + s, s ) } )
ELSE
sum := xSum
ENDIF
::Set( Key, sum )

ENDIF

RETURN NIL
...


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




Пост N: 1253
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 17.03.18 22:26. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправьте, пожалуйста


Уже сделал. Благодарю за помощь и внимание

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



Пост N: 1785
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.03.18 09:29. Заголовок: gfilatov2002 Предла..


gfilatov2002
Предлагаю новый метод для tsb, для растяжки нескольких колонок до размера тсб по ширине.
Скрытый текст

Использование при ширине tsb > ширины колонок
:AdjColumns() - все колонки
:AdjColumns({"NAME", "SUMMA"}) - указанные колонки по cName
:AdjColumns({3, 4, 5}) - указанные колонки по номеру

В пример App_OOPoKeyData, который прислал Andrey, можно вставить
 
*-----------------------------------------------------------------------------*
STATIC FUNC TsbReport( oWnd, nEvent, aArray, cColName )
*-----------------------------------------------------------------------------*
...
:SetColor( { CLR_FOCUSB }, { { |a,b,c| If( c:nCell == b, {RGB( 66, 255, 236), RGB(209, 227, 248)}, ;
{RGB(220, 220, 220), RGB(220, 220, 220)} ) } } )

:AdjColumns({3, 4, 5}) // или :AdjColumns()

END TBROWSE

oRpt:SetNoHoles()
...



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




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


SergKis пишет:

 цитата:
Предлагаю новый метод для tsb


1. добавил новый полезный метод
2. переименовал пример App_OOPoKeyData в APP_OOPREPORT
3. вставку строки в пример сделал - работает!

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

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



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


gfilatov2002
поправьте APP_OOPREPORT (передал в TsbReport oWnd, а не показал цель этого)
 
FUNCTION Main()
...
:Event( 7, {|ow,ky| Report(ow, ky) } )
// ToolBar 2
:Event( 99, {|ow | ow:Release() } )
// StatusBar
:Event( 91, {|ow | ow:StatusBar:Say('... W A I T ...') } )
:Event( 92, {|ow | ow:StatusBar:Say('') } )

END WITH // ---- Window events
...
STATIC FUNC TsbReport( oWnd, nEvent, aArray, cColName )
...
// ToolBar 1
(This.Object):Event( 1, {|ow| oWnd:StatusBar:Say('... W A I T ...'), ;
MsgBox('P r i n t i n g' , ow:Name), ;
oWnd:StatusBar:Say('') } )
(This.Object):Event( 2, {|ow| oWnd:PostMsg(91), ;
MsgBox('Export to MS Excel', ow:Name), ;
oWnd:PostMsg(92) } )

...



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




Пост N: 1257
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.03.18 20:01. Заголовок: SergKis пишет: попр..


SergKis пишет:

 цитата:
поправьте APP_OOPREPORT


Поправил, конечно.
Благодарю за помощь - пример работает нормально

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



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


gfilatov2002 пишет
 цитата:
пример работает нормально


Попробую сразу ответить на вопрос "Как улучшить вид отчета ?"
Скрытый текст



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



Пост N: 1789
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.03.18 12:39. Заголовок: PS надо без BOLD ..


PS
надо без BOLD
 
DEFINE FONT FontNorm FONTNAME "Courier New" ;
SIZE _HMG_DefaultFontSize


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



Пост N: 1791
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.03.18 16:46. Заголовок: Заработал My-Files.r..


Заработал My-Files.ru (глючил). Ссылка на пример о чем говорил выше. http://my-files.ru/037m5e

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




Пост N: 1260
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.03.18 17:28. Заголовок: SergKis пишет: Ссыл..


SergKis пишет:

 цитата:
Ссылка на пример


Благодарю за обновленный пример!

Что сделал:
1. поправил опечатку

 цитата:
Alias := Alias()


2. перевел комментарии из OEM-кодировки в ANSI.
3. проверил компиляцию примера по команде

 цитата:
compile.bat /e /w



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



Пост N: 1792
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.03.18 19:21. Заголовок: gfilatov2002 пишет c..


gfilatov2002 пишет
 цитата:
compile.bat /e /w


Спасибо за напоминание, с Borlandом редко собираю, забываю эти параметры для Compile.bat.

 цитата:
перевел комментарии из OEM-кодировки в ANSI.


Все проекты в OEM и настройки на нее, дергаю куски и комментарии идут, как идут. Сорри.

По SET OOP ON показал практически все что хотел. Думаю теперь только вопросы.

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



Пост N: 1793
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.18 09:19. Заголовок: SergKis пишет показа..


SergKis пишет
 цитата:
показал практически все что хотел


Работу с сообщениями из тсб добавил в пример, т.е. кнопки toolbar продублировал клавишами
http://my-files.ru/h5e6ms

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




Пост N: 1261
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.03.18 11:26. Заголовок: SergKis пишет: кноп..


SergKis пишет:

 цитата:
кнопки toolbar продублировал клавишами


Благодарю за помощь
Очень наглядный пример использования ООП

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



Пост N: 1797
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.18 21:03. Заголовок: gfilatov2002 Надо п..


gfilatov2002
Надо правку сделать, Andrey неточность нашел, при hide колонки.
Считать надо не только ширину видимых колонок, но и их кол-во
 
METHOD AdjColumns( aColumns, nDelta ) CLASS TSBrowse
...
LOCAL nVisible := 0, aVisible := {}
...
AEval( ::aColumns, {|oc| nVisible += iif( oc:lVisible, oc:nWidth, 0 ) })
AEval( aCol , {|nc| iif( obr:aColumns[ nc ]:lVisible, AAdd(aVisible, nc), Nil ) })

k := Len(aVisible)

...
For i := 1 To k
c := aVisible[ i ]

...


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




Пост N: 1262
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 22.03.18 21:31. Заголовок: SergKis пишет: Надо..


SergKis пишет:

 цитата:
Надо правку сделать


Поправил, конечно.
Благодарю за внимание

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



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


gfilatov2002
Поправьте APP_OOPREPORT для альтернативного задания клавиш
 
BUTTON 01 CAPTION 'First' PICTURE 'n1' ;
TOOLTIP 'Column report FIRST Ctrl+1, Shift+1' ;
ACTION wPost() SEPARATOR
BUTTON 02 CAPTION 'Last' PICTURE 'n2' ;
TOOLTIP 'Column report LAST Ctrl+2, Shift+2' ;
ACTION wPost() SEPARATOR
BUTTON 03 CAPTION 'Age' PICTURE 'n3' ;
TOOLTIP 'Column report AGE Ctrl+3, Shift+3' ;
ACTION wPost() SEPARATOR
BUTTON 04 CAPTION 'State' PICTURE 'n4' ;
TOOLTIP 'Column report STATE Ctrl+4, Shift+4' ;
ACTION wPost() SEPARATOR
BUTTON 05 CAPTION 'City' PICTURE 'n5' ;
TOOLTIP 'Column report CITY Ctrl+5, Shift+5' ;
ACTION wPost() SEPARATOR
BUTTON 06 CAPTION 'State ?' PICTURE 'n6' ;
TOOLTIP 'Column report STATE + Left(LAST, 1) Ctrl+6, Shift+6' ;
ACTION wPost() SEPARATOR
BUTTON 07 CAPTION 'City ?' PICTURE 'n7' ;
TOOLTIP 'Column report CITY + Left(LAST, 1) Ctrl+7, Shift+7' ;
ACTION wPost() SEPARATOR
...
oTabl:SetFocus()

ON KEY SHIFT+1 ACTION wPost(1)
ON KEY SHIFT+2 ACTION wPost(2)
ON KEY SHIFT+3 ACTION wPost(3)
ON KEY SHIFT+4 ACTION wPost(4)
ON KEY SHIFT+5 ACTION wPost(5)
ON KEY SHIFT+6 ACTION wPost(6)
ON KEY SHIFT+7 ACTION wPost(7)
ON KEY ESCAPE ACTION wPost(99)

END WINDOW
...
STATIC FUNC Report( oWnd, nEvent )
...
oWnd:Action := .F.
oBrw:lEnabled := .F.

oWnd:StatusBar:Say('... W A I T ...')
...
TsbReport( oWnd, nEvent, aRpt, cNam )

(This.oTabl.Object):Tsb:lEnabled := .T. // oBrw:lEnabled := .T.

(This.oTabl.Object):SetFocus() // oBrw:SetFocus()
...

PS
На время формирования отчета (oWnd:Action := .F.) блокируются действия окна по сообщениям до (oWnd:Action := .T.)

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




Пост N: 1264
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.03.18 20:17. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправьте APP_OOPREPORT для альтернативного задания клавиш


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

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



Пост N: 1799
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.18 12:24. Заголовок: gfilatov2002 Вспомн..


gfilatov2002
Вспомнил про особенность работы с context menu ( извините, что не сразу ) Скрытый текст


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




Пост N: 1265
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.03.18 12:56. Заголовок: SergKis пишет: Вспо..


SergKis пишет:

 цитата:
Вспомнил про особенность работы с context menu


Спасибо

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



Пост N: 1800
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.18 13:41. Заголовок: SergKis пишет Вспомн..


SergKis пишет
 цитата:
Вспомнил про особенность работы с context menu


Особенность в том, что работая в context menu (думаю с обычным будет так же)
MENUITEM ... ACTION wPost()
собственные сообщения рабатают, а сообщения прорисовки кнопок ToolBar теряются.
В данном примере не снимается с кнопки ToolBar состояние Disable, а Caption 1ой кнопки срабатывает.
Т.е. надо выйти из меню и потом работать, что показано в примере.

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




Пост N: 1268
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 28.03.18 09:36. Заголовок: Выпущена новая сборк..


Выпущена новая сборка 18.03 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-18.03-setup.exe

Рекомендуется к использованию
Выпуск новых сборок опложен на неопределенный период вследствие финансовых и др. проблем
Благодарю за Ваше внимание и поддержку

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




Пост N: 5789
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.18 10:33. Заголовок: Ура ! Наконец то дож..


Ура ! Наконец то дождались !



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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 31.03.18 22:03. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Выпущена новая сборка 18.03



Спасибо и Приветствую

Просьба
Есть ли возможность получить сборки для компиляторов MinGW32 и MinGW64?

Спасибо.


Спасибо: 0 
gfilatov2002
moderator




Пост N: 1271
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 31.03.18 22:39. Заголовок: Alw Spencer пишет: ..


Alw Spencer пишет:

 цитата:
Есть ли возможность получить сборки для компиляторов MinGW32 и MinGW64?


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

Заплатите небольшой взнос на развитие Минигуи через сервис PayPal, и я пришлю Вам ссылки для выкачки этих сборок.


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




Пост N: 5805
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.04.18 23:08. Заголовок: Andrey пишет: #defi..


Andrey пишет:

 цитата:
#define CLR_OK RGB( 238, 89,149 ) // оранжевый, как Одноклассники



Ошибку допустил. Нужно RGB( 238, 130, 8 )

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




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


Всем кому это интересно

В честь Дня освобождения Одессы, который отмечается сегодня, подготовил 4-ю бету для новой сборки библиотеки
со следующим списком изменений
Скрытый текст

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

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




Пост N: 5818
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.04.18 10:39. Заголовок: Ждем ! :sm36: Нов..


Ждем !

Новая версия МиниГуи 18.03
Ошибка в методе oBrw:ExcelOle(cXlsFile, ...) !!!
Отрезает имя файла, когда задаёшь полный путь и длинное имя файла.
Хотя в методе oBrw:Excel2() всё отлично работает...

Имя файла делаю так:
   cPath      := GetStartUpFolder() + "\"   // путь записи файла 
cMaska := "Test2_ExcelOle" // шаблон файла
cXlsFile := cPath + cMaska + "_" + DTOC( DATE() ) + "_"
cXlsFile += SUBSTR( CharRepl( ":", TIME(), "-" ), 1, 5 ) //+ ".xls"

И почему то пишет в папку Мои документы, а не
C:\MiniGUI\SAMPLES\Advanced\Tsb_Brw2xml\Test2_ExcelOle_17.04.2018_09-48
Может это особенность Excel 2003 ?
Есть кто может это проверить на другом Excel 2003 или новее ?

Григорий, пример отослал на почту !
P.S. Попробовал на Excel 2007 - то же самое, режет имя до "Test2_ExcelOle_17.04"

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




Пост N: 1275
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.04.18 10:45. Заголовок: Не удержался и выпус..


Не удержался и выпустил новую исправленную сборку 18.04 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-18.04-setup.exe

Рекомендуется к использованию

Благодарю за Ваше внимание и поддержку

P.S. В последний момент в эту сборку были включены изменения в библиотеку TSBrowse по просьбе Андрея...

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




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


gfilatov2002 пишет:

 цитата:
P.S. В последний момент в эту сборку были включены изменения в библиотеку TSBrowse по просьбе Андрея...


СПАСИБО !
Буду тестировать этот oBrw:ExcelOle() ...

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



Пост N: 1819
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.18 20:35. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправьте пожалуйста
 
h_objmisc.prg
*-----------------------------------------------------------------------------*
FUNCTION Do_Obj( nHandle, bBlock, p1, p2, p3 )
*-----------------------------------------------------------------------------*
LOCAL o

IF hmg_IsWindowObject( nHandle )
o := hmg_GetWindowObject( nHandle )
IF ISBLOCK( bBlock )
IF o:IsWindow
RETURN Do_WindowEventProcedure ( bBlock, o:Index, o, p1, p2, p3 )
ELSE
RETURN Do_ControlEventProcedure ( bBlock, o:Index, o, p1, p2, p3 )
ENDIF

ENDIF
ENDIF

RETURN o

Пример APP_OOPREPORT\demo.prg, заменить
*-----------------------------------------------------------------------------*
FUNC wPost( nEvent, nIndex, xParam )
*-----------------------------------------------------------------------------*
LOCAL oWnd

If HB_ISOBJECT(nIndex)

oWnd := _WindowObj(nIndex:cParentWnd)
oWnd:SetProp(nEvent, xParam)
oWnd:PostMsg(nEvent)

Else

DEFAULT nEvent := val( This.Name )

If nEvent > 0
oWnd := (ThisWindow.Object)
oWnd:SetProp(nEvent, xParam)
oWnd:PostMsg(nEvent, nIndex)
EndIf

EndIf

RETURN Nil

*-----------------------------------------------------------------------------*
FUNC wSend( nEvent, nIndex, xParam )
*-----------------------------------------------------------------------------*
LOCAL oWnd

If HB_ISOBJECT(nIndex)

oWnd := _WindowObj(nIndex:cParentWnd)
oWnd:SetProp(nEvent, xParam)
oWnd:SendMsg(nEvent)

Else

DEFAULT nEvent := val( This.Name )

If nEvent > 0
oWnd := (ThisWindow.Object)
oWnd:SetProp(nEvent, xParam)
oWnd:SendMsg(nEvent, nIndex)
EndIf

EndIf

RETURN Nil

Это для передачи параметров в блок кода события.
:Event( 1, {|ow,ky| myEvent(ow, ky) } )
В блоке кода извлекаем параметры
Func myEvent( oW, nEvent )
xParam := oW:GetProp(nEvent)
...

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




Пост N: 1278
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.05.18 20:57. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправьте пожалуйста


Добавил эти корректировки...
Благодарю за помощь


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




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


Всем кому это интересно

Подготовил первый RC для новой сборки библиотеки со следующим списком изменений
Скрытый текст

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

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



Пост N: 1824
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.05.18 10:05. Заголовок: gfilatov2002 У себя..


gfilatov2002
У себя сделал правку (для обхода picture при lMultiLine == .T.)
 
METHOD DrawLine( xRow ) CLASS TSBrowse
...
If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) )
uData := "" // append mode for arrays
Else
uData := Eval( oColumn:bData )
EndIf

lMultiLine := Valtype( uData ) == "C" .and. At( Chr( 13 ), uData ) > 0

nVertText := 0
lCheck := ( oColumn:lCheckBox .and. ValType( uData ) == "L" .and. oColumn:lVisible )
...
ElseIf ! lCheck .and. oColumn:lEmptyValToChar .and. Empty( uData )
uData := ""
ElseIf Empty( cPicture )
uData := If( Valtype( uData ) != "C", cValToChar( uData ), uData )
ElseIf lMultiLine

Else
uData := If( uData == NIL, "", Transform( uData, cPicture ) )
EndIf
nAlign := If( ValType( nAlign ) == "B", Eval( nAlign, nJ, Self ), nAlign )
...
EndIf

// lMultiLine := Valtype( uData ) == "C" .and. At( Chr( 13 ), uData ) > 0

If oColumn:l3DTextCell != Nil
...
METHOD DrawSelect( xRow ) CLASS TSBrowse
...
lAdjBmp := oColumn:lAdjBmp
nAlign := oColumn:nAlign
lOpaque := .t.
lMulti := .F.

If nJ == 1 .and. ! Empty( ::hBmpCursor )
uBmpCell := ::hBmpCursor
...
If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) )
uData := "" // append mode for arrays
Else
uData := Eval( oColumn:bData )
EndIf

lMulti := Valtype( uData ) == "C" .and. At( Chr( 13 ), uData ) > 0

cPicture := If( ValType( oColumn:cPicture ) == "B", Eval( oColumn:cPicture, ::nAt, nJ, Self ), ;
oColumn:cPicture )

lCheck := ( oColumn:lCheckBox .and. ValType( uData ) == "L" .and. oColumn:lVisible )
...
ElseIf ! lCheck .and. oColumn:lEmptyValToChar .and. Empty( uData )
uData := ""
ElseIf Empty( cPicture )
uData := If( Valtype( uData ) != "C", cValToChar( uData ), uData )
ElseIf lMulti

Else
uData := If( uData == NIL, "", Transform( uData, cPicture ) )
EndIf
EndIf
...
Default hBitMap := 0
// lMulti := Valtype( uData ) == "C" .and. At( Chr( 13 ), uData ) > 0

If lCheck
...


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



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


gfilatov2002
Добавить для получения массивом установленных значений :SetProp
 
CLASS TKeyData
...
_METHOD GetAll( lAll )

...
METHOD GetAll( lAll ) CLASS TKeyData
LOCAL aRet := {}

If lAll == Nil; ::Eval({|val,key| AAdd(aRet, { val, key }) })
ElseIf lAll ; ::Eval({|val | AAdd(aRet, val ) })
Else ; ::Eval({|val,key| AAdd(aRet, { key, val }) })
EndIf

RETURN aRet

...
CLASS TThrData
...
_METHOD GetAll( lAll )

...
METHOD GetAll( lAll ) CLASS TThrData
LOCAL aRet := {}

If lAll == Nil; ::Eval({|val,key| AAdd(aRet, { val, key }) })
ElseIf lAll ; ::Eval({|val | AAdd(aRet, val ) })
Else ; ::Eval({|val,key| AAdd(aRet, { key, val }) })
EndIf

RETURN aRet

...
CLASS TWndData
...
METHOD AllProp( lArray ) INLINE ::oProp:GetAll( lArray )

...

Следующее предложение не так однозначно (в метод ControlAssign cMessage получаем в upper из __GetMessage() )
 
CLASS TWndData
...
VAR oHand AS OBJECT
VAR oNameUpper AS OBJECT

EXPORTED:
...
METHOD Def( nIndex, cName, nHandle, nParent, cType, cVar ) INLINE ( ;
...
::oName := oKeyData(), ::oHand := oKeyData(), ;
::oNameUpper := oKeyData(), ;

::oProp := oKeyData(), hmg_SetWindowObject( ::nHandle, Self ), ;
...
METHOD GetObj( xName ) INLINE iif( HB_ISCHAR( xName ), ::oName:Get( xName ), ;
::oHand:Get( xName ) )
METHOD GetObjByName( cName ) INLINE ::oNameUpper:Get( upper(cName) )


// Destructor
METHOD Destroy() INLINE ( ;
...
::oName := iif( HB_ISOBJECT( ::oName ), ::oName:Destroy() , Nil ), ;
::oNameUpper := iif( HB_ISOBJECT( ::oNameUpper ), ::oNameUpper:Destroy() , Nil ), ;

::oHand := iif( HB_ISOBJECT( ::oHand ), ::oHand:Destroy() , Nil ), ;
...
#endif

ERROR HANDLER ControlAssign

ENDCLASS
...
METHOD ControlAssign( xValue ) CLASS TWndData
LOCAL cMessage, uRet, lError, o

cMessage := ALLTRIM( UPPER( __GetMessage() ) )
lError := .T.

If PCOUNT() == 0
o := ::GetObjByName( cMessage )
If HB_ISOBJECT(o)
uRet := _GetValue( , , o:nIndex )
lError := .F.
EndIf
ElseIf PCOUNT() == 1
o := ::GetObjByName( SUBSTR( cMessage, 2 ) )
If HB_ISOBJECT(o)
_SetValue( , , xValue, o:nIndex )
uRet := _GetValue( , , o:nIndex )
lError := .F.
EndIf
EndIf

If lError
uRet := Nil
::MsgNotFound( cMessage )
EndIf

RETURN uRet

...
CLASS TCnlData INHERIT TWndData
...

METHOD Set() INLINE ( iif( HB_ISOBJECT( ::oWin:oName ), ::oWin:oName:Set ( ::cName , Self ), ), ;
iif( HB_ISOBJECT( ::oWin:oNameUpper ), ::oWin:oNameUpper:Set( upper(::cName), Self ), ), ;

iif( HB_ISOBJECT( ::oWin:oHand ), ::oWin:oHand:Set ( ::nHandle , Self ), ) )
METHOD Del() INLINE ( iif( HB_ISOBJECT( ::oWin:oName ), ::oWin:oName:Del ( ::cName ), ), ;
iif( HB_ISOBJECT( ::oWin:oNameUpper ), ::oWin:oNameUpper:Del( upper(::cName) ), ), ;

iif( HB_ISOBJECT( ::oWin:oHand ), ::oWin:oHand:Del ( ::nHandle ), ) )
...
тогда это можно использовать так
@ 90, 10 LABEL Label_3 WIDTH 100 HEIGHT 20 VALUE '' ;
CENTERALIGN VCENTERALIGN TRANSPARENT
...
*-----------------------------------------------------------------------------*
STATIC FUNCTION SayToWait( oWnd, nEvent )
*-----------------------------------------------------------------------------*
LOCAL oTsb := oWnd:GetProp( nEvent )
LOCAL nDay := oTsb:GetValue()
LOCAL dDate := CalendarValue()
LOCAL hForm, oForm

FOR EACH hForm IN _HMG_aFormHandles
oForm := _WindowObj( hForm )
If HB_ISOBJECT( oForm )
If left( oForm:Name, 3 ) == '_w_'
oForm:SendMsg(93) // timers stop
// oForm:GetObj('Label_3'):Value := DtoC(dDate)
// _SetValue( 'Label_3', oForm:Name, DtoC(dDate) )
oForm:Label_3 := DtoC(dDate)
? oForm:Name, 'Label_3 =', oForm:Label_3

oForm:SendMsg(91) // timers start
EndIf
EndIf
NEXT

RETURN Nil





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




Пост N: 1281
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.06.18 19:54. Заголовок: SergKis пишет: для ..


SergKis пишет:

 цитата:
для получения массивом установленных значений :SetProp


Принято.

SergKis пишет:

 цитата:
в метод ControlAssign cMessage получаем в upper из __GetMessage()


Принято, кроме установки данных в upper

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

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



Пост N: 1835
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.06.18 20:32. Заголовок: gfilatov2002 SergKi..


gfilatov2002
SergKis пишет
 цитата:
обхода picture при lMultiLine == .T.


Ситуация возникает, к примеру, если в 2х строчной колонке первая строка 25 байт (краткое наименование), вторая строка 50 байт (адрес). Если Picture короткий (это случается при взятии данных из справочника по ID или по краткому наим. методом LoadFields), то вторая строка через Transform обрезается. Что бы этого избежать приходится уст. Picture Repl('X', Len(<кр.наименование>)+Len(<адрес>)+Len(CRLF), что кажется лишним. Обход Transform(cPicture) при lMulti == .T. все решает

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




Пост N: 1282
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.06.18 11:04. Заголовок: SergKis пишет: Ситу..


SergKis пишет:

 цитата:
Ситуация возникает


Благодарю за рахъяснение
Принято

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



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


gfilatov2002 пишет
 цитата:
Принято, кроме установки данных в upper


Вы правы , совсем из головы выпало, что данные контролов сохраняются в Public переменной, т.е. :oNameUpper не нужен, достаточно в некоторых мечтах сделать upper(xName)

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




Пост N: 1283
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.06.18 10:07. Заголовок: Выпущена новая сборк..


Выпущена новая сборка 18.05 для BCC 5.51 для компиляторов Harbour и xHarbour

Базовый дистрибутив-инсталлятор находится по адресу

http://hmgextended.com/files/CONTRIB/hmg-18.05-setup.exe

Рекомендуется к использованию

Благодарю за Ваше внимание и поддержку

P.S. Также у нас появилось зеркало домашней страницы по адресу

http://hmgextended.org

Также имеются в наличии готовые сборки для следующих пар (Си-компилятор+Харбор):

- MinGW 8.1.0 32-bit для Harbour 3.2.0dev;

- MinGW 8.1.0 64-bit для Harbour 3.4.0dev;

- MS VisualC 2017 32-bit для Harbour 3.2.0dev;

- Borland/Embarcadero C++ 7.3 (32-bit) для Harbour 3.2.0dev.


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



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


gfilatov2002
Поправьте
 
CLASS TWndData
...
METHOD GetObj( xName ) INLINE iif( HB_ISCHAR( xName ), ::oName:Get( upper(xName) ), ;
::oHand:Get( xName ) )
...
METHOD GetObj4Name( cName ) CLASS TWndData
...
FOR EACH cName IN hb_ATokens( upper(cName), ::cChr )
...
METHOD ControlAssign( xValue ) CLASS TWndData
LOCAL cMessage, uRet, lError, o

cMessage := __GetMessage()
lError := .T.

If PCOUNT() == 0
o := ::GetObj( cMessage )

If HB_ISOBJECT( o )
uRet := _GetValue( , , o:nIndex )
lError := .F.
EndIf
ElseIf PCOUNT() == 1
o := ::GetObj( SubStr( cMessage, 2 ) )

If HB_ISOBJECT( o )
_SetValue( , , xValue, o:nIndex )
uRet := _GetValue( , , o:nIndex )
lError := .F.
EndIf
EndIf
...
CLASS TCnlData INHERIT TWndData
...
METHOD Set() INLINE ( iif( HB_ISOBJECT( ::oWin:oName ), ::oWin:oName:Set( upper(::cName) , Self ), ), ;
iif( HB_ISOBJECT( ::oWin:oHand ), ::oWin:oHand:Set( ::nHandle, Self ), ) )
METHOD Del() INLINE ( iif( HB_ISOBJECT( ::oWin:oName ), ::oWin:oName:Del( upper(::cName) ), ), ;
iif( HB_ISOBJECT( ::oWin:oHand ), ::oWin:oHand:Del( ::nHandle ), ) )

METHOD Get( xName ) INLINE iif( HB_ISCHAR( xName ), ::oWin:oName:Get( upper(xName) ), ;
::oWin:oHand:Get( xName ) )
...

Тогда пример http://my-files.ru/e8rrl4
для проверки, собран на hmg 18.05


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




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


SergKis пишет:

 цитата:
Поправьте


Поправил код и выложил исправленный инсталлятор на сервер.

SergKis пишет:

 цитата:
для проверки, собран на hmg 18.05


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

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





Пост N: 59
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 07.06.18 10:01. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Выпущена новая сборка 18.05 для BCC 5.51 для компиляторов Harbour и xHarbour



Уважаемый Григорий, замечания - функция определения наличие в системе ( установлена Win 7) MS Office
не находит программу, хотя MS Office установлен ... На сборке 18.04 проблем не было.

Ole2TxtError() != 'S_OK'


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




Пост N: 1285
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 07.06.18 10:38. Заголовок: Alex_Cher пишет: за..


Alex_Cher пишет:

 цитата:
замечания - функция определения наличие в системе ( установлена Win 7) MS Office


Ожидал подобное замечание, поскольку произошел отказ от устаревшей библиотеки HbOLE

Alex_Cher пишет:

 цитата:
Ole2TxtError() != 'S_OK'


Используйте теперь взамен такую конструкцию:

 цитата:
   IF ( oExcel := CreateObject( "Excel.Application" ) ) == NIL 
MsgStop('Excel не установлен','Ошибка')
RETURN Nil
ENDIF


Именно по этой причине так долго не мог отказаться от использования библиотеки HbOLE

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





Пост N: 60
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 07.06.18 13:47. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Используйте теперь взамен такую конструкцию



Уважаемый Григорий, снова проблемы с 18.05. При создание файла Excel вылетают ошибки на следующих функциях -

oWorkBook:Columns( 1):Set( 'NumberFormat', '@' )

Error WINOLE/1007 Неверный аргумент: SET (DOS Error -2147352562)

Called from TOLEAUTO:SET(0)
Called from OBRABOTKA_ZCH(1052) in module: zatrat.prg



oWorkBook:Cells( 3, 5):Set( "HorizontalAlignment", 7)


Error WINOLE/1007 Неверный аргумент: SET (DOS Error -2147352562)

Called from TOLEAUTO:SET(0)
Called from XLS_OT_3(944) in module: zatrat.prg


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




Пост N: 1286
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 07.06.18 13:55. Заголовок: Alex_Cher пишет: Пр..


Alex_Cher пишет:

 цитата:
При создание файла Excel вылетают ошибки на следующих функциях


Это устаревшие конструкции, которые использовались в HbOle.

Pasha пишет:

 цитата:
аналогично вызов (в 2-х местах)

oSheet:Range( cRange ):Set( "HorizontalAlignment", xlHAlignCenterAcrossSelection )

заменить на

oSheet:Range( cRange ):HorizontalAlignment := xlHAlignCenterAcrossSelection


Рекомендую посмотреть исправленные примеры связи с Excel из поставки 18.05
Но, как я писал ранее, никто ведь не смотрит примеры и даже не читает список изменений

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



Пост N: 1841
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.06.18 22:50. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение по TsColumns
 
i_tsbrowse.ch
#command DEFINE COLUMN <oCol> ;
...
=> ;
<oCol> := TSColumn():New( ;
[ If(<.oem.>, OemToAnsi(<cHead>), <cHead>) ], ;
[ If( ValType(<uData>) $ "BC"
, <uData>, <{uData}> ) ], ;
[ <cPicture> ], [ \{<aColors>\} ], [ \{<aAlign>\} ], ;
...
CLASS TSColumn
...
DATA cName INIT "" // An optional column name
DATA cField INIT "" // FieldName column

...
METHOD New( cHeading, bData, cPicture, aColors, aAlign, nWidth, ;
lBitMap, lEdit, bValid, lNoLite, cOrder, cFooting, ;
bPrevEdit, bPostEdit, nEditMove, lFixLite, a3DLook, ;
bWhen, oBrw, cData, cWhen, cValid, cPrevEdit, cPostEdit, cMsg, cToolTip, lTotal, ;
lSpinner, bUp, bDown, bMin, bMax, cError, cSpcHeading,;
cDefData, cName ) CLASS TSColumn

Local nEle, uAlign, xVar, aList, aClr, ;
...

If HB_ISCHAR(bData)
::cField := bData
bData := Nil
EndIf

If aColors != Nil
If HB_ISARRAY( aColors ) .and. Len( aColors ) > 0 .and. 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
ASize( aColors, 20 )
Aeval( aColors, { |bColor,n| aTmpColor[ n ] := bColor } )
EndIf

Endif
...

1.
:cField - для создания колонок с неизвестным Alias, когда станет известен, получим :bData
2.
Цвета задавать не все 20 штук, а по номерам\define
 
// aColors items number
#define CLR_TEXT 1 // text
#define CLR_PANE 2 // back
#define CLR_HEADF 3 // header text
#define CLR_HEADB 4 // header back
#define CLR_FOCUSF 5 // focused text
#define CLR_FOCUSB 6 // focused back
...


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



Пост N: 1842
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.18 11:44. Заголовок: PS В догонку CLASS T..


PS
В догонку
 
CLASS TSColumn
...
METHOD SaveProperty( aExcept ) INLINE __objGetValueList( Self, aExcept )
METHOD RestProperty( aProp ) INLINE __objSetValueList( Self, aProp )

ENDCLASS
...
Использовать
a := oBrw:aColumns[1]:SaveProperty()
_logfile(.T., o, o:ClassName, a)
AEval(a, {|av,nv| _logfile(.T., nv, av[1], valtype(av[2]), av[2]) })
...
oBrw:aColumns[1]:RestProperty(a)
...
Использовав, aExcept (массив исключаемых свойств\переменных) можно, к примеру, сохранять\восстанавливать колонки в файлах



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




Пост N: 1287
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.06.18 12:08. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение по TsColumns


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

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



Пост N: 1843
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.18 12:15. Заголовок: Пояснение использова..


Пояснение использования
 
DEFINE COLUMN oC1 DATA 'R_1' NAME 'KOD'
DEFINE COLUMN oC2 DATA 'R_2' NAME 'NAM'
DEFINE COLUMN oC3 DATA FieldBlock( "Field1" ) NAME 'KEY'

FOR EACH o IN {oC1, oC2, oC3}
a := o:SaveProperty()
_logfile(.T., o, o:ClassName, a, '------------')
AEval(a, {|av,nv| _logfile(.T., nv, av[1], valtype(av[2]), av[2]) })
NEXT


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



Пост N: 1844
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.18 13:52. Заголовок: gfilatov2002 В прод..


gfilatov2002
В продолжении по TsColumn.
В колонке есть :cAlias, используемый в методах LoadRelated и PostEdit.
LoadRelated вызываем руками специально (заполняет на колонку :cAlias)
PostEdit при :lEdit == .T. может записать по :cAlias колонки.
Других мест не увидел. Предложение исп. :cAlias колонки для получения uData из другой области, отличной от oBrw:cAlias.
 
METHOD DrawLine( xRow ) CLASS TSBrowse
...
Local aBitMaps, lCheckVal := .F., cColAls
...
hFont := If( hFont == Nil, 0, hFont )
cColAls := oColumn:cAlias

...
If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) )
uData := "" // append mode for arrays
ElseIf cColAls != Nil
uData := ( cColAls )->( Eval( oColumn:bData ) )

Else
uData := Eval( oColumn:bData )
EndIf
...
METHOD DrawSelect( xRow ) CLASS TSBrowse
...
Local aBitMaps, lCheckVal := .F., cColAls
...
lMulti := .F.
cColAls := oColumn:cAlias


If nJ == 1 .and. ! Empty( ::hBmpCursor )
...
Else

If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) )
uData := "" // append mode for arrays
ElseIf cColAls != Nil
uData := ( cColAls )->( Eval( oColumn:bData ) )

Else
uData := Eval( oColumn:bData )
EndIf
...
Правки не сломают PostEdit и позволят делать так
DEFINE COLUMN oC3 DATA FieldBlock( "Field1" ) NAME 'KEY' или ADD COLUMN ...
oC3:cAlias := 'KLIENT'

Для удобства можно сделать
CLASS TSColumn
...
METHOD New( cHeading, bData, cPicture, aColors, aAlign, nWidth, ;
...
lSpinner, bUp, bDown, bMin, bMax, cError, cSpcHeading,;
cDefData, cName, cAlias ) CLASS TSColumn
...
lCheck := .F.

::cAlias := cAlias


If HB_ISCHAR(bData)
...
i_tsbrowse.ch
#command DEFINE COLUMN <oCol> ;
...
[ NAME <name> ] ;
[ ALIAS <alias> ] ;

=> ;
<oCol> := TSColumn():New( ;
...
[<cMsg>], [ <cToolTip> ], [ <.total.> ],,,,,,,,, [ <"name"> ], [ <"alias"> ] )
...
и в других #command ADD [ COLUMN ] ... тоже


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



Пост N: 1845
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.18 14:10. Заголовок: PS Что бы избежать в..


PS
Что бы избежать влияния LoadRelated, добавим в него
 
METHOD LoadRelated( cAlias, lEditable, aNames, aHeaders ) CLASS TSBrowse
...
ATail( ::aColumns ):cAlias := cAlias
ATail( ::aColumns ):cData := cAlias + "->" + FieldName( nE )
ATail( ::aColumns ):cField := cAlias + "->" + FieldName( nE )


Next
...
Поправим cColAls в методах DrawLine и DrawSelect на
cColAls := If( '->' $ oColumn:cField, Nil, oColumn:cAlias )

...


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



Пост N: 1846
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.18 14:18. Заголовок: PS Возможно лучше то..


PS
Возможно лучше тогда в методе LoadRelated заменить использование FieldWBlock на FieldBlock
 
cBlock := 'FieldWBlock( "' + ( cAlias )->( Field( nE ) ) + '", Select( "' + ;
cAlias + '" ) )'
::AddColumn( TSColumn():New( cHeading, FieldWBlock( ( cAlias )->( Field( nE ) ), nArea ),, ;



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




Пост N: 5908
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.06.18 14:23. Заголовок: Новая версия 18.05, ..


Новая версия 18.05, METHOD ExcelOle()

Нашёл такой код:
   Try 
oExcel := CreateObject( "Excel.Application" )
Catch
MsgStop( "Excel is not available. [" + Ole2TxtError() + "]", "Error" )
Return Nil
End Try

А он точно правильный ? Может надо win_oleErrorText() поставить ?

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




Пост N: 1289
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.06.18 14:35. Заголовок: Andrey пишет: он то..


Andrey пишет:

 цитата:
он точно правильный ?


Правильный
Функция Ole2TxtError() берется эдесь из библиотеки xHb

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



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


gfilatov2002
Ошибка закралась CLASS TSBROWSE
 
METHOD GetValue( xCol ) INLINE ( xCol := hb_defaultValue(xCol, ::nCell), ;
EVal( ::GetColumn(xCol):bData ) )
METHOD SetValue( xCol, xVal ) INLINE ( xCol := hb_defaultValue(xCol, ::nCell), ;
EVal( ::SGetColumn(xCol):bData, xVal ) )

у себя сделал (больше нравится)
// METHOD GetValue( xCol ) INLINE ( xCol := hb_defaultValue(xCol, ::nCell), ;
// EVal( ::GetColumn(xCol):bData ) )
// METHOD SetValue( xCol, xVal ) INLINE ( xCol := hb_defaultValue(xCol, ::nCell), ;
// EVal( ::GetColumn(xCol):bData, xVal ) )
METHOD Value( xCol, xVal )

METHOD SetValue( xCol, xVal ) INLINE ::Value( xCol, xVal )
METHOD GetValue( xCol ) INLINE ::Value( xCol )

...
METHOD Value( xCol, xVal ) CLASS TSBrowse
LOCAL xRet, oCol, cAls

xCol := hb_defaultValue(xCol, ::nCell)
oCol := ::GetColumn(xCol)
cAls := oCol:cAlias // !!!

If empty(cAls) .or. '->' $ oCol:cField // !!!
If PCOUNT() > 1
EVal( oCol:bData, xVal )
Else
xRet := EVal( oCol:bData )
EndIf
Else
If PCOUNT() > 1
(cAls)->( EVal( oCol:bData, xVal ) )
Else
xRet := (cAls)->( EVal( oCol:bData ) )
EndIf
EndIf

RETURN xRet

...
// !!! - это добавка по предложениям выше
...
*-----------------------------------------------------------------------------*
FUNCTION _SetValue ( ControlName, ParentForm, Value, index )
*-----------------------------------------------------------------------------*
...
CASE T == "TBROWSE"
oGet := _HMG_aControlIds [ix]
IF oGet:lInitGoTop
IF ISNUMBER( Value ) .AND. Value > 0
oGet:GoPos( Value )
Eval( oGet:bGoToPos, Value )
oGet:Refresh( .T. )
ENDIF
ELSE
// Eval( oGet:GetColumn( oGet:nCell ):bData, Value )
oGet:SetValue( oGet:nCell, Value )

ENDIF
...
*-----------------------------------------------------------------------------*
FUNCTION _GetValue ( ControlName, ParentForm, Index )
*-----------------------------------------------------------------------------*
...
CASE T == "TBROWSE"
oGet := _HMG_aControlIds [ix]
retval := oGet:GetValue( oGet:nCell )

// retval := Eval( oGet:GetColumn( oGet:nCell ):bData )



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



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


gfilatov2002 пишет
 цитата:
Все изменения приняты


Поправьте метод
 
METHOD LoadFields( lEditable ) CLASS TSBrowse
...
ATail( ::aColumns ):cData := ::cAlias + "->" + FieldName( nE )
ATail( ::aColumns ):cName := ( ::cAlias )->( FieldName( nE ) ) // 21.07.2015
ATail( ::aColumns ):cField := ( ::cAlias )->( FieldName( nE ) )


If cType == "L"
...


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



Пост N: 1849
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.18 20:23. Заголовок: PS Установка цвета в..


PS
Установка цвета в тсб так же как в TsColumn
 
* METHOD TSBrowse:New() Version 9.0 Nov/30/2009
...
If aColors != Nil
If HB_ISARRAY( aColors ) .and. Len( aColors ) > 0 .and. 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

// Aeval( aColors, { | bColor, nEle | aTmpColor[ nEle ] := bColor } )
EndIf
...


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




Пост N: 1290
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.06.18 20:32. Заголовок: SergKis пишет: ..


SergKis пишет:

 цитата:
If HB_ISARRAY( aColors ) .and. Len( aColors ) > 0 .and. HB_ISARRAY( aColors[1] )


Этой проверки недостаточно для корректной работы.
Проверил, что Sample1 из базового примера в папке Advanced\TSBrowse вылетает на втором элементе массива.

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



Пост N: 1850
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.18 20:47. Заголовок: gfilatov2002 Еще, н..


gfilatov2002
Еще, на мой взгляд неточность
 
METHOD LoadRelated( cAlias, lEditable, aNames, aHeaders ) CLASS TSBrowse
...
было
ATail( ::aColumns ):cData := cAlias + "->" + FieldName( nE )
ATail( ::aColumns ):cField := cAlias + "->" + FieldName( nE )
надо
ATail( ::aColumns ):cData := cAlias + "->" + ( cAlias )->( FieldName( nE ) )
ATail( ::aColumns ):cField := cAlias + "->" + ( cAlias )->( FieldName( nE ) )
ATail( ::aColumns ):cName := cAlias + "->" + ( cAlias )->( FieldName( nE ) )
...


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




Пост N: 1291
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.06.18 20:58. Заголовок: SergKis пишет: Еще,..


SergKis пишет:

 цитата:
Еще, на мой взгляд неточность


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

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



Пост N: 1851
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.18 21:31. Заголовок: gfilatov2002 пишет Э..


gfilatov2002 пишет
 цитата:
Этой проверки недостаточно для корректной работы.
Проверил, что Sample1 из базового примера в папке Advanced\TSBrowse вылетает на втором элементе массива.


Упустил я изменения (передвигаюсь между своим проектом lib и 18.05, еще и внук отвлек)
 
FUNCTION _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ;
...
LOCAL aTmpColor := Array( 20 ), lColors := .F., aClr

...
IF aColors != NIL .AND. ValType( aColors ) == 'A'
If ( lColors := HB_ISARRAY( aColors ) .and. Len( aColors ) > 0 .and. 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
ENDIF
IF ValType( fontcolor ) != "U"
If lColors
AAdd(aTmpColor, { CLR_TEXT, RGB( fontcolor[ 1 ], fontcolor[ 2 ], fontcolor[ 3 ] ) })
Else
aTmpColor[ 1 ] := RGB( fontcolor[ 1 ], fontcolor[ 2 ], fontcolor[ 3 ] )
EndIf
ENDIF
IF ValType( backcolor ) != "U"
If lColors
AAdd(aTmpColor, { CLR_PANE, RGB( backcolor[ 1 ], backcolor[ 2 ], backcolor[ 3 ] ) })
Else
aTmpColor[ 2 ] := RGB( backcolor[ 1 ], backcolor[ 2 ], backcolor[ 3 ] )
EndIf
ENDIF

...


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



Пост N: 1852
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.18 21:47. Заголовок: Упс. перегнул чуток ..


Упс. перегнул чуток
 
LOCAL aTmpColor := Array( 20 ), lColors := .F., aClr
...
If ( lColors := HB_ISARRAY( aColors ) .and. Len( aColors ) > 0 .and. HB_ISARRAY( aColors[1] ) )
...
IF ValType( fontcolor ) != "U"
If lColors
AAdd(aTmpColor, { CLR_TEXT, RGB( fontcolor[ 1 ], fontcolor[ 2 ], fontcolor[ 3 ] ) })
Else
aTmpColor[ 1 ] := RGB( fontcolor[ 1 ], fontcolor[ 2 ], fontcolor[ 3 ] )
EndIf
ENDIF
IF ValType( backcolor ) != "U"
If lColors
AAdd(aTmpColor, { CLR_PANE, RGB( backcolor[ 1 ], backcolor[ 2 ], backcolor[ 3 ] ) })
Else
aTmpColor[ 2 ] := RGB( backcolor[ 1 ], backcolor[ 2 ], backcolor[ 3 ] )
EndIf
ENDIF
...
lColors не нужна


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




Пост N: 1292
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.06.18 22:29. Заголовок: SergKis пишет: FUNC..


SergKis пишет:

 цитата:
FUNCTION _DefineTBrowse


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

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




Пост N: 6842
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.06.18 22:29. Заголовок: SergKis пишет: еще ..


SergKis пишет:

 цитата:
еще и внук отвлек


SergKis пишет:

 цитата:
Упс. перегнул чуток


Отдохни , утро вечера мудренее

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



Пост N: 1853
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.06.18 23:25. Заголовок: Dima Спасибо, уже п..


Dima
Спасибо, уже пооошееел.
Только мысли не отпускают , надо базу колонок сделать и из нее создавать тсб.
Массивами наглядно, но они, паразиты, улазят за экран .
Вот и полез ...

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



Пост N: 1854
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.06.18 10:24. Заголовок: gfilatov2002 пишет С..


gfilatov2002 пишет
 цитата:
С этим исправлением контрольный пример работает


Так тоже работает
 
Local aColors := {}
...
AAdd( aColors, { 5, CLR_BLACK} )
AAdd( aColors, { 2, CLR_NBLUE} )
AAdd( aColors, { 1, CLR_BLACK} )
AAdd( aColors, { 3, CLR_WHITE} )
AAdd( aColors, {13, CLR_WHITE} )
AAdd( aColors, {15, CLR_BLACK} )

DEFINE TBROWSE Brw_1 AT 0, 0 ALIAS "Employee" ;
COLORS aColors ;
WIDTH nBrwWidth HEIGHT nBrwHeight ;
...
:SetColor( { 6 }, {{ CLR_WHITE, CLR_BLACK }} ) // degraded cursor background color
/* :SetColor( { 1, 3, 5, 6, 13, 15 }, ;
{ CLR_BLACK, CLR_WHITE, CLR_BLACK, ;
{ CLR_WHITE, CLR_BLACK }, ; // degraded cursor background color
CLR_WHITE, CLR_BLACK } ) // text colors
*/
...
вариант такой не сработал (пока не смотрел), добавить
AAdd( aColors, { 6, { CLR_WHITE, CLR_BLACK }} )
убрать
// :SetColor( { 6 }, {{ CLR_WHITE, CLR_BLACK }} ) // degraded cursor background color


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



Пост N: 1855
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.06.18 11:54. Заголовок: SergKis пишет вариан..


SergKis пишет
 цитата:
вариант такой не сработал


Надо добавить
 
FUNCTION _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ;
...
IF ValType( aColSel ) != 'U' .AND. ValType( aColSel ) == 'A'
IF ValType( aColSel[ 1 ] ) == 'A'
aColSel := aColSel[ 1 ]
ENDIF
ENDIF

IF HB_ISARRAY(aColors) .and. Len( aColors ) > 0 .AND. ValType( aColors[ 1 ] ) == 'A'
aColors := aColors[ 1 ]
ENDIF

IF ValType( uWhen ) == 'B' /* BK 18.05.2015 */
...
тогда работает
AAdd( aColors, { 5, CLR_BLACK} )
AAdd( aColors, { 2, CLR_NBLUE} )
AAdd( aColors, { 1, CLR_BLACK} )
AAdd( aColors, { 3, CLR_WHITE} )
AAdd( aColors, {13, CLR_WHITE} )
AAdd( aColors, {15, CLR_BLACK} )
AAdd( aColors, { 6, { CLR_WHITE, CLR_BLACK }} )
AAdd( aColors, { 2, { CLR_WHITE, CLR_NBLUE }} )
AAdd( aColors, { 4, { CLR_WHITE, CLR_BLACK }} )
AAdd( aColors, {14, { CLR_HRED, CLR_BLACK }} )

DEFINE TBROWSE Brw_1 AT 0, 0 ALIAS "Employee" ;
COLORS aColors ;
WIDTH nBrwWidth HEIGHT nBrwHeight ;
MESSAGE "Cell height idependent of the font size using oBrw:nHeightCell. " +;
"Also try multi-select feature by double clicking."


:LoadFields( .F. )
/* :SetColor( { 1, 3, 5, 6, 13, 15 }, ;
{ CLR_BLACK, CLR_WHITE, CLR_BLACK, ;
{ CLR_WHITE, CLR_BLACK }, ; // degraded cursor background color
CLR_WHITE, CLR_BLACK } ) // text colors

:SetColor( { 2, 4, 14 }, ;
{ { CLR_WHITE, CLR_NBLUE }, ; // degraded cells background color
{ CLR_WHITE, CLR_BLACK }, ; // degraded headers backgroud color
{ CLR_HRED, CLR_BLACK } } ) // degraded order column background color
*/
...


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



Пост N: 1856
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.06.18 12:47. Заголовок: gfilatov2002 В TsCo..


gfilatov2002
В TsColumn добавить методы
 
METHOD SetProperty ( cName, xVal ) INLINE iif( __objHasData( Self, cName ), __objSendMsg( Self, '_'+cName, xVal ), Nil )
METHOD GetProperty ( cName ) INLINE iif( __objHasData( Self, cName ), __objSendMsg( Self, cName ), Nil )


использовать
DEFINE COLUMN oC1 DATA 'R_1' NAME 'KOD' ALIAS U08
DEFINE COLUMN oC2 DATA 'R_2' NAME 'NAM' ALIAS U08
DEFINE COLUMN oC3 DATA FieldBlock("Field1") NAME 'KEY' ALIAS U04
DEFINE COLUMN oC4 DATA 'R_1+R_2' NAME 'KDM' ALIAS U08

FOR EACH o IN {oC1, oC2, oC3, oC4}
a := o:SaveProperty()
msglog(o, o:ClassName, a, '------------')
AEval(a, {|av,nv| msglog( nv, av[1], valtype(av[2]), av[2]) })
o:SetProperty('cData', '')
AEval({'cData', 'cField'}, {|cv,nv| msglog( nv, o:GetProperty(cv)) })
NEXT


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


Пост N: 1436
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 09.06.18 13:07. Заголовок: SergKis пишет: FOR ..


SergKis пишет:

 цитата:
FOR EACH o IN {oC1, oC2, oC3, oC4}
a := o:SaveProperty()


Опечатка?

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




Пост N: 6845
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.06.18 13:08. Заголовок: PSP пишет: Опечатка..


PSP пишет:

 цитата:
Опечатка?


Это снова внук видимо

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



Пост N: 1857
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.06.18 15:48. Заголовок: Dima пишет Опечатка ..


Dima пишет
 цитата:
Опечатка ?


Нет. Добавлены методы сохранить в массив переменные колонки или восстановить из массива
 
CLASS TSColumn
...
METHOD SaveProperty( aExcept ) INLINE __objGetValueList( Self, aExcept )
METHOD RestProperty( aProp ) INLINE __objSetValueList( Self, aProp )
добавил еще (проще небольшие замены\получения значений делать)
METHOD SetProperty ( cName, xVal ) INLINE iif( __objHasData( Self, cName ), __objSendMsg( Self, '_'+cName, xVal ), Nil )
METHOD GetProperty ( cName ) INLINE iif( __objHasData( Self, cName ), __objSendMsg( Self, cName ), Nil )
Переменных в массиве много и исп. aExcept (массив исключаемых свойств\переменных) можно, но накладно ...
Надо еще Clone сделать, но пока не у того компа.
Двигаю базу колонок на DFINE COLUMN ..., как выше, потом для конкр. тсб набирать из базы объекты, чуть поправил и в тсб отбравил типа так
AEval({oC1, ...., oCn}, {|ocol| oBrw:AddColumn(ocol) })
И массив цветов, практически, глобальный на задачу, чуть подправить, если что


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



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


gfilatov2002
Добавить в TSColumn
 
METHOD Clone() INLINE __objClone( Self )

Интересный вывод по установке в колонку cAlias, для себя сделал.
Не использовать метод LoadRelated (и ранее не использовал).
Не использовать в :bData FieldWBlock с привязкой к workarea (использовал) !
Применять FieldBlock для полей и hb_MacroBlock для выражений из полей (типа trim(R_34)+' '+...).
Ставить в каждую колонку нужный алиас, повторяя oBrw:cAlias или другой workarea.
В результате будем иметь в тсб uData := ( oCol:cAlias )->( EVal( oCol:bData ) )
Кое что упрощается.



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




Пост N: 1293
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.06.18 19:44. Заголовок: SergKis пишет: Доба..


SergKis пишет:

 цитата:
Добавить в TSColumn


Все поправки и дополнения, кроме

 цитата:
   
IF HB_ISARRAY(aColors) .and. Len( aColors ) > 0 .AND. ValType( aColors[ 1 ] ) == 'A'
aColors := aColors[ 1 ]
ENDIF


были приняты

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



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


gfilatov2002 пишет
 цитата:
кроме


Там же препроцессор добавляет лишние { }

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



Пост N: 1860
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.06.18 23:52. Заголовок: gfilatov2002 Добави..


gfilatov2002
Добавил
 
CLASS TSBrowse FROM TControl
...
METHOD SetValue ( xCol, xVal ) INLINE ::Value( xCol, xVal )
METHOD GetValue ( xCol ) INLINE ::Value( xCol )
METHOD bDataEval( oCol ) INLINE iif( empty( oCol:cAlias ) .or. '->' $ oCol:cField, ;
EVal( oCol:bData ), ( oCol:cAlias )->( EVal( oCol:bData ) ) )

...
Static Function SetHeights( oBrw )
...
For nEle := 1 TO Len( oBrw:aColumns )
oColumn := oBrw:aColumns[ nEle ]
cHeading := oBrw:bDataEval( oColumn )
// cHeading := Eval( oColumn:bData )

...

Начал тестировать. Набросок примера http://my-files.ru/qqjal9


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




Пост N: 1294
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.06.18 09:52. Заголовок: SergKis пишет: Доба..


SergKis пишет:

 цитата:
Добавил


Принято, благодарю за помощь

SergKis пишет:

 цитата:
Набросок примера


Супер

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



Пост N: 1861
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.06.18 11:55. Заголовок: gfilatov2002 У себя..


gfilatov2002
У себя сделал
 
CLASS TWndData
...
METHOD Hide() INLINE _HideWindow( ::cName )
METHOD SetFocus( xName ) INLINE iif( empty(xName), SetFocus(::nHandle) , ::GetObj(xName):SetFocus() )

METHOD SetSize( y, x, w, h ) INLINE _SetWindowSizePos( ::cName, y, x, w, h )

Переключать фокус на контрол окна
oWnd:SetFocus('oBrw')
focus на tsb


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




Пост N: 1295
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.06.18 12:28. Заголовок: SergKis пишет: У се..


SergKis пишет:

 цитата:
У себя сделал


OK, принято

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



Пост N: 1862
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.06.18 15:03. Заголовок: gfilatov2002 Пример..


gfilatov2002
Пример довел до какой то кондиции. http://my-files.ru/923enb
Старое не сломалось (вроде), новое работает.
Показал, как избавиться от public переменных базы колонок.
На модальных окнах справ. включается edit (не ключевые поля)

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




Пост N: 1296
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.06.18 15:23. Заголовок: SergKis пишет: Прим..


SergKis пишет:

 цитата:
Пример довел


Очень хорошо!

SergKis пишет:

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


У меня работает тоже

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



Пост N: 1863
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.06.18 16:02. Заголовок: gfilatov2002 Добавь..


gfilatov2002
Добавьте строку в пример (у меня автоматом уст. в lib, в hmg забываю ставить)
 
FUNC Tsb_Create( cName, nY, nX, nW, nH, aCols )
...
:lFooting := .T.
:lNoKeyChar := .T.

:lNoVScroll := .F.
...


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




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


SergKis пишет:

 цитата:
Добавьте строку в пример


Благодарю, уже добавил...

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



Пост N: 1864
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.18 08:30. Заголовок: gfilatov2002 Сделал..


gfilatov2002
Сделал вариант
 
#xcommand DEFINE TBROWSE <name> TO <obrw> ;
AT <row>,<col> ;
...
=>;
<obrw>
:=_DefineTBrowse (<"name"> , ;
...
with object <obrw>
...
разделил имя тсб и имя переменной


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




Пост N: 1298
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.06.18 09:54. Заголовок: SergKis пишет: разд..


SergKis пишет:

 цитата:
разделил имя тсб и имя переменной


Благодарю за идею!
Только использовал ключевое слово OBJ вместо TO

 цитата:
#xcommand DEFINE TBROWSE <name> OBJ <obrw> ;
AT <row>,<col> ;



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



Пост N: 1865
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.18 10:03. Заголовок: gfilatov2002 Еще по..


gfilatov2002
Еще по цветам и фонтам (не работает как надо сейчас)
 
#command DEFINE COLUMN <oCol> ;
...
=> ;
<oCol> := TSColumn():New( ;
...
[ <"name"> ], [ <"alias"> ], .T. )
...
т.е. находимся в define columns - не делать заполнение цветов, фонтов по default (все в nil)
CLASS TSColumn
...
METHOD DefColor()
METHOD DefFont()

ENDCLASS
...
METHOD DefFont( oBrw ) CLASS TSColumn
LOCAL hFont , ;
hFontHead , ;
hFontFoot , ;
hFontEdit , ;
hFontSpcHd

If oBrw != Nil

hFont := oBrw:hFont
hFontHead := If( Empty( oBrw:hFontHead ), oBrw:hFont, oBrw:hFontHead )
hFontFoot := If( Empty( oBrw:hFontFoot ), oBrw:hFont, oBrw:hFontFoot )
hFontEdit := If( Empty( oBrw:hFontEdit ), oBrw:hFont, oBrw:hFontEdit )
hFontSpcHd := If( Empty( oBrw:hFontSpcHd ), oBrw:hFont, oBrw:hFontSpcHd )

Default ::hFont := hFont , ;
::hFontHead := hFontHead , ;
::hFontFoot := hFontFoot , ;
::hFontEdit := hFontEdit , ;
::hFontSpcHd := hFontSpcHd

EndIf

RETURN Self

METHOD DefColor( oBrw ) CLASS TSColumn
LOCAL aTmpColor := Array( 20 )

If oBrw != Nil

Default aTmpColor[ 1 ] := oBrw:nClrText, ;
aTmpColor[ 2 ] := oBrw:nClrPane, ;
aTmpColor[ 3 ] := oBrw:nClrHeadFore, ;
aTmpColor[ 4 ] := oBrw:nClrHeadBack, ;
aTmpColor[ 5 ] := oBrw:nClrFocuFore, ;
aTmpColor[ 6 ] := oBrw:nClrFocuBack

Default aTmpColor[ 7 ] := oBrw:nClrEditFore, ;
aTmpColor[ 8 ] := oBrw:nClrEditBack, ;
aTmpColor[ 9 ] := oBrw:nClrFootFore, ;
aTmpColor[ 10 ] := oBrw:nClrFootBack, ;
aTmpColor[ 11 ] := oBrw:nClrSeleFore, ;
aTmpColor[ 12 ] := oBrw:nClrSeleBack, ;
aTmpColor[ 13 ] := oBrw:nClrOrdeFore, ;
aTmpColor[ 14 ] := oBrw:nClrOrdeBack, ;
aTmpColor[ 15 ] := oBrw:nClrLine , ;
aTmpColor[ 16 ] := oBrw:nClrHeadFore, ;
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

Default aTmpColor[ 1 ] := GetSysColor( COLOR_WINDOWTEXT ), ; // nClrText
aTmpColor[ 2 ] := GetSysColor( COLOR_WINDOW ) , ; // nClrPane
aTmpColor[ 3 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrHeadFore
aTmpColor[ 4 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrHeadBack
aTmpColor[ 5 ] := GetSysColor( COLOR_HIGHLIGHTTEXT ), ; // nClrFocuFore
aTmpColor[ 6 ] := GetSysColor( COLOR_HIGHLIGHT ) // nClrFocuBack

Default aTmpColor[ 7 ] := GetSysColor( COLOR_WINDOWTEXT ), ; // nClrEditFore
aTmpColor[ 8 ] := GetSysColor( COLOR_WINDOW ) , ; // nClrEditBack
aTmpColor[ 9 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrFootFore
aTmpColor[ 10 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrFootBack
aTmpColor[ 11 ] := CLR_HGRAY , ; // nClrSeleFore NO focused
aTmpColor[ 12 ] := CLR_GRAY , ; // nClrSeleBack NO focused
aTmpColor[ 13 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrOrdeFore
aTmpColor[ 14 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrLine
aTmpColor[ 15 ] := CLR_BLACK ,;
aTmpColor[ 16 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrSupHeadFore
aTmpColor[ 17 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrSupHeadBack
aTmpColor[ 18 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrSpecHeadFore
aTmpColor[ 19 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrSpecHeadBack
aTmpColor[ 20 ] := CLR_HRED // nClrSpecHeadActive

::nClrFore := aTmpColor[ 1 ]
::nClrBack := aTmpColor[ 2 ]
::nClrHeadFore := aTmpColor[ 3 ]
::nClrHeadBack := aTmpColor[ 4 ]
::nClrFocuFore := aTmpColor[ 5 ]
::nClrFocuBack := aTmpColor[ 6 ]
::nClrEditFore := aTmpColor[ 7 ]
::nClrEditBack := aTmpColor[ 8 ]
::nClrFootFore := aTmpColor[ 9 ]
::nClrFootBack := aTmpColor[ 10 ]
::nClrSeleFore := aTmpColor[ 11 ]
::nClrSeleBack := aTmpColor[ 12 ]
::nClrOrdeFore := aTmpColor[ 13 ]
::nClrOrdeBack := aTmpColor[ 14 ]
::nClrSpcHdFore := aTmpColor[ 18 ]
::nClrSpcHdBack := aTmpColor[ 19 ]
::nClrSpcHdActive := aTmpColor[ 20 ]

RETURN Self

...
METHOD New( cHeading, bData, cPicture, aColors, aAlign, nWidth, ;
...
cDefData, cName, cAlias, DefineCol ) CLASS TSColumn
...
If empty( DefineCol )

::DefColor( oBrw )
::DefFont ( oBrw )

/*
If oBrw == Nil

Default aTmpColor[ 1 ] := GetSysColor( COLOR_WINDOWTEXT ), ; // nClrText
aTmpColor[ 2 ] := GetSysColor( COLOR_WINDOW ) , ; // nClrPane
aTmpColor[ 3 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrHeadFore
aTmpColor[ 4 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrHeadBack
aTmpColor[ 5 ] := GetSysColor( COLOR_HIGHLIGHTTEXT ), ; // nClrFocuFore
aTmpColor[ 6 ] := GetSysColor( COLOR_HIGHLIGHT ) // nClrFocuBack

Default aTmpColor[ 7 ] := GetSysColor( COLOR_WINDOWTEXT ), ; // nClrEditFore
aTmpColor[ 8 ] := GetSysColor( COLOR_WINDOW ) , ; // nClrEditBack
aTmpColor[ 9 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrFootFore
aTmpColor[ 10 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrFootBack
aTmpColor[ 11 ] := CLR_HGRAY , ; // nClrSeleFore NO focused
aTmpColor[ 12 ] := CLR_GRAY , ; // nClrSeleBack NO focused
aTmpColor[ 13 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrOrdeFore
aTmpColor[ 14 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrLine
aTmpColor[ 15 ] := CLR_BLACK ,;
aTmpColor[ 16 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrSupHeadFore
aTmpColor[ 17 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrSupHeadBack
aTmpColor[ 18 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrSpecHeadFore
aTmpColor[ 19 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrSpecHeadBack
aTmpColor[ 20 ] := CLR_HRED // nClrSpecHeadActive

Else

Default aTmpColor[ 1 ] := oBrw:nClrText, ;
aTmpColor[ 2 ] := oBrw:nClrPane, ;
aTmpColor[ 3 ] := oBrw:nClrHeadFore, ;
aTmpColor[ 4 ] := oBrw:nClrHeadBack, ;
aTmpColor[ 5 ] := oBrw:nClrFocuFore, ;
aTmpColor[ 6 ] := oBrw:nClrFocuBack

Default aTmpColor[ 7 ] := oBrw:nClrEditFore, ;
aTmpColor[ 8 ] := oBrw:nClrEditBack, ;
aTmpColor[ 9 ] := oBrw:nClrFootFore, ;
aTmpColor[ 10 ] := oBrw:nClrFootBack, ;
aTmpColor[ 11 ] := oBrw:nClrSeleFore, ;
aTmpColor[ 12 ] := oBrw:nClrSeleBack, ;
aTmpColor[ 13 ] := oBrw:nClrOrdeFore, ;
aTmpColor[ 14 ] := oBrw:nClrOrdeBack, ;
aTmpColor[ 15 ] := oBrw:nClrLine , ;
aTmpColor[ 16 ] := oBrw:nClrHeadFore, ;
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

::hFont := oBrw:hFont
::hFontHead := If( Empty( oBrw:hFontHead ), oBrw:hFont, oBrw:hFontHead )
::hFontFoot := If( Empty( oBrw:hFontFoot ), oBrw:hFont, oBrw:hFontFoot )
::hFontEdit := If( Empty( oBrw:hFontEdit ), oBrw:hFont, oBrw:hFontEdit )
::hFontSpcHd := If( Empty( oBrw:hFontSpcHd ), oBrw:hFont, oBrw:hFontSpcHd )

EndIf
*/

EndIf

...
::bMax = bMax
// ::nClrFore = aTmpColor[ 1 ]
// ::nClrBack = aTmpColor[ 2 ]
// ::nClrHeadFore = aTmpColor[ 3 ]
// ::nClrHeadBack = aTmpColor[ 4 ]
// ::nClrFocuFore = aTmpColor[ 5 ]
// ::nClrFocuBack = aTmpColor[ 6 ]
// ::nClrEditFore = aTmpColor[ 7 ]
// ::nClrEditBack = aTmpColor[ 8 ]
// ::nClrFootFore = aTmpColor[ 9 ]
// ::nClrFootBack = aTmpColor[ 10 ]
// ::nClrSeleFore = aTmpColor[ 11 ]
// ::nClrSeleBack = aTmpColor[ 12 ]
// ::nClrOrdeFore = aTmpColor[ 13 ]
// ::nClrOrdeBack = aTmpColor[ 14 ]
// ::nClrSpcHdFore = aTmpColor[ 18 ]
// ::nClrSpcHdBack = aTmpColor[ 19 ]
// ::nClrSpcHdActive = aTmpColor[ 20 ]

::nClr3DLCell = GetSysColor( COLOR_BTNHIGHLIGHT )
...
CLASS TSBrowse FROM TControl
...
METHOD AddColumn( oColumn ) CLASS TSBrowse

Local nHeight, nAt, cHeading, cRest, nOcurs, ;
hFont := If( ::hFont != Nil, ::hFont, 0 )

oColumn:DefColor( Self )
oColumn:DefFont ( Self )

Default ::aColSizes := {}
...
METHOD InsColumn( nPos, oColumn ) CLASS TSBrowse

Local nI, ;
nCell := ::nCell

oColumn:DefColor( Self )
oColumn:DefFont ( Self )

Default nPos := 1



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



Пост N: 1866
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.18 10:12. Заголовок: gfilatov2002 пишет Т..


gfilatov2002 пишет
 цитата:
Только использовал ключевое слово OBJ вместо TO


еще
 
#xcommand DEFINE TBROWSE <name> OBJ <obrw> ;
[ AT <row>,<col> ] ;


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



Пост N: 1867
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.18 11:10. Заголовок: gfilatov2002 Пример..


gfilatov2002
Пример тогда выглядит так http://my-files.ru/bl7ds2


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



Пост N: 1868
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.18 13:05. Заголовок: PS работает и такой ..


PS
работает и такой вариант
 
FUNC Tsb_Create( cName, nY, nX, nW, nH, aCols )
*----------------------------------------------------------------------------*
LOCAL oBrw, aColors := {}
PRIV &cName

AAdd(aColors, { CLR_FOCUSB, { |a,b,c| If( c:nCell == b, {RGB( 66, 255, 236), RGB(209, 227, 248)}, ;
{RGB(220, 220, 220), RGB(220, 220, 220)} ) } } )

DEFINE TBROWSE &cName OBJ oBrw AT nY, nX ALIAS ALIAS() WIDTH nW HEIGHT nH CELL ;
COLORS aColors

:hFontHead := GetFontHandle( "FontBold" )
:hFontFoot := GetFontHandle( "FontBold" )
...
вместо
// :SetColor( { CLR_FOCUSB }, { { |a,b,c| If( c:nCell == b, {RGB( 66, 255, 236), RGB(209, 227, 248)}, ;
// {RGB(220, 220, 220), RGB(220, 220, 220)} ) } } )
...


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




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


SergKis пишет:

 цитата:
работает и такой вариант


У меня - НЕ работает.
После этих изменений пропал фоновый цвет в контрольном примере (sample 4 и sample 7), а также фон у фантомной колонки селектора.

Если возможно, выложите исправленные исходники библиотеки для сверки изменений.

SergKis пишет:

 цитата:
вместо // :SetColor( { CLR_FOCUSB }, { { |a,b,c| If( c:nCell == b, {RGB( 66, 255, 236), RGB(209, 227, 248)}, ; //


Через установку :SetColor цвет есть

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



Пост N: 1869
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.18 18:18. Заголовок: gfilatov2002 Для св..


gfilatov2002
Для сверки http://my-files.ru/dk0g0p

 цитата:
У меня - НЕ работает.


Поправил, упустил
 
CLASS TSColumn
...
DATA lDefineColumn AS LOGICAL INIT .F.

...
::lDefineColumn := ! empty(DefineCol)

If ! ::lDefineColumn

::DefColor( oBrw, aTmpColor )
::DefFont ( oBrw )

EndIf

/*
If oBrw == Nil
...
Else
...
EndIf
*/

Default aTmp3D[ 1 ] := If( oBrw == Nil, .F., oBrw:l3DLook )
...
::bMax = bMax
/*
::nClrFore = aTmpColor[ 1 ]
::nClrBack = aTmpColor[ 2 ]
::nClrHeadFore = aTmpColor[ 3 ]
::nClrHeadBack = aTmpColor[ 4 ]
::nClrFocuFore = aTmpColor[ 5 ]
::nClrFocuBack = aTmpColor[ 6 ]
::nClrEditFore = aTmpColor[ 7 ]
::nClrEditBack = aTmpColor[ 8 ]
::nClrFootFore = aTmpColor[ 9 ]
::nClrFootBack = aTmpColor[ 10 ]
::nClrSeleFore = aTmpColor[ 11 ]
::nClrSeleBack = aTmpColor[ 12 ]
::nClrOrdeFore = aTmpColor[ 13 ]
::nClrOrdeBack = aTmpColor[ 14 ]
::nClrSpcHdFore = aTmpColor[ 18 ]
::nClrSpcHdBack = aTmpColor[ 19 ]
::nClrSpcHdActive = aTmpColor[ 20 ]
*/

::nClr3DLCell = GetSysColor( COLOR_BTNHIGHLIGHT )
::nClr3DLHead = GetSysColor( COLOR_BTNHIGHLIGHT )
::nClr3DLFoot = GetSysColor( COLOR_BTNHIGHLIGHT )
::nClr3DSCell = GetSysColor( COLOR_BTNSHADOW )
::nClr3DSHead = GetSysColor( COLOR_BTNSHADOW )
::nClr3DSFoot = GetSysColor( COLOR_BTNSHADOW )
/*
::aColors = aTmpColor
::aColorsBack = aTmpColor
*/

::lIndexCol = .F.
...
METHOD DefColor( oBrw, aTmpColor ) CLASS TSColumn

Default aTmpColor := Array( 20 )

If oBrw == Nil

Default aTmpColor[ 1 ] := GetSysColor( COLOR_WINDOWTEXT ), ; // nClrText
aTmpColor[ 2 ] := GetSysColor( COLOR_WINDOW ) , ; // nClrPane
aTmpColor[ 3 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrHeadFore
aTmpColor[ 4 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrHeadBack
aTmpColor[ 5 ] := GetSysColor( COLOR_HIGHLIGHTTEXT ), ; // nClrFocuFore
aTmpColor[ 6 ] := GetSysColor( COLOR_HIGHLIGHT ) // nClrFocuBack

Default aTmpColor[ 7 ] := GetSysColor( COLOR_WINDOWTEXT ), ; // nClrEditFore
aTmpColor[ 8 ] := GetSysColor( COLOR_WINDOW ) , ; // nClrEditBack
aTmpColor[ 9 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrFootFore
aTmpColor[ 10 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrFootBack
aTmpColor[ 11 ] := CLR_HGRAY , ; // nClrSeleFore NO focused
aTmpColor[ 12 ] := CLR_GRAY , ; // nClrSeleBack NO focused
aTmpColor[ 13 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrOrdeFore
aTmpColor[ 14 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrLine
aTmpColor[ 15 ] := CLR_BLACK ,;
aTmpColor[ 16 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrSupHeadFore
aTmpColor[ 17 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrSupHeadBack
aTmpColor[ 18 ] := GetSysColor( COLOR_BTNTEXT ) , ; // nClrSpecHeadFore
aTmpColor[ 19 ] := GetSysColor( COLOR_BTNFACE ) , ; // nClrSpecHeadBack
aTmpColor[ 20 ] := CLR_HRED // nClrSpecHeadActive

Else

Default aTmpColor[ 1 ] := oBrw:nClrText, ;
aTmpColor[ 2 ] := oBrw:nClrPane, ;
aTmpColor[ 3 ] := oBrw:nClrHeadFore, ;
aTmpColor[ 4 ] := oBrw:nClrHeadBack, ;
aTmpColor[ 5 ] := oBrw:nClrFocuFore, ;
aTmpColor[ 6 ] := oBrw:nClrFocuBack

Default aTmpColor[ 7 ] := oBrw:nClrEditFore, ;
aTmpColor[ 8 ] := oBrw:nClrEditBack, ;
aTmpColor[ 9 ] := oBrw:nClrFootFore, ;
aTmpColor[ 10 ] := oBrw:nClrFootBack, ;
aTmpColor[ 11 ] := oBrw:nClrSeleFore, ;
aTmpColor[ 12 ] := oBrw:nClrSeleBack, ;
aTmpColor[ 13 ] := oBrw:nClrOrdeFore, ;
aTmpColor[ 14 ] := oBrw:nClrOrdeBack, ;
aTmpColor[ 15 ] := oBrw:nClrLine , ;
aTmpColor[ 16 ] := oBrw:nClrHeadFore, ;
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

::nClrFore := aTmpColor[ 1 ]
::nClrBack := aTmpColor[ 2 ]
::nClrHeadFore := aTmpColor[ 3 ]
::nClrHeadBack := aTmpColor[ 4 ]
::nClrFocuFore := aTmpColor[ 5 ]
::nClrFocuBack := aTmpColor[ 6 ]
::nClrEditFore := aTmpColor[ 7 ]
::nClrEditBack := aTmpColor[ 8 ]
::nClrFootFore := aTmpColor[ 9 ]
::nClrFootBack := aTmpColor[ 10 ]
::nClrSeleFore := aTmpColor[ 11 ]
::nClrSeleBack := aTmpColor[ 12 ]
::nClrOrdeFore := aTmpColor[ 13 ]
::nClrOrdeBack := aTmpColor[ 14 ]
::nClrSpcHdFore := aTmpColor[ 18 ]
::nClrSpcHdBack := aTmpColor[ 19 ]
::nClrSpcHdActive := aTmpColor[ 20 ]

::aColors := aTmpColor
::aColorsBack := aTmpColor

RETURN Self

...
METHOD AddColumn( oColumn ) CLASS TSBrowse

Local nHeight, nAt, cHeading, cRest, nOcurs, ;
hFont := If( ::hFont != Nil, ::hFont, 0 )

If oColumn:lDefineColumn
oColumn:DefColor( Self )
oColumn:DefFont ( Self )
EndIf

Default ::aColSizes := {}
...
METHOD InsColumn( nPos, oColumn ) CLASS TSBrowse

Local nI, ;
nCell := ::nCell

If oColumn:lDefineColumn
oColumn:DefColor( Self )
oColumn:DefFont ( Self )
EndIf

Default nPos := 1
...
sample 4 заработал, sample 7 отличается с 3-8 колонки, но я не вижу где ставится этим колонкам белый цвет фона.
Всем колонкам ставится CLR_PINK и потом др. колонкам пере назначается.





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



Пост N: 1870
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.18 18:49. Заголовок: gfilatov2002 От арх..


gfilatov2002
От архива сверки еще немного поправил (сохранить цвета из define column ... команды)
 
METHOD New( cHeading, bData, cPicture, aColors, aAlign, nWidth, ;
...
cDefData, cName, cAlias, DefineCol ) CLASS TSColumn
...
::lDefineColumn := ! empty(DefineCol)

If ::lDefineColumn

::aColors := aTmpColor
::aColorsBack := aTmpColor

Else


::DefColor( oBrw, aTmpColor )
::DefFont ( oBrw )

EndIf
...
METHOD AddColumn( oColumn ) CLASS TSBrowse

Local nHeight, nAt, cHeading, cRest, nOcurs, ;
hFont := If( ::hFont != Nil, ::hFont, 0 )

If oColumn:lDefineColumn
oColumn:DefColor( Self, oColumn:aColors )
oColumn:DefFont ( Self )
EndIf
...
METHOD InsColumn( nPos, oColumn ) CLASS TSBrowse

Local nI, ;
nCell := ::nCell

If oColumn:lDefineColumn
oColumn:DefColor( Self, oColumn:aColors )
oColumn:DefFont ( Self )
EndIf
...


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



Пост N: 1871
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.18 19:57. Заголовок: PS сделал в sample 7..


PS
сделал в sample 7
 
DEFINE TBROWSE Brw_7 AT 0,0 CELLED ALIAS "Employee" Transparent Selector "Bitmaps\Arrow.bmp" ;
WIDTH nBrwWidth HEIGHT nBrwHeight ;
COLORS {CLR_BLACK, CLR_WHITE} ; // CLR_PINK

получил белый фон, как раньше, т.е. пример совпал

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




Пост N: 1300
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.06.18 21:01. Заголовок: SergKis пишет: MET..


SergKis пишет:

 цитата:
METHOD DefColor( oBrw, aTmpColor ) CLASS TSColumn

Default aTmpColor := Array( 20 )


Мыслим одинаково! Я тоже добавил у себя эти изменения

SergKis пишет:

 цитата:
COLORS {CLR_BLACK, CLR_WHITE}


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

Сейчас внесу последние предложенные исправления и проверю работу контрольного примера
Благодарю за помощь

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



Пост N: 1872
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.18 21:02. Заголовок: PS В примере работае..


PS
В примере работает
 
*----------------------------------------------------------------------------*
FUNC Tsb_Create( cName, nY, nX, nW, nH, aCols, aColors )
*----------------------------------------------------------------------------*
LOCAL oBrw
PRIV &cName


If empty(aColors) .or. ! HB_ISARRAY(aColors)
aColors := {}
AAdd(aColors, { CLR_FOCUSB, { |a,b,c| If( c:nCell == b, ;
{RGB( 66, 255, 236), RGB(209, 227, 248)}, ;
{RGB(220, 220, 220), RGB(220, 220, 220)} ) } } )
EndIf

DEFINE TBROWSE &cName OBJ oBrw AT nY, nX ALIAS ALIAS() WIDTH nW HEIGHT nH CELL ;
COLORS aColors
...


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



Пост N: 1873
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.06.18 21:39. Заголовок: gfilatov2002 Потеря..


gfilatov2002
Потерял в примере с базой колонок в Report колонку
 
BaseCols()

AAdd(aCols, oDTDOK:Clone() )
AAdd(aCols, oNRDOK:Clone() )
AAdd(aCols, oSMDOK:Clone() )
AAdd(aCols, oTXDOK:Clone() )
AAdd(aCols, oSMTAX:Clone() )
AAdd(aCols, oSMITG:Clone() )
AAdd(aCols, oID_E:Clone() )
AAdd(aCols, oFIRST:Clone() )
AAdd(aCols, oLAST:Clone() )
AAdd(aCols, oSTREET:Clone() )
AAdd(aCols, oCITY:Clone() )
AAdd(aCols, oSTATE:Clone() )

AAdd(aCols, oNAME:Clone() )
AAdd(aCols, oZIP:Clone() )
AAdd(aCols, oHIREDATE:Clone() )
AAdd(aCols, oAGE:Clone() )

MyUse( 'States' , 'STAT' )


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




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


SergKis пишет:

 цитата:
В примере работает


Подтверждаю - работает и Ваш пример, и контрольный пример

SergKis пишет:

 цитата:
в примере с базой колонок в Report колонку


Добавил.
Большое спасибо за помощь и терпение

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