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




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


moderator


Пост N: 1492
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.04.19 07:55. Заголовок: SergKis пишет: Ente..


SergKis пишет:

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


Никогда не пользовался в данном виде. Стрелками проще UP/DOWN.
Раз будет переменная, будет и выбор на любой вкус.

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



Пост N: 2474
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.04.19 08:48. Заголовок: Haz пишет Никогда не..


Haz пишет
 цитата:
Никогда не пользовался в данном виде. Стрелками проще UP/DOWN.


Такой режим существовал и не стоит его трогать. Для переменной, возможен вариант
 
METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, ;
...
If nKey != VK_RETURN .or. ( ! oCol:lCheckBoxNoReturn .or. !Empty(::lCheckBoxAllReturn) )
...
CLASS TSBrowse
DATA lCheckBoxAllReturn INIT .F.

.T. - включит для всех, остальные значения - работа от значения :lCheckBoxNoReturn в колонке

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


Пост N: 1493
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.04.19 09:12. Заголовок: SergKis пишет: Тако..


SergKis пишет:

 цитата:
Такой режим существовал и не стоит его трогать.


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

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




Пост N: 6278
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.04.19 21:56. Заголовок: Перешёл на новую вер..


Перешёл на новую версию МиниГуи.
Опять вылетает с ошибкой:
Error MGERROR/0 Control: unrecognized property 'BACKGROUNDCOLOR'. Program terminated
Called from MSGMINIGUIERROR(99) in module: h_error.prg
Called from SETPROPERTY(4126) in module: h_controlmisc.prg
Called from MYINITMENUBUTTON6RESAY(1037) in module: form_calc.prg


Строка 1037:
SetProperty( cForm, cObj, "BackgroundColor", aBackgroundColor )

Сделал как советовал Сергей:
#translate BACKGROUNDCOLOR => BACKCOLOR

Теперь перестало собираться вообще, ошибка при сборке:
form_calc.prg(170) Error E0030 Syntax error "syntax error at '@'"
form_calc.prg(183) Error E0030 Syntax error "syntax error at '@'"
form_calc.prg(553) Error E0030 Syntax error "syntax error at '@'"
form_calc.prg(687) Error E0030 Syntax error "syntax error at '@'"
form_calc.prg(732) Error E0030 Syntax error "syntax error at '@'"
form_calc.prg(882) Error E0030 Syntax error "syntax error at '@'"
form_calc.prg(1116) Error E0030 Syntax error "syntax error at '@'"
7 errors


Т.е. выдаёт ошибку на работающем коде
 
@ 230, 50 IMAGE Image_Warning PARENT Form_Calc ;
PICTURE 'Warning128' WIDTH 128 HEIGHT 128 ;
STRETCH TRANSPARENT BACKGROUNDCOLOR aBackColor INVISIBLE


Григорий, верни назад как ранее была обработка, как советовал Сергей !
h_controlmisc.prg line 4025 
CASE Arg3 == "BACKCOLOR" .OR. Arg3 == "GRADIENTOVER" .OR. Arg3 == "BACKGROUNDCOLOR"
добавь и пересобери libу

Вот это помогло !

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




Пост N: 6279
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.04.19 14:56. Заголовок: В новой версии опять..


В новой версии опять часто вылетает на такой ошибке:
Error BASE/1132 Переполнение массива: Неверное количество аргументов
Called from FILLDLG(341) in module: h_alert.prg
Called from (b)HMG_ALERT(161) in module: h_alert.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from _ACTIVATEWINDOW(1314) in module: h_windows.prg
Called from HMG_ALERT(161) in module: h_alert.prg


Если задана случайно или осталось после предыдущего использования:
_HMG_ModalDialogReturn := 2
и вызвать HMG_ALERT() только с одной кнопкой, то прога вылетает.
Можно туда (до строки 341) вставить проверку, чтобы не вылетало ?

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




Пост N: 1503
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.04.19 16:58. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно туда (до строки 341) вставить проверку


Поправил, конечно
Благодарю за сообщение

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




Пост N: 1504
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.05.19 09:55. Заголовок: Обновил сборку 19.04..


Обновил сборку 19.04 (Update 1) с учетом последних исправлений (в TsBrowse и др,)

Что нового:

 цитата:
* Updated: Added the sounds to the new Alert* family functions
to be similar to the system dialogs in Windows 7.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Basic\MAINDEMO_(SYNTAX_I))
* Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG:
- added processing of the new variable :lPostEditGo and correction
for the codeblock :bEditLog in the method PostEdit();
- improved handling of <Enter> key in a celled Checkbox item.
(see demo in folder \samples\Advanced\Tsb_BitMaps)
Suggested and contributed by Sergej Kiselev.
* Updated: RDDLeto client library by Rolf 'elch' Beckmann.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Advanced\LetoDBf)
* Updated: HbSQLite3 library:
- update for using SQLITE3 version 3.29.0dev (from 3.28.0).
Contributed by Grigory Filatov <gfilatov@inbox.ru>
* New: 'Read color by coordinates' sample.
Contributed by Verchenko Andrey <verchenkoag@gmail.com>
(see in folder \samples\Basic\GetColorRowCol)
* Updated: 'HMG Grid Demo' sample.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo.prg in folder \samples\Basic\Grid_Test)
* Updated: 'MiniGUI DataBase Utility' sample:
- added the closing of opened table;
- correction for modification of a structure of a table.
Contributed by Pierpaolo Martinello <pier.martinello[at]alice.it>
(see in folder \Utils\mgDBU)



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




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


gfilatov2002 пишет:

 цитата:
Обновил сборку 19.04 (Update 1) с учетом последних исправлений (в TsBrowse и др,)


Григорий, про это не забудь пожалуйста:
 
h_controlmisc.prg line 4025
CASE Arg3 == "BACKCOLOR" .OR. Arg3 == "GRADIENTOVER" .OR. Arg3 == "BACKGROUNDCOLOR"


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




Пост N: 1505
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.05.19 17:51. Заголовок: Andrey пишет: Arg3 ..


Andrey пишет:

 цитата:
Arg3 == "BACKGROUNDCOLOR"

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

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



Пост N: 2520
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.05.19 07:12. Заголовок: gfilatov2002 Надо у..


gfilatov2002
Надо убрать в h_checklabel.prg, похоже пересеклись по адресам
 
/*
IF _HMG_lOOPEnabled
Eval ( _HMG_bOnControlInit, k, mVar )
#ifdef _OBJECT_
ow := _WindowObj ( ParentFormHandle )
oc := _ControlObj( ControlHandle )
#endif
ENDIF
*/
Do_ControlEventProcedure ( bInit, k, ow, oc )

RETURN Nil


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



Пост N: 2524
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.05.19 10:30. Заголовок: PS это видно на прим..


PS
это видно на примере CheckLabel_2 SET OOP ON пропадают картинки

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




Пост N: 1506
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.05.19 10:47. Заголовок: SergKis пишет: Надо..


SergKis пишет:

 цитата:
Надо убрать в h_checklabel.prg


Сделал ремарку, конечно
Благодарю за помощь

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



Пост N: 2525
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.05.19 18:38. Заголовок: gfilatov2002 Давайт..


gfilatov2002
Давайте сделаем
 
METHOD Destroy() CLASS TSBrowse
...
вместо
If ::aSortBmp != Nil
DeleteObject ( ::aSortBmp[ 1 ] )
DeleteObject ( ::aSortBmp[ 2 ] )
EndIf

If ::aCheck != Nil
DeleteObject ( ::aCheck[ 1 ] )
DeleteObject ( ::aCheck[ 2 ] )
EndIf
так
If Valtype( ::aSortBmp ) == "A" .and. ! Empty( ::aSortBmp )
AEval( ::aSortBmp, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } )
EndIf

If Valtype( ::aCheck ) == "A" .and. ! Empty( ::aCheck )
AEval( ::aCheck, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } )
EndIf
Картинок можно больше складывать и на ходу менять по ситуевинам разным



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




Пост N: 1507
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.05.19 20:17. Заголовок: SergKis пишет: Дава..


SergKis пишет:

 цитата:
Давайте сделаем


Сделал, конечно
Благодарю за помощь

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



Пост N: 2535
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.05.19 12:32. Заголовок: gfilatov2002 Сейчас..


gfilatov2002
Сейчас в тсб :Destroy() отрабатывают не на все переменные DeleteObject(), загруженных по LoadImage() и их надо отрабатывать собственными обработчиками или складывать картинки в public переменные
Предлагаю добавить в тсб переменную и такой вид :Destroy()
 
DATA lDestroyAll AS LOGICAL INIT .F. // flag to destroy all bitmap created LoadImage(...)
...
METHOD Destroy() CLASS TSBrowse

Local oCol

Default ::lDestroy := .F.

If ::uBmpSel != Nil .and. ::lDestroy
DeleteObject ( ::uBmpSel )
EndIf

If ::hBrush != Nil // Alen Uzelac 13.09.2012
DeleteObject ( ::hBrush )
EndIf

If ::oCursor != Nil // GF 29.02.2016
::oCursor:End()
EndIf

If ::hBmpCursor != Nil
DeleteObject ( ::hBmpCursor )
EndIf

If Valtype( ::aSortBmp ) == "A" .and. ! Empty( ::aSortBmp )
AEval( ::aSortBmp, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } )
EndIf

If Valtype( ::aCheck ) == "A" .and. ! Empty( ::aCheck )
AEval( ::aCheck, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } )
EndIf

If Len( ::aColumns ) > 0
FOR EACH oCol IN ::aColumns
If Valtype( oCol:aCheck ) == "A"
AEval( oCol:aCheck, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } )
EndIf
If Valtype( oCol:aBitMaps ) == "A"
AEval( oCol:aBitMaps, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } )
EndIf
If ! ::lDestroyAll
LOOP
EndIf
If ! Empty( oCol:uBmpCell ) .and. ! HB_ISBLOCK( oCol:uBmpCell )
DeleteObject( oCol:uBmpCell )
EndIf
If ! Empty( oCol:uBmpHead ) .and. ! HB_ISBLOCK( oCol:uBmpHead )
DeleteObject( oCol:uBmpHead )
EndIf
If ! Empty( oCol:uBmpSpcHd ) .and. ! HB_ISBLOCK( oCol:uBmpSpcHd )
DeleteObject( oCol:uBmpSpcHd )
EndIf
If ! Empty( oCol:uBmpFoot ) .and. ! HB_ISBLOCK( oCol:uBmpFoot )
DeleteObject( oCol:uBmpFoot )
EndIf
Next
EndIf

If ::lDestroyAll
If Valtype( ::aSuperHead ) == "A" .and. ! Empty( ::aSuperHead )
AEval( ::aSuperHead, {|a| If( Empty(a[8]) .or. HB_ISBLOCK(a[8]), , DeleteObject( a[8] ) ) } )
EndIf
EndIf

If Valtype( ::aBitMaps ) == "A" .and. ! Empty( ::aBitMaps )
AEval( ::aBitMaps, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } )
EndIf
#ifndef _TSBFILTER7_
If ::lFilterMode
::lFilterMode := .F.
If Select( ::cAlias ) != 0
::SetFilter()
EndIf
EndIf
#endif
::hWnd := 0

Return 0


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




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


SergKis пишет:

 цитата:
Предлагаю добавить в тсб переменную и такой вид :Destroy()


Добавил предложенные изменения (очистка использованных ресурсов - это всегда важно)
Благодарю за помощь

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




Пост N: 1509
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 08.05.19 10:06. Заголовок: Обновил сборку 19.04..


Обновил сборку 19.04 (Update 2) с учетом последних исправлений и пожеланий (в TsBrowse и др,)

 цитата:
* Fixed: The missed 'Make New Folder' button in the function GetFolder() at
a specified initial path (introduced in the build 2.5.1).
Problem was reported by Jayadev <jayadev65/at/yahoo.com>.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Basic\GetFolder)
* Enhanced: The Image control supports now a changing of the BACKGROUNDCOLOR
property at runtime.
You can set this property with:
- function syntax:
SetProperty ( Form, Image, 'BackGroundColor', aColor )
- pseudo-OOP syntax:
FormName.ImageName.BackGroundColor := aRGBColor | nRGBColor
FormName.TabName(nPage).ImageName.BackGroundColor := aColor
Requested by Verchenko Andrey <verchenkoag@gmail.com>.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Basic\GetColorRowCol)
* Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG:
- minor modification in the method Destroy().
Contributed by Sergej Kiselev.
* New: 'Order Service System' sample: using MySQL through the TMySql class.
Test passed with MySQL version 5.1.44 at Windows 7.
Don't miss this very interesting example!
Contributed by Marcelo Neves <marcelo.souza.das.neves@gmail.com>
(see in folder \samples\Applications\OrderService)
* New: 'Little wizard for create the controls' utility.
Based upon a contribution of HMG user Dragan Cizmarevic.
Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru>
(see in folder \Utils\hmg_wizard)
* Updated: 'Data-Bound Controls' sample:
- redesigned the input window for a new look.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo2.prg in folder \samples\Basic\DATA_BOUND)
* Updated: 'Using <Tab> key for navigation into a celled Grid' sample.
Based upon a contribution of HMG user KDJ.
Revised by Grigory Filatov <gfilatov@inbox.ru>
(see demo2.prg in folder \samples\Basic\Grid_Test)



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




Пост N: 6281
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.05.19 11:06. Заголовок: Всем привет. Появила..


Всем привет.
Появилась ошибка в давно работающем модуле печати.
Т.е. в новой версии МиниГуи появилась ошибка.
Из таблицы вызываю форму печати через &cRun(cMenu, cForma, cAls2,..), там доп.окно MODAL Form_Dolg на которой в цикле вывод 10 значений:
          cObj := "GetBox_Dolg" + HB_NtoS(nI) 
@ nRowGet, nColGet GETBOX &cObj VALUE aSumma[nI] ;
PICTURE "@Z 99999.99" ;
.....
ON CHANGE { || DolgGetBoxChange(aSumma) }

SetProperty( ThisWindow.Name, cObj, "Cargo", nI )

Оставляю курсор на форме допустим на 3-ем GetBox_Dolg3 (в дальнейшем будет ошибка по нему)
и делаю печать. Все отлично, форма закрывается, ошибок нет.
При возврате в главную таблицу - появляется ОШИБКА:
Error MGERROR/0 Control: GetBox_Dolg3 Of Form_Dolg Not defined. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(99) in module: h_error.prg
Called from GETPROPERTY(4585) in module: h_controlmisc.prg
Called from (b)BUTTON_UPMENUTABLE(2271) in module: Tbrw_table.prg
Called from (b)METRO3BUTTON(51) in module: Metro3button.prg
Called from _DOCONTROLEVENTPROCEDURE(1865) in module: h_windows.prg
Called from EVENTS(1825) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1499) in module: h_windows.prg
Called from DOMETHOD(5155) in module: h_controlmisc.prg
Called from FORM_MYTABLE(246) in module: Tbrw_table.prg
Called from TBRWDOGOVOR(15) in module: Tbrw_1Run.prg
Called from (b)MAIN(643) in module: 10main.prg
Called from _DOCONTROLEVENTPROCEDURE(1865) in module: h_windows.prg
Called from EVENTS(1825) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1499) in module: h_windows.prg
Called from MAIN(688) in module: 10main.prg

Почему ?
Форма давно убита, ошибок по ней не было...

Если КУРСОР будет стоять в GetBox_Dolg8, то ошибка будет:
Error MGERROR/0 Control: GetBox_Dolg8 Of Form_Dolg Not defined. Program terminated.

Т.е. сохраняется АКТИВНОЕ местоположение КУРСОРА в GetBox.

Ошибка оказывается появилась давно.
В версии 18.11 ошибка тоже появляется. Ниже протестировать пока не удалось.
Очень срочно нужна помощь.... Что делать мне ?

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



Пост N: 2546
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.05.19 12:16. Заголовок: Andrey Стоит более ..


Andrey
Стоит более жесткая проверка в Set\GetProperty
 
IF .NOT. _IsControlDefined ( Arg2 , Arg1 )
MsgMiniGuiError ( "Control: " + Arg2 + " Of " + Arg1 + " Not defined." )
ENDIF

Понял из твоего сообщения, что Form_Dolg закрылась при возвращении на гл. таблицу, т.е. окна нет уже.
Возможно, в button_upmenutable есть обращение к контролу, которое раньше игнорировалось.

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




Пост N: 6282
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.05.19 12:28. Заголовок: SergKis пишет: Поня..


SergKis пишет:

 цитата:
Понял из твоего сообщения, что Form_Dolg закрылась при возвращении на гл. таблицу, т.е. окна нет уже.
Возможно, в button_upmenutable есть обращение к контролу, которое раньше игнорировалось.


Да !
Больше я НИГДЕ не обращаюсь к GetBox_Dolg3/4/5/6...
Это единственная форма с такими переменными.

Если КУРСОР будет стоять в GetBox_Dolg8, то ошибка будет:
Error MGERROR/0 Control: GetBox_Dolg8 Of Form_Dolg Not defined. Program terminated.

Как убрать ошибку ?

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



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


Andrey пишет [quote]`
Попробуй убрать
 
FUNCTION GetProperty ( Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 )
... line 8584
/* IF .NOT. _IsControlDefined ( Arg2 , Arg1 )
MsgMiniGuiError ( "Control: " + Arg2 + " Of " + Arg1 + " Not defined." )
ENDIF */

и пересобери MiniGui.lib

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




Пост N: 6283
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.05.19 14:03. Заголовок: SergKis пишет: FUNC..


SergKis пишет:

 цитата:
FUNCTION GetProperty ( Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 )
... line 8584
/* IF .NOT. _IsControlDefined ( Arg2 , Arg1 )
MsgMiniGuiError ( "Control: " + Arg2 + " Of " + Arg1 + " Not defined." )
ENDIF */


В исходнике C:\MiniGUI\SOURCE\h_controlmisc.prg строк всего 7183 ...
Где искать ?
Нашёл в строке 3814 - то ?

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




Пост N: 6284
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.05.19 14:33. Заголовок: Нашел в коде h_contr..


Нашел в коде h_controlmisc.prg, где у меня ошибка возникает:
#endif 
IF ( Upper( Arg2 ) == "VSCROLLBAR" .OR. Upper( Arg2 ) == "HSCROLLBAR" )
IF .NOT. _IsWindowDefined ( Arg1 )
MsgMiniGuiError ( "Window: " + Arg1 + " is not defined." )
ENDIF
ELSE
IF .NOT. _IsControlDefined ( Arg2 , Arg1 )
MsgMiniGuiError ( "Control: " + Arg2 + " Of " + Arg1 + " Not defined. 4585 !!!" )
ENDIF
ENDIF

За комментировал этот блок:
/* IF .NOT. _IsControlDefined ( Arg2 , Arg1 ) 
MsgMiniGuiError ( "Control: " + Arg2 + " Of " + Arg1 + " Not defined. 4585 !!!" )
ENDIF */

Теперь другая ошибка лезет:
Error MGERROR/0 Control Of Form_Table_Dog Not defined. Program terminated.
Called from MSGMINIGUIERROR(99) in module: h_error.prg
Called from GETPROPERTY(4410) in module: h_controlmisc.prg
Called from (b)BUTTON_UPMENUTABLE(2273) in module: Tbrw_table.prg
Called from (b)METRO3BUTTON(51) in module: Metro3button.prg
Called from _DOCONTROLEVENTPROCEDURE(1865) in module: h_windows.prg
Called from EVENTS(1828) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1499) in module: h_windows.prg
Called from DOMETHOD(5156) in module: h_controlmisc.prg
Called from FORM_MYTABLE(246) in module: Tbrw_table.prg
Called from TBRWDOGOVOR(15) in module: Tbrw_1Run.prg
Called from (b)MAIN(643) in module: 10main.prg
Called from _DOCONTROLEVENTPROCEDURE(1865) in module: h_windows.prg
Called from EVENTS(1828) in module: h_events.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1499) in module: h_windows.prg
Called from MAIN(688) in module: 10main.prg

Т.е. теперь потерялась форма Form_Table_Dog ?
Но она же есть на экране !

Вот функция (b)BUTTON_UPMENUTABLE():
      aObj2But[12,12] := { || SetProperty(cForm, This.Name, "Enabled", .F.) ,; 
DogListAbon(cForm, "nTable","","","") ,;
MsgDebug( "Проверка выхода", cForm ) ,;
MsgDebug( ThisWindow.Name, This.Name ) ,;
SetProperty(cForm, This.Name, "Enabled", .T.) ,;
Brw4Focus(nTable) } // строка 2273

Т.е. это вызов на кнопке - ACTION aObj2But[12,12]
Другие формы печати работают без ошибок, а где есть с GETBOX - то вылетает.
Такое впечатление, что после GETBOX портится - MsgDebug( ThisWindow.Name, This.Name ) ?

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



Пост N: 2549
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.05.19 16:22. Заголовок: Andrey Попробуй в O..


Andrey
Попробуй в ON RELEASE формы с GetBox поставить самым последним вызов _PopEventInfo()
для восстановления среды This, т.к. по сообщению об ошибке видно, что нет имени контрола

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



Пост N: 2550
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.05.19 16:35. Заголовок: PS Дело в том, что п..


PS
Дело в том, что при создании новой формы\окна информация о предыдущей форме\окне среды This теряется, что и происходит, т.е. нет гарантии, что она будет соответствовать. При Release окна среда This, которая была не восстанавливается, т.к. окна могут закрываться не в том порядке, как открывались.
Выход
1. Сохранять\восстанавливать среду This самому
2. Работать без This с конкретным именем окна (основное правило hmg)
3. Раскладывать последовательность действий на события и выполнять события по сообщениям. Для каждого события будет создана среда This окна или контрола, в зависимости как укажешь в сообщении. Пример у тебя есть

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




Пост N: 6285
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.05.19 18:24. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Попробуй в ON RELEASE формы с GetBox поставить самым последним вызов _PopEventInfo()
для восстановления среды This, т.к. по сообщению об ошибке видно, что нет имени контрола


Да, это помогло, только если работаешь только в программе !
Если окно Far или Мозилу переключаешь, то вылет с другой ошибкой:
Error BASE/1081 Неверный аргумент: +
Called from GETPROPERTY(4410) in module: h_controlmisc.prg
Called from (b)BUTTON_UPMENUTABLE(2273) in module: Tbrw_table.prg


Остановился на варианте 2 !
 
aObj2But[12,12] := { || SetProperty(cForm, This.Name, "Enabled", .F.) ,;
DogListAbon(cForm, "nTable","","","") ,;
SetProperty(cForm, "oBut_SpAbon", "Enabled", .T.) ,;
Brw4Focus(nTable) }

Вылет прекратился... Переделал везде где нашёл.
СПАСИБО ОГРОМНОЕ !
Не забыть бы это для других случаев...

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



Пост N: 2551
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.05.19 01:50. Заголовок: Andrey пишет Не забы..


Andrey пишет
 цитата:
Не забыть бы это для других случаев...


Первый вариант получше будет
 
aObj2But[12,12] := { |cw,cn| cw := ThisWindow.Name, cn := This.Name, ;
SetProperty(cw, cn, "Enabled", .F.) , ;
DogListAbon(cw, "nTable","","","") , ;
SetProperty(cw, cn, "Enabled", .T.) , ;
Brw4Focus(nTable) }


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



Пост N: 2552
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.05.19 10:11. Заголовок: Andrey пишет Останов..


Andrey пишет
 цитата:
Остановился на варианте 2 !


Если использовать функцию
 
*-----------------------------------------------------------------------------*
FUNCTION _ThisInfo( aThis )
*-----------------------------------------------------------------------------*

IF HB_ISARRAY( aThis )

_HMG_ThisFormIndex := aThis [1]
_HMG_ThisEventType := aThis [2]
_HMG_ThisType := aThis [3]
_HMG_ThisIndex := aThis [4]
_HMG_ThisFormName := aThis [5]
_HMG_ThisControlName := aThis [6]

RETURN NIL

ENDIF

RETURN { _HMG_ThisFormIndex, _HMG_ThisEventType, _HMG_ThisType, _HMG_ThisIndex, _HMG_ThisFormName, _HMG_ThisControlName }

то твой блок будет выглядеть так

aObj2But[12,12] := { |at| at := _ThisInfo(), ;
This.Name.Enabled := .F., ;
DogListAbon(cw, "nTable","","",""), ;
_ThisInfo(at), ;
This.Name.Enabled := .T., ;
Brw4Focus(nTable) }



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



Пост N: 2553
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.05.19 10:16. Заголовок: PS Упс. Магнитная бу..


PS
Упс. Магнитная буря.
 
aObj2But[12,12] := { |at| at := _ThisInfo(), ;
This.Enabled := .F., ;

DogListAbon(cw, "nTable","","",""), ;
_ThisInfo(at), ;
This.Enabled := .T., ;

Brw4Focus(nTable) }


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




Пост N: 6286
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.05.19 11:10. Заголовок: SergKis пишет: Перв..


SergKis пишет:

 цитата:
Первый вариант получше будет
aObj2But[12,12] := { |cw,cn| cw := ThisWindow.Name, cn := This.Name, ;
SetProperty(cw, cn, "Enabled", .F.) , ;
DogListAbon(cw, "nTable","","","") , ;
SetProperty(cw, cn, "Enabled", .T.) , ;
Brw4Focus(nTable) }


Да, это написание более понятней !
Все названия сохранены через переменные и при обнулении This уже путаницы не будет.
Спасибо !

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



Пост N: 2554
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.05.19 11:55. Заголовок: Andrey пишет Да, это..


Andrey пишет
 цитата:
Да, это написание более понятней !


Если исходить из правила hmg в блоке кода контрола ACTION, ON CHANGE и т.д., должна быть установлена и сохраняться среда переменных _THIS_..., то вариант с функцией более правильный, т.е.
 
aObj2But[12,12] := { |at| at := _ThisInfo(), This.Enabled := .F., ;
DogListAbon(ThisWindow.Name, "nTable","","",""), ;
_ThisInfo(at), This.Enabled := .T., ;
Brw4Focus(nTable) }


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



Пост N: 2555
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.05.19 12:10. Заголовок: PS И лучше использов..


PS
И лучше использовать ф-ю внутри своей DogListAbon(...)
LOCAL aThis := _ThisInfo()
...
ACTIVATE WINDOW ...

_ThisInfo(aThis)

RETURN

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




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


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

Постараюсь не затягивать с выпуском финальной сборки

Также после нескольких попыток удалось собрать Харбор для свежей версии MinGW 9.1

 цитата:
Harbour 3.2.0dev (r1904111533)
Copyright (c) 1999-2019, https://harbour.github.io/

Harbour Build Info
---------------------------
Version: Harbour 3.2.0dev (r1904111533)
Compiler: MinGW GNU C 9.1.1 (32-bit)
Platform: Windows 10 10.0
PCode version: 0.3
ChangeLog last entry: 2019-04-11 17:33 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
ChangeLog ID: ba87964f6754d037f86be597c07a08e02f4cb9e0
Built on: Jun 3 2019 14:19:21
Extra Harbour compiler options: -gc0
Extra C compiler options: -DHB_GC_AUTO -DHB_GUI -DHB_NO_TRACE
Build options: (Clipper 5.3b) (Clipper 5.x undoc)
---------------------------

и успешно протестировать работу библиотеки с этой версией Си-компилятора

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




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


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

Я отказался от поддержки бесплатного компилятора BCC 10.1 и старой сборки для xHarbour.com
вследствие нулевого интереса со стороны пользователей библиотеки.

Собрал новую сборку только для слкдующих компиляторов:
- BCC 5.5 (Базовый дистрибутив);
- MinGW 9.1 (32- и 64-бит).

Сборки для других Си-компиляторов будут выполняться только под заказ (на платной основе)

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




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


Опубликована новая сборка 19.06 для BCC 5.5.1 и компиляторов Harbour и xHarbour.

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

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

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

- MinGW 9.1.1 32-bit для Harbour 3.2.0dev; (есть в наличии)

- MinGW 8.2.0 64-bit для Harbour 3.4.0dev; (есть в наличии)

- MS VisualC 2017 32-bit для Harbour 3.2.0dev; (под заказ)

- MS VisualC 2017 64-bit для Harbour 3.2.0dev; (под заказ)

- Pelles C 8.0 32-bit для xHarbour b10244; (под заказ)

- Pelles C 9.0 64-bit для xHarbour b10244; (под заказ)

- Borland/Embarcadero C++ 7.4 (32-bit) для Harbour 3.2.0dev; (под заказ)

- Open Watcom C/C++ 2.0 (32-bit) для Harbour 3.2.0dev. (под заказ)

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

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




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


Григорий, спасибо большое за новую версию !

А что примеры - назначений событий на объекты формы не добавил ?
Это же самые понятные примеры для новичков.
Мне Сергей давно советовал делать так - через события, а я всё не понимал как это работает.
В Виндах всё же через события происходят, а большинство делает по старинке, через функции.
А в этих примерах всё просто демонстрируется...


Да и ещё один классный пример я высылал - универсальное затенение формы со всеми объектами, включая картинки.
FormDarken(1.2).7z
Код маленький и короткий, удобно очень встраивать к себе в программу другим программистам.

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




Пост N: 1513
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 26.06.19 09:51. Заголовок: Обновил сборку 19.06..


Обновил сборку 19.06 (Update 1) с учетом последних наработок

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

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

Что нового:

 цитата:
* Modified: Stability fix in the internal function _SetTextEditReadOnly().
You can modify a ReadOnly mode at runtime for the enabled controls
only. Problem was reported by Rafael Moran <webrmoran/at/yahoo.com>.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
* Enhanced: Added 'ON DBLCLICK' clause (optional) to LABEL and IMAGE controls.
NOTE: Don't register click and dblclick events on the same element:
it's impossible to distinguish single-click events from click
events that lead to a dblclick event.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
* New: Added the useful function HMG_IsEqualArr ( aData1, aData2 ) for
comparing of the two arrays.
Sample code:
aValue1 := Form.Grid1.Value
aValue2 := Form.Grid2.Value
lResult := HMG_IsEqualArr ( aValue1, aValue2 )
Requested by Paola Bruccoleri <pbruccoleri/at/adinet.com.uy>.
Based upon a contribution of Roberto Lopez <mail.box.hmg@gmail.com>
* New: Added the Harbour contrib library for 7zip compression.
This is a wrapper of 7-zip32.dll, another variant of the Open-Source
7Zip compression library. All calls are pointing to 7-zip32.dll,
thus the such dll must exist in a search path.
Based on an original work of Andi Jahja <andi.jahja/at/yahoo.co.id>.
(see source in folder \Source\SevenZip)
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demos in folder \samples\Advanced\sevenzip)
* New: 'Button Gradient Test' sample.
Based upon a contribution of MiniGUI user.
Revised by Grigory Filatov <gfilatov@inbox.ru>
(see in folder \samples\Basic\Button_Gradient)
* New: 'Weather-forecast' sample is based on the service site http://wttr.in.
Based upon a contribution of Vagelis Prodromidis.
Revised by Grigory Filatov <gfilatov@inbox.ru>
(see in folder \samples\Advanced\Weather-forecast)



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





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


gfilatov2002 пишет:

 цитата:
Обновил сборку 19.06 (Update 1) с учетом последних наработок



Уважаемый Григорий (повторная просьба) можно обновить хотя бы один из примеров
(типа \MiniGUI\SAMPLES\Applications\MultipleMail) чтобы была возможность отправлять
e-mail на mail.ru, yandex.ru и т.п. с учетом SSL. Сейчас ни один из примеров не работают ...

Заранее благодарен ...

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




Пост N: 1514
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 27.06.19 14:35. Заголовок: Alex_Cher пишет: о..


Alex_Cher пишет:

 цитата:
отправлять e-mail на mail.ru, yandex.ru и т.п. с учетом SSL


Эта тема уже обсуждалась на форуме здесь и здесь
Могу только добавить, что все требуемые библиотеки для поддержки SSL есть в поставке МиниГУИ: hbtip hbssl libeay32 ssleay32.

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



Пост N: 2612
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.07.19 13:13. Заголовок: gfilatov2002 Может ..


gfilatov2002
Может добавить функцию (по аналогии с HMG_GetFormControls()) ?
K примеру
 
FUNCTION HMG_GetForms( cTyp, lObj )
LOCAL i, o, lTyp, lHand, aNames:={}

cTyp := iif( HB_ISCHAR( cTyp ), Upper(cTyp), '' )
lHand := iif( HB_ISLOGICAL( lObj ), ! lObj, .F. )
lObj := _HMG_lOOPEnabled .and. ! empty(lObj)

FOR i := 1 TO Len( _HMG_aFormNames )

IF _HMG_aFormDeleted [ i ]; LOOP
ENDIF

IF ( lTyp := iif( Empty(cTyp), .T., _HMG_aFormType [ i ] $ cTyp ) )

If lHand
AAdd(aNames, _HMG_aFormHandles [ i ] )
#ifdef _OBJECT_
ElseIf lObj
o := do_obj( _HMG_aFormHandles [ i ] )
If HB_ISOBJECT( o )
AAdd(aNames, o)
EndIf
#endif
Else
AAdd(aNames, _HMG_aFormNames [ i ] )
EndIf

ENDIF

NEXT

RETURN aNames


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




Пост N: 1515
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.07.19 14:06. Заголовок: SergKis пишет: Може..


SergKis пишет:

 цитата:
Может добавить функцию


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

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




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


Адаптировал свежую версию библиотеки для работы с Microsoft Visual C++ 2019 (32- и 64-бит).

По шагам:

1) скачал полный дистрибутив MSVC 2019 (примерно 22 ГБ) и установил его.

2) сделал консольную версию MSVC 2019 из вышеуказанного дистрибутива (около 454 МБ).

3) собрал компилятор Харбор из сырцов с помощью консольной версии MSVC 2019.

4) собрал и успешно протестировал библиотеку Минигуи с этим компилятором

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

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




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


gfilatov2002 пишет:

 цитата:
Адаптировал свежую версию библиотеки для работы с Microsoft Visual C++ 2019 (32- и 64-бит)


Отличная новость !
Теперь надо будет нужные проги переводить на MSVC.
Надеюсь будет работать лучше, чем на BCC.

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




Пост N: 7059
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.07.19 13:47. Заголовок: Andrey пишет: Надею..


Andrey пишет:

 цитата:
Надеюсь будет работать лучше, чем на BCC.


скорее всего разницы и не заметишь

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




Пост N: 1517
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.07.19 14:22. Заголовок: Dima пишет: разницы..


Dima пишет:

 цитата:
разницы и не заметишь


Если сравнивать по скорости выполнения простых операций, то разница есть (см. ниже)

 цитата:

2019-07-02 14:17:48 Windows 10 10.0
Harbour 3.2.0dev (r1904111533) Borland C++ 5.5.1 (32-bit) x86
THREADS: 0
N_LOOPS: 1000000
[ T000: empty loop overhead ]...................................0.02
====================================================================
[ T001: x := L_C ]..............................................0.03
[ T002: x := L_N ]..............................................0.03
[ T003: x := L_D ]..............................................0.03
[ T004: x := S_C ]..............................................0.03
[ T005: x := S_N ]..............................................0.05
[ T006: x := S_D ]..............................................0.03
[ T007: x := M->M_C ]...........................................0.05
[ T008: x := M->M_N ]...........................................0.03
[ T009: x := M->M_D ]...........................................0.03
[ T010: x := M->P_C ]...........................................0.05
[ T011: x := M->P_N ]...........................................0.03
[ T012: x := M->P_D ]...........................................0.03
[ T013: x := F_C ]..............................................0.03
[ T014: x := F_N ]..............................................0.02
[ T015: x := F_D ]..............................................0.03
[ T016: x := o:Args ]...........................................0.09
[ T017: x := o[ 2 ] ]...........................................0.08
[ T018: Round( i / 1000, 2 ) ]..................................0.11
[ T019: Str( i / 1000 ) ].......................................0.31
[ T020: Val( s ) ]..............................................0.11
[ T021: Val( a [ i % 16 + 1 ] ) ]...............................0.22
[ T022: DToS( d - i % 10000 ) ].................................0.25
[ T023: Eval( {|| i % 16 } ) ]..................................0.19
[ T024: Eval( bc := {|| i % 16 } ) ]............................0.13
[ T025: Eval( {| x | x % 16 }, i ) ]............................0.17
[ T026: Eval( bc := {| x | x % 16 }, i ) ]......................0.13
[ T027: Eval( {| x | f1( x ) }, i ) ]...........................0.22
[ T028: Eval( bc := {| x | f1( x ) }, i ) ].....................0.19
[ T029: Eval( bc := &( "{| x | f1( x ) }" ), i ) ]..............0.19
[ T030: x := &( "f1(" + Str( i ) + ")" ) ]......................1.30
[ T031: bc := &( "{| x | f1( x ) }" ), Eval( bc, i ) ]..........1.59
[ T032: x := ValType( x ) + ValType( i ) ]......................0.20
[ T033: x := StrZero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.38
[ T034: x := a[ i % 16 + 1 ] == s ].............................0.17
[ T035: x := a[ i % 16 + 1 ] = s ]..............................0.19
[ T036: x := a[ i % 16 + 1 ] >= s ].............................0.17
[ T037: x := a[ i % 16 + 1 ] <= s ].............................0.19
[ T038: x := a[ i % 16 + 1 ] < s ]..............................0.19
[ T039: x := a[ i % 16 + 1 ] > s ]..............................0.17
[ T040: AScan( a, i % 16 ) ]....................................0.16
[ T041: AScan( a, {| x | x == i % 16 } ) ]......................1.36
[ T042: iif( i % 1000 == 0, a := {}, ), AAdd(a,{i,1,.T.,s, ]....0.44
[ T043: x := a ]................................................0.03
[ T044: x := {} ]...............................................0.06
[ T045: f0() ]..................................................0.03
[ T046: f1( i ) ]...............................................0.08
[ T047: f2( c[1...8] ) ]........................................0.05
[ T048: f2( c[1...40000] ) ]....................................0.05
[ T049: f2( @c[1...40000] ) ]...................................0.05
[ T050: f2( @c[1...40000] ), c2 := c ]..........................0.06
[ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.20
[ T052: f2( a ) ]...............................................0.06
[ T053: x := f4() ].............................................0.44
[ T054: x := f5() ].............................................0.11
[ T055: x := Space( 16 ) ]......................................0.08
[ T056: f_prv( c ) ]............................................0.17
====================================================================
[ total application time: ]....................................11.72
[ total real time: ]...........................................11.75


2019-07-02 14:18:48 Windows 10 10.0
Harbour 3.2.0dev (r1904111533) Microsoft Visual C++ 19.21.27702 (32-bit) x86
THREADS: 0
N_LOOPS: 1000000
[ T000: empty loop overhead ]...................................0.02
====================================================================
[ T001: x := L_C ]..............................................0.00
[ T002: x := L_N ]..............................................0.02
[ T003: x := L_D ]..............................................0.00
[ T004: x := S_C ]..............................................0.02
[ T005: x := S_N ]..............................................0.00
[ T006: x := S_D ]..............................................0.02
[ T007: x := M->M_C ]...........................................0.00
[ T008: x := M->M_N ]...........................................0.02
[ T009: x := M->M_D ]...........................................0.02
[ T010: x := M->P_C ]...........................................0.00
[ T011: x := M->P_N ]...........................................0.02
[ T012: x := M->P_D ]...........................................0.02
[ T013: x := F_C ]..............................................0.00
[ T014: x := F_N ]..............................................0.00
[ T015: x := F_D ]..............................................0.02
[ T016: x := o:Args ]...........................................0.05
[ T017: x := o[ 2 ] ]...........................................0.02
[ T018: Round( i / 1000, 2 ) ]..................................0.06
[ T019: Str( i / 1000 ) ].......................................0.14
[ T020: Val( s ) ]..............................................0.08
[ T021: Val( a [ i % 16 + 1 ] ) ]...............................0.13
[ T022: DToS( d - i % 10000 ) ].................................0.20
[ T023: Eval( {|| i % 16 } ) ]..................................0.11
[ T024: Eval( bc := {|| i % 16 } ) ]............................0.08
[ T025: Eval( {| x | x % 16 }, i ) ]............................0.09
[ T026: Eval( bc := {| x | x % 16 }, i ) ]......................0.06
[ T027: Eval( {| x | f1( x ) }, i ) ]...........................0.09
[ T028: Eval( bc := {| x | f1( x ) }, i ) ].....................0.08
[ T029: Eval( bc := &( "{| x | f1( x ) }" ), i ) ]..............0.08
[ T030: x := &( "f1(" + Str( i ) + ")" ) ]......................0.69
[ T031: bc := &( "{| x | f1( x ) }" ), Eval( bc, i ) ]..........0.75
[ T032: x := ValType( x ) + ValType( i ) ]......................0.09
[ T033: x := StrZero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.19
[ T034: x := a[ i % 16 + 1 ] == s ].............................0.08
[ T035: x := a[ i % 16 + 1 ] = s ]..............................0.09
[ T036: x := a[ i % 16 + 1 ] >= s ].............................0.08
[ T037: x := a[ i % 16 + 1 ] <= s ].............................0.09
[ T038: x := a[ i % 16 + 1 ] < s ]..............................0.09
[ T039: x := a[ i % 16 + 1 ] > s ]..............................0.08
[ T040: AScan( a, i % 16 ) ]....................................0.13
[ T041: AScan( a, {| x | x == i % 16 } ) ]......................0.83
[ T042: iif( i % 1000 == 0, a := {}, ), AAdd(a,{i,1,.T.,s, ]....0.27
[ T043: x := a ]................................................0.00
[ T044: x := {} ]...............................................0.03
[ T045: f0() ]..................................................0.02
[ T046: f1( i ) ]...............................................0.03
[ T047: f2( c[1...8] ) ]........................................0.02
[ T048: f2( c[1...40000] ) ]....................................0.03
[ T049: f2( @c[1...40000] ) ]...................................0.02
[ T050: f2( @c[1...40000] ), c2 := c ]..........................0.03
[ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.11
[ T052: f2( a ) ]...............................................0.03
[ T053: x := f4() ].............................................0.13
[ T054: x := f5() ].............................................0.06
[ T055: x := Space( 16 ) ]......................................0.05
[ T056: f_prv( c ) ]............................................0.08
====================================================================
[ total application time: ].....................................6.34
[ total real time: ]............................................6.35



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



Пост N: 2615
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.07.19 16:48. Заголовок: gfilatov2002 Добавь..


gfilatov2002
Добавьте в CLASS TWndData
 
ACCESS Title INLINE GetWindowText ( ::nHandle )
ASSIGN Title( cVal ) INLINE SetWindowText ( ::nHandle, cVal )
ACCESS Enabled INLINE IsWindowEnabled( ::nHandle )
ASSIGN Enabled( xVal ) INLINE iif ( Empty( xVal ), DisableWindow ( ::nHandle ), EnableWindow ( ::nHandle ) )


Пример для проверки на базе BASIC\ChildAsModal Скрытый текст


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




Пост N: 1518
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.07.19 17:32. Заголовок: SergKis пишет: Доба..


SergKis пишет:

 цитата:
Добавьте в CLASS TWndData


Спасибо, добавил

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




Пост N: 1519
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.07.19 09:45. Заголовок: Обновил сборку 19.06..


Обновил сборку 19.06 (Update 2) с учетом последних наработок

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

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

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



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



Пост N: 2627
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.07.19 09:47. Заголовок: gfilatov2002 Думает..


gfilatov2002
Думается функция _hmg_OnHideFocusManagement ( i ) для окна STANDART работает не точно.
Подправленный пример (был выше) тут https://TransFiles.ru/b0lgp
Нажатие кнопок на окнах CHILD и MODAL работает нормально, а на окне STANDART на передний план выводится окно MAIN и потом окно AlertInf(...). Если, в ф-ии _DO_BTN_( oBtn ), убрать строку (выделено цветом)Скрытый текст

окно MAIN так и останется на переднем плане в фокусе.

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




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


SergKis пишет:

 цитата:
на окне STANDART на передний план выводится окно MAIN


Да, это верно

Но это плата за то, что у этого окна нет родительского окна-хозяина (в отличие от CHILD).

SergKis пишет:

 цитата:
Если, в ф-ии _DO_BTN_( oBtn ), убрать строку


Поэтому и требуется предложенный Вами костыль.

Как это победить по-другому, я не нашел...

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



Пост N: 2630
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.07.19 13:05. Заголовок: gfilatov2002 пишет К..


gfilatov2002 пишет
 цитата:
Как это победить по-другому, я не нашел...


Получается при первом STANDART надо убирать MAIN в hide (костыль в придачу), тогда, вроде, похоже на правду
Скрытый текст


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




Пост N: 6337
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.07.19 17:11. Заголовок: Заметил такую неприя..


Заметил такую неприятность.
В функциях пользуюсь определением имени формы
   ?  ThisWindow.Name, _HMG_ThisFormName, cStaticGlobalForm 
возвращает:
Form_Main Form_Main Form_AYC

cStaticGlobalForm - делаю определение сразу под созданием окна.
Т.е. должно всегда возвращаться Form_AYC !!!
Значит - ThisWindow.Name, _HMG_ThisFormName нельзя использовать ?

Правда у меня на форме Form_Main включён таймер на каждую секунду (для тестирования).
Может он влияет на псевдо-функции ThisWindow.Name, _HMG_ThisFormName ?

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



Пост N: 2643
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.19 18:03. Заголовок: Andrey пишет Значит ..


Andrey пишет
 цитата:
Значит - ThisWindow.Name, _HMG_ThisFormName нельзя использовать ?


Перечитай http://clipper.borda.ru/?1-1-0-00000521-000-280-0-1563229132
Лучшее решение, по мне, функция aThis := _ThisInfo(), работаешь как с Alias(), сохраняешь\восстанавливаешь

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



Пост N: 2644
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.19 18:08. Заголовок: PS т.е. в TIMER блок..


PS
т.е. в TIMER блоке на Form_Main ставишь
aThis := _ThisInfo() // в начале
...
_ThisInfo(aThis) // в конце

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



Пост N: 2645
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.19 18:11. Заголовок: PPS Наврал, на TIMER..


PPS
Наврал, на TIMER не получится, там ставится среда This для Form_Main, sory

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




Пост N: 6338
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.07.19 18:24. Заголовок: Понял, что с TIMER н..


Понял, что с TIMER нужно аккуратно работать.
Всё таки решение через STATIC переменную типа cStaticThisForm более простое.
SergKis пишет:

 цитата:
Лучшее решение, по мне, функция aThis := _ThisInfo(), работаешь как с Alias(), сохраняешь\восстанавливаешь


Буду иметь ввиду. Уже кое где применил.

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



Пост N: 2646
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.19 18:30. Заголовок: Andrey пишет Всё так..


Andrey пишет
 цитата:
Всё таки решение через STATIC переменную типа cStaticThisForm более простое.


Теряется универсальность. Надо каждое окно делать в отдельном prg файле, иначе для каждого окна свою переменную, что фактически означает работу по имени окна, т.е. Form_Main.Btn1.Value и т.д.

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


Пост N: 1536
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 16.07.19 19:38. Заголовок: SergKis пишет: Теря..


SergKis пишет:

 цитата:
Теряется универсальность. Надо каждое окно делать в отдельном prg файле, иначе для каждого окна свою переменную, что фактически означает работу по имени окна, т.е. Form_Main.Btn1.Value и т.д.


hash-массив не поможет в этом случае?

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




Пост N: 6339
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.07.19 21:45. Заголовок: PSP пишет: hash-мас..


PSP пишет:

 цитата:
hash-массив не поможет в этом случае?


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

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



Пост N: 2647
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.19 22:21. Заголовок: PSP пишет Как это м..


PSP пишет [quote]`
Как это может помочь при плавающем cForm
 
WHILE _IsWindowDefined( cForm := cFrm+'_'+hb_ntos(++nFrm) )
ENDDO


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



Пост N: 2648
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.07.19 22:24. Заголовок: Упс, промахнулся по ..


Упс, промахнулся по клавише.
PSP пишет
 цитата:
hash-массив не поможет в этом случае?



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



Пост N: 2649
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.07.19 07:26. Заголовок: Andrey пишет Правда ..


Andrey пишет
 цитата:
Правда у меня на форме Form_Main включён таймер на каждую секунду (для тестирования).
Может он влияет на псевдо-функции ThisWindow.Name, _HMG_ThisFormName ?


Предлагаю такую схему для TIMER на Form_Main
 
Выполнение основного тела блока кода перенести на событие приложения, т.е.
FUNCTION Main(...)
...
SetsEnv()

WITH OBJECT oDlu2Pixel()
:Event( 1, {|| AEval(_ThisInfo(), {|xv,nv| _LogFile(.T., nv, cValToChar(xv)) }), ;
SetProperty('Form_Main', 'Timer_1', 'Enabled', .T.) })
END WITH
...
DEFINE WINDOW Form_Main AT nY, nX WIDTH nW HEIGHT nH ;
...
DEFINE TIMER Timer_1 INTERVAL 2000 ACTION ( This.Enabled := .F., oDlu2Pixel():Post(1) )

END WINDOW
...

Работа блока кода Timer_1 будет оч. короткой, среда This восстановлена после него, какая была.
В установленном событии oDlu2Pixel():Event(1) This среда не важна, должна быть.

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



Пост N: 2650
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.07.19 07:40. Заголовок: PS Точнее так WI..


PS
Точнее так
 
WITH OBJECT oDlu2Pixel()
:Event( 1, {|| SetProperty('Form_Main', 'Timer_1', 'Enabled', .F.) ;
AEval(_ThisInfo(), {|xv,nv| _LogFile(.T., nv, cValToChar(xv)) }), ;
SetProperty('Form_Main', 'Timer_1', 'Enabled', .T.) })
END WITH
...
DEFINE WINDOW Form_Main AT nY, nX WIDTH nW HEIGHT nH ;
...
DEFINE TIMER Timer_1 INTERVAL 2000 ACTION oDlu2Pixel():Post(1) )


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



Пост N: 2655
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.07.19 10:18. Заголовок: gfilatov2002 #xcom..


gfilatov2002
 
#xcommand DEFINE TBROWSE <name> OBJ <obrw> ;
...
[ ON INIT <bInit> ] ;
...
=>;
<obrw> :=_DefineTBrowse (<"name"> , ;
...
[ <.lAutoCol.> ], [ \{<aColSel>\} ], ;
<bInit> );;
// так лучше, по мне, чем <{bInit}>
with object <obrw>
...

Это видно на примере https://TransFiles.ru/uw4af

В моем варианте (исправленном ch) работают блоки кода
 
*-----------------------------------------------------------------------------*
STAT FUNC Brw_Age( nY, nX, nW, nH )
*-----------------------------------------------------------------------------*
LOCAL cBrw := This.E0.Cargo
LOCAL aFont := { GetFontHandle('FontBold'), GetFontHandle('FontBold') }
LOCAL aClr := {}
LOCAL aDatos := AgeSelect(.T.) // Init value
LOCAL oBrw
LOCAL bInit := {|ob| Brw_Init(ob) } , ;
bEnd := {|ob| Brw_End (ob) }

...


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



Пост N: 2658
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.07.19 13:15. Заголовок: gfilatov2002 Так все..


gfilatov2002
Так все решается
 
#xcommand DEFINE TBROWSE <name> ;
...
#xcommand DEFINE TBROWSE <name> OBJ <obrw> ;
...
[ <.lAutoCol.> ], [ \{<aColSel>\} ], ;
iif( Valtype( <bInit> ) == 'B', <bInit>, <{bInit}> ) );;

with object <obrw>
...
и
#command END TBROWSE ;
[ ON END <bInit> ] ;
=>;
_EndTBrowse ( iif( Valtype( <bInit> ) == 'B', <bInit>, <{bInit}> ) );;
end with


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




Пост N: 1523
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.07.19 13:53. Заголовок: SergKis пишет: В мо..


SergKis пишет:

 цитата:
В моем варианте (исправленном ch) работают блоки кода


Это решается и без изменений в заголовке tsbrowse.ch
Попробуйте передавать эти блоки кода таким образом

 цитата:
DEFINE TBROWSE &cBrw OBJ oBrw AT nY, nX WIDTH nW HEIGHT nH CELL ;
COLORS aColor ON INIT Eval( bInit )

...
END TBROWSE ON END Eval( bEnd )



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



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


gfilatov2002 пишет
 цитата:
Попробуйте передавать эти блоки кода таким образом


Вопрос стоит передаваемых параметров в блок кода.
В таком виде Eval(bInit), Eval(bEnd) параметры ( ob переменная ) не передаются {|ob| Brw_...(ob) }

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



Пост N: 2660
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.07.19 14:48. Заголовок: PS Можно и без парам..


PS
Можно и без параметров отработать, для блоков кода создается среда This тек. TsBrowse
 
*-----------------------------------------------------------------------------*
STAT FUNC Brw_Age( nY, nX, nW, nH )
*-----------------------------------------------------------------------------*
...
LOCAL bInit := {|| Brw_Age_Init() }
LOCAL bEnd := {|| Brw_Age_End () }

*-----------------------------------------------------------------------------*
STATIC FUNC Brw_Age_Init()
*-----------------------------------------------------------------------------*

WITH OBJECT (This.Object):Tsb
...
*-----------------------------------------------------------------------------*
STATIC FUNC Brw_Age_End()
*-----------------------------------------------------------------------------*

WITH OBJECT (This.Object):Tsb
...
и
DEFINE TBROWSE &cBrw OBJ oBrw AT nY, nX WIDTH nW HEIGHT nH CELL ;
COLORS aColor ON INIT Eval( bInit )
...
END TBROWSE ON END Eval( bEnd )


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




Пост N: 1524
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.07.19 17:42. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно и без параметров отработать


Да, так работает

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



Пост N: 2661
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.19 08:15. Заголовок: gfilatov2002 пишет Д..


gfilatov2002 пишет
 цитата:
Да, так работает


Вариант поинтересней, более "правильный"
 
...
DEFINE WINDOW &cWnd AT 0,0 WIDTH 980 HEIGHT 650 ;
...
WITH OBJECT This.Object
:StatusBar:Say(MiniGUIVersion(), 3)
:Event( 1, {|ow,ky,ap| AgeReport(ow, ky, ap) } )
:Event( 91, {|oc | Brw_Age_Init(oc:Tsb) } )
:Event( 92, {|oc | Brw_Age_End (oc:Tsb) } )

:Event( 99, {|ow | ow:Release() } )
END WITH
...
*-----------------------------------------------------------------------------*
STATIC FUNC Brw_Age_Init( oBrw )
*-----------------------------------------------------------------------------*
DEFAULT oBrw := (This.Object):Tsb

WITH OBJECT oBrw
...
*-----------------------------------------------------------------------------*
STATIC FUNC Brw_Age_End( oBrw )
*-----------------------------------------------------------------------------*
DEFAULT oBrw := (This.Object):Tsb

WITH OBJECT oBrw
...
DEFINE TBROWSE &cBrw OBJ oBrw AT nY, nX WIDTH nW HEIGHT nH CELL ;
COLORS aColor ON INIT _wPost( 91, This.Index )
DO EVENTS
...
END TBROWSE ON END _wPost( 92, This.Index )
DO EVENTS

bInit и bEnd можно убрать везде

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



Пост N: 2662
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.19 08:48. Заголовок: PS Расширить настрой..


PS
Расширить настройку TsBrowse можно так
 
WITH OBJECT This.Object
:StatusBar:Say(MiniGUIVersion(), 3)
:Event( 1, {|ow,ky,ap| AgeReport(ow, ky, ap) } )
:Event( 91, {|oc | Brw_Age_Init(oc:Tsb) } )
:Event( 92, {|oc | Brw_Age_End (oc:Tsb) } )
:Event( 93, {|oc | Brw_Age_Body(oc:Tsb) } )

:Event( 99, {|ow | ow:Release() } )
END WITH
...
*-----------------------------------------------------------------------------*
STATIC FUNC Brw_Age_Body( oBrw )
*-----------------------------------------------------------------------------*

WITH OBJECT oBrw

// эти строки перенесены из функции Brw_Age_Init(...) для примера
:nHeightCell += 5
:nHeightHead := :nHeightCell + 2
:nHeightFoot := :nHeightCell + 2

END WITH

RETURN Nil
...
DEFINE TBROWSE &cBrw OBJ oBrw AT nY, nX WIDTH nW HEIGHT nH CELL ;
COLORS aColor ON INIT _wPost( 91, This.Index )
DO EVENTS

:SetArrayTo(aArray, aFont, aHead, aSize, aFoot, aPict, aAlign, aName)

AEval(:aColumns, {|oc| oc:lEmptyValToChar := .T., oc:lFixLite := .T. })

_wSend( 93, GetControlIndex( :cControlName, :cParentWnd ) )

If lAdj
:AdjColumns()
EndIf

:ResetVScroll( .T. )
:oHScroll:SetRange(0,0)

END TBROWSE ON END _wPost( 92, This.Index )
DO EVENTS


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



Пост N: 2663
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.19 10:45. Заголовок: gfilatov2002 Не рабо..


gfilatov2002
Не работает This.ToolBar_1.Caption
Правка
 
*-----------------------------------------------------------------------------*
FUNCTION _GetCaption ( ControlName , ParentForm )
*-----------------------------------------------------------------------------*
LOCAL cRetVal As String
LOCAL i

IF ( i := GetControlIndex ( ControlName , ParentForm ) ) > 0

IF _HMG_aControlType [ i ] == 'TOOLBAR' .OR. _HMG_aControlType [ i ] == 'TOOLBUTTON' .OR. ;
_HMG_aControlType [ i ] == 'MENU' .OR. _HMG_aControlType [ i ] == 'RADIOGROUP'
...
RETURN cRetVal

Пример https://TransFiles.ru/8cp1d

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



Пост N: 2664
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.07.19 11:21. Заголовок: gfilatov2002 Может ..


gfilatov2002
Может сделать в Tsb, чтобы не задумываться где какой элемент в :aSuperHead, так
 
METHOD cTextSupHdGet( nCol, aSuperHead, cText ) CLASS TSBrowse

LOCAL xDef := '', xVal
Default nCol := 1, aSuperHead := ::aSuperHead

If nCol > 0 .and. nCol <= Len( aSuperHead )
xVal := ::GetValProp( aSuperHead[ nCol, 3 ], xDef, nCol )
If HB_ISCHAR(cText)
::aSuperHead[ nCol, 3 ] := cText
EndIf

EndIf

If xVal == Nil; xVal := xDef
EndIf

RETURN xVal

Используем вместо
:aSuperHead[1][3] := This.ToolBar_1.Caption + ' ' + cCapt
так
:cTextSupHdGet( 1, , This.ToolBar_1.Caption + ' ' + cCapt )

Аналогично можно сделать в методах
METHOD hFontSupHdGet( nCol, aSuperHead, uFont ) CLASS TSBrowse
METHOD nForeSupHdGet( nCol, aSuperHead, nClrText ) CLASS TSBrowse
METHOD nBackSupHdGet( nCol, aSuperHead, nClrPane ) CLASS TSBrowse
METHOD nAlignSupHdGet( nCol, lHAlign, aSuperHead, nHAlign ) CLASS TSBrowse
или аналогичные методы с названием Set вместо Get

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




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


SergKis пишет:

 цитата:
Не работает This.ToolBar_1.Caption
Правка


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

SergKis пишет:

 цитата:
аналогичные методы с названием Set вместо Get


Выбрал этот вариант
Благодарю за подсказку

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



Пост N: 2665
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.07.19 13:34. Заголовок: gfilatov2002 Добави..


gfilatov2002
Добавил в пример (выше) сохранение позиции курсора при повторном нажатии на одну и ту же кнопку (с перемещением курсора на др. страницы тсб). :GotoRec(...) не работает с массивом, может кому интересно будет
Тут Скрытый текст


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



Пост N: 2666
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.07.19 13:41. Заголовок: PS Строку ..


PS
Строку
 
:nCell := nCol
// :Refresh()

If nPos > 1

убрать можно, оставил скорее по "привычке"

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



Пост N: 2677
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.07.19 19:53. Заголовок: gfilatov2002 Можно ..


gfilatov2002
Можно чуть поправить HMG_Alert(...)
 
DEFINE WINDOW &cForm WIDTH 0 HEIGHT 0 TITLE cTitle MODAL NOSIZE BACKCOLOR aBackColor ;
ON INTERACTIVECLOSE ( lPressButton .OR. lClosable ) ;
ON RELEASE iif( ! lPressButton .AND. lClosable, _HMG_ModalDialogReturn := 0, NIL )

FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable )

END WINDOW

// ACTIVATE WINDOW &cForm ON INIT FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable )
ACTIVATE WINDOW &cForm

Разницы нет, а достраивать доп. контролами удобнее в такой комбинации строк.

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




Пост N: 1527
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.07.19 20:24. Заголовок: SergKis пишет: чуть..


SergKis пишет:

 цитата:
чуть поправить HMG_Alert(...)


Сделал, конечно.
Благодарю за предложение

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



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


gfilatov2002
Не нашел функций в lib для использования в блоках кода для работы с RGB.
Приходится все время таскать ToRGB( aColor ), n2RGB( nColor ).
Может сделать что то такое
 
*-----------------------------------------------------------------------------*
FUNCTION HMG_RGB2n( p1, p2, p3 )
*-----------------------------------------------------------------------------*

If HB_ISARRAY ( p1 ); RETURN RGB( p1[1], p1[2], p1[3] )
ElseIf HB_ISNUMERIC( p2 ); RETURN RGB( p1 , p2 , p3 )
EndIf

RETURN p1

*-----------------------------------------------------------------------------*
FUNCTION HMG_n2RGB( nColor )
*-----------------------------------------------------------------------------*
RETURN { GetRed( nColor ), GetGreen( nColor ), GetBlue( nColor ) }


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




Пост N: 1528
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.19 13:42. Заголовок: SergKis пишет: ToRG..


SergKis пишет:

 цитата:
ToRGB( aColor ), n2RGB( nColor )


Псевдо-функция nRGB2Arr( nColor ) уже определена (и активно используется) в библиотеке и примерах.

 цитата:
SetProperty( cFormName, "BackColor", nRGB2Arr( GetSysColor( COLOR_WINDOW ) ) )


А предложенная функция HMG_RGB2n() - это просто обертка для псевдо-функции RGB().

Если что-то неправильно понял - аргументируйте...


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



Пост N: 2679
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.07.19 14:49. Заголовок: gfilatov2002 пишет а..


gfilatov2002 пишет
 цитата:
аргументируйте...


 
LOCAL aClr := {}

AAdd( aClr, { CLR_FOCUSB, { |a,b,c| iif( c:nCell == b, ; // CLR_FOCUSB
{ HMG_RGB2n( 66, 255, 236), HMG_RGB2n(209, 227, 248) }, ;
{ HMG_RGB2n(220, 220, 220), HMG_RGB2n(220, 220, 220) } ) } } )
AAdd( aClr, { CLR_HEADF , {|| HMG_RGB2n( YELLOW ) } } ) // 3 , текста шапки таблицы
AAdd( aClr, { CLR_HEADB , {|| { HMG_RGB2n(40, 122, 237), ;
HMG_RGB2n(48, 29, 26) } } } ) // 4 , фона шапка таблицы

oBrw := Brw2Arr(cBrw, nY, nX, nW, nH, aDatos, aClr, aFont)


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




Пост N: 1529
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.19 15:03. Заголовок: SergKis пишет: HMG_..


SergKis пишет:

 цитата:
HMG_RGB2n( YELLOW )


Кстати, еще есть такая псевдо-функция
ArrayRGB_TO_COLORREF(aRGB)

SergKis пишет:

 цитата:
HMG_RGB2n(40, 122, 237)


Проще
RGB(40, 122, 237)


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



Пост N: 2680
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.07.19 15:09. Заголовок: gfilatov2002 пишет R..


gfilatov2002 пишет
 цитата:
RGB(40, 122, 237)


Использование псевдо функции в блоке кода приведет к сообщению
Error: Unresolved external '_HB_FUN_RGB' referenced ...


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



Пост N: 2681
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.07.19 15:14. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
Проще
RGB(40, 122, 237)


Мои названия RGB2n(...) и n2RGB(...) добавил HMG_... для общей схемы.
Может и не надо добавлять.

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




Пост N: 1530
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.19 15:17. Заголовок: SergKis пишет: Испо..


SergKis пишет:

 цитата:
Использование псевдо функции в блоке кода приведет к сообщению


Нет, такая ошибка не возникла в следующем коде:
   AAdd( aClr, { 6, { |a,b,c| iif( c:nCell == b,                ;     // CLR_FOCUSB 
{ RGB( 66, 255, 236), RGB(209, 227, 248) }, ;
{ RGB(220, 220, 220), RGB(220, 220, 220) } ) } } )

AAdd( aClr, { CLR_HEADF , {|| ArrayRGB_TO_COLORREF( YELLOW ) } } ) // 3 , текста шапки таблицы
AAdd( aClr, { CLR_HEADB , {|| { RGB(40, 122, 237), ;
RGB(48, 29, 26) } } } ) // 4 , фона шапка таблицы

oBrw := Brw2Arr(cBrw, nY, nX, nW, nH, aDatos, aClr, aFont)
Пример отработал нормально с этими кодо-блоками

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



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


gfilatov2002 пишет
 цитата:
Пример отработал нормально с этими кодо-блоками


Да. Отработал
Мой косяк, переносил текст и перенес RGB( { 40, 122, 237 } ), RGB( YELLOW ) с лишними скобками {}
Но ArrayRGB_TO_COLORREF( YELLOW ) не вспомнишь как пишется.
Останусь на своих RGB2n(...), n2RGB(...)
Спасибо.

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




Пост N: 6359
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.07.19 17:35. Заголовок: SergKis пишет: Но A..


SergKis пишет:

 цитата:
Но ArrayRGB_TO_COLORREF( YELLOW ) не вспомнишь как пишется.
Останусь на своих RGB2n(...), n2RGB(...)


Да это точно такую функцию и не вспомнишь.... да и эту тоже nRGB2Arr()
Я тоже замучился из проекта в проект таскать эти ToRgb()...
Сергей правильно предложил HMG_RGB2n() и HMG_n2RGB() .
Можно и сократить до MG_RGB2n() и MG_n2RGB()
Лишь бы были и не таскать из проекта в проект.

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



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


gfilatov2002 пишет
 цитата:
аргументируйте...


Небольшой аргумент в пользу функций (не псевдо) - это хранение цветов в файлах ini, xml или использование hb_macroBlock(...) для создания блоков кода.

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




Пост N: 1531
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.19 20:43. Заголовок: Andrey пишет: Серге..


Andrey пишет:

 цитата:
Сергей правильно предложил HMG_RGB2n() и HMG_n2RGB()


С учетом обсуждения (и поддержки) добавил эти макросы в заголовок i_pseudofunc.ch
Теперь код ниже

 цитата:
    LOCAL aClr   := {}  

AAdd( aClr, { CLR_FOCUSB, { |a,b,c| iif( c:nCell == b, ; // CLR_FOCUSB
{ HMG_RGB2n( 66, 255, 236), HMG_RGB2n(209, 227, 248) }, ;
{ HMG_RGB2n(220, 220, 220), HMG_RGB2n(220, 220, 220) } ) } } )
AAdd( aClr, { CLR_HEADF , {|| HMG_RGB2n( YELLOW ) } } ) // 3 , текста шапки таблицы
AAdd( aClr, { CLR_HEADB , {|| { HMG_RGB2n(40, 122, 237), ;
HMG_RGB2n(48, 29, 26) } } } ) // 4 , фона шапка таблицы

oBrw := Brw2Arr(cBrw, nY, nX, nW, nH, aDatos, aClr, aFont)


отработал без проблем

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



Пост N: 2684
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.19 08:21. Заголовок: gfilatov2002 Можно ..


gfilatov2002
Можно изменить в HMG_Alert() строки
 
STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable )
...
This.Closable := lClosable

This.&( aBut[ Max( 1, Min( nLenaOp, _HMG_ModalDialogReturn ) ) ] ).SetFocus()

This.Center()

IF lClosable
ON KEY ESCAPE OF &cForm ACTION ( _HMG_ModalDialogReturn := 0, lPressButton := .T., ThisWindow.Release() )
ENDIF

IF HB_ISBLOCK( bBlock )
Do_WindowEventProcedure( bBlock, This.Index, 'WINDOW_ACTIVATE' )
ENDIF

IF _IsControlDefined( "oTimer", cForm )
This.oTimer.Enabled := .T.
ENDIF
...


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




Пост N: 1532
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.07.19 10:06. Заголовок: SergKis пишет: изме..


SergKis пишет:

 цитата:
изменить в HMG_Alert() строки


Сделал, конечно

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



Пост N: 2685
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.19 13:59. Заголовок: gfilatov2002 Предла..


gfilatov2002
Предлагаю добавить метод в TsColumn (при работе с dbf заполняются :nFieldTyp, :nFieldLen на колонки)
 
METHOD ToWidth( uLen, nKfc ) CLASS TSColumn
LOCAL nWidth, nLen, cTyp, cChr := 'B'

Default nKfc := 1

If ! empty( ::cPicture ) .and. HB_ISCHAR( ::cPicture )
If empty( uLen )
cChr := ::cPicture
If Left(cChr, 2) == '@K'
cChr := AllTrim(Substr(cChr, 3))
EndIf
nLen := Len( cChr )
Else
If '9' $ ::cPicture; cChr := '9'
ElseIf 'X' $ ::cPicture; cChr := 'X'
EndIf
nLen := uLen
cChr := Replicate(cChr, nLen)
EndIf
Else
cTyp := ::cFieldTyp
nLen := iif( empty(uLen), ::nFieldLen, uLen )

If cTyp $ 'CML'; cChr := 'B'
ElseIf cTyp == 'ND'; cChr := '9'
EndIf

nLen := iif( empty(nLen), 7, nLen )
cChr := Replicate(cChr, nLen)
EndIf

nWidth := GetTextWidth( 0, cChr, ::hFont )
nWidth := Int( nWidth * nKfc )

RETURN nWidth

Применять так к примеру
with object oBrw
For i := 1 To Len( :aColumns )
oc := :aColumns[ i ]
cp := oc:cName
xv := :GetValue(cp)
cn := '_' + cp
s := iif( oc:nFieldLen > 40, 40, Nil )
nl := oc:ToWidth( s )
@ y, x LABEL &cn ;
VALUE oc:cHeading ;
WIDTH l HEIGHT h ;
VCENTERALIGN
@ y, x+l+20 GETBOX &cp ;
VALUE xv ;
WIDTH nl HEIGHT h ;
PICTURE :cPictureGet(, i)
y += This.&(cn).Height + 20
Next
end with


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




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


SergKis пишет:

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


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

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




Пост N: 6360
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.07.19 15:06. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предлагаю добавить метод в TsColumn (при работе с dbf заполняются :nFieldTyp, :nFieldLen на колонки)



А как код будет выглядеть ?

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



Пост N: 2686
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.19 15:57. Заголовок: Andrey пишет А как к..


Andrey пишет
 цитата:
А как код будет выглядеть ?


SergKis пишет
 цитата:

Применять так к примеру
with object oBrw
For i := 1 To Len( :aColumns )
oc := :aColumns[ i ]
cp := oc:cName
xv := :GetValue(cp)
cn := '_' + cp
s := iif( oc:nFieldLen > 40, 40, Nil )
nl := oc:ToWidth( s )

@ y, x LABEL &cn ;
VALUE oc:cHeading ;
WIDTH l HEIGHT h ;
VCENTERALIGN
@ y, x+l+20 GETBOX &cp ;
VALUE xv ;
WIDTH nl HEIGHT h ;
PICTURE :cPictureGet(, i)
y += This.&(cn).Height + 20
Next
end with



или
:LoadFields(.F.)
nKfc := 0.8 // коэффициент для коррекции nWidth полученной при расчете, если надо такая поправка
AEval( :aColumns, {|oc| oc:nWidth := oc:ToWidth(iif( oc:nFieldLen > 40, 40, Nil ), nKfc) } )

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



Пост N: 2694
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.07.19 14:57. Заголовок: gfilatov2002 Предла..


gfilatov2002
Предлагаю такой HMG_Alert(), добавил параметр cFont, для исп. вместо DlgFont. Тогда можно применять Alert...() ф-ии с DlgFont. Скрытый текст

Т.е. в примере можно сделать
 
FUNCTION Main()
...
SET DIALOGBOX CENTER OF PARENT
SET CENTERWINDOW RELATIVE PARENT
...
DEFINE FONT FontBold FONTNAME _HMG_DefaultFontName SIZE _HMG_DefaultFontSize BOLD
DEFINE FONT AgeCard FONTNAME "Verdana" SIZE 12 BOLD
DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 12
...
STATIC FUNC AgeCard( oWnd, oBrw, oCnl )
...
LOCAL cFont := 'AgeCard'

If ! empty( oBrw:GetValue('AGE') ) .or. ! empty( oBrw:GetValue('FIRST') )
HMG_Alert( cMsg, aButt, cTitl, , cBmp, , aClr, bInit, .T., cFont )
EndIf
...
STATIC FUNC Age_CardSave( oBrw, lSave )
...
If empty( lSave ) .and. ThisWindow.Cargo
// lMsg := MsgYesNo('Save card - '+cValToChar(This.AGE.Value )+CRLF+ ;
lMsg := AlertYesNo('Save card - '+cValToChar(This.AGE.Value )+CRLF+ ;
cValToChar(This.FIRST.Value)+CRLF+ ;
cValToChar(This.LAST.Value ), ;
'NR. '+hb_ntos(oBrw:nAt)+ ' RECNO ' + cValToChar(nRec))
EndIf
...


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




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


SergKis пишет:

 цитата:
Предлагаю такой HMG_Alert(), добавил параметр cFont


Принято

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



Пост N: 2695
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.07.19 10:51. Заголовок: gfilatov2002 Можете..


gfilatov2002
Можете пояснить зачем удаляется фонт из списка, если в контролах он не создается (не увидел) ?
 
*-----------------------------------------------------------------------------*
FUNCTION _EraseControl ( i, p )
*-----------------------------------------------------------------------------*
LOCAL hWnd
LOCAL mVar
LOCAL t, x

x := _HMG_aControlFontHandle

IF ISNUMERIC ( x ) .AND. !Empty ( x ) .AND. !( x == GetFontHandle ( "DlgFont" ) )
DeleteObject ( x )
ENDIF
...

такая штука удаляет фонт, если он не DlgFont, созданный по DEFINE FONT ... и использованный в контроле.

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




Пост N: 1540
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.07.19 11:12. Заголовок: SergKis пишет: така..


SergKis пишет:

 цитата:
такая штука удаляет фонт, если он не DlgFont, созданный по DEFINE FONT ... и использованный в контроле


Да, все верно.
В момент удаления мы ведь не знаем название шрифта, а только указатель (handle) на него.

Сейчас этот фрагмент кода выглядит так

 цитата:
 
FUNCTION _EraseControl ( i , p )
...
IF ISNUMERIC ( x ) .AND. !Empty ( x ) .AND. ;
!( x == GetFontHandle ( "DlgFont" ) ) .AND. !( x == GetFontHandle ( _HMG_ActiveDialogFontName ) )
DeleteObject ( x )
ENDIF



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



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


gfilatov2002 пишет
 цитата:
В момент удаления мы ведь не знаем название шрифта, а только указатель (handle) на него.


Зачем удалять фонт, созданный (сохранен в базе _HMG_aControlType == 'FONT') по DEFINE FONT ... ?
Его удаляем по RELEASE FONT, а в контролах, если не найден в базе фонтов, используем _HMG_DefaultFontName, или фонт установленный на окно. Или я что то упускаю ?

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



Пост N: 2697
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.07.19 11:23. Заголовок: PS Ведь все фонты по..


PS
Ведь все фонты по DEFINE FONT ... цепляются к _FORMNAME_ 'Main' и там живут

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



Пост N: 2698
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.07.19 11:38. Заголовок: PPS Если фонтов нет ..


PPS
Если фонтов нет в списке DEFINE FONT ..., работают С ф-ии _SetFont(...), _SetFontHandle(...), а они не используют базу. По мне, команды удаления фонтов в _EraseControl() не нужны.

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



Пост N: 2699
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.07.19 11:44. Заголовок: SergKis пишет По мне..


SergKis пишет
 цитата:
По мне, команды удаления фонтов в _EraseControl() не нужны


Уточню, если они находятся в секции 'Main' - удалять не нужно.

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




Пост N: 1541
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.07.19 12:03. Заголовок: SergKis пишет: Заче..


SergKis пишет:

 цитата:
Зачем удалять фонт, созданный (сохранен в базе _HMG_aControlType == 'FONT') по DEFINE FONT ... ?


Поправил этот фрагмент кода с учетом Вашего предложения:

 цитата:
 
*-----------------------------------------------------------------------------*
FUNCTION _EraseControl ( i, p )
*-----------------------------------------------------------------------------*
LOCAL hWnd
LOCAL mVar
LOCAL t, x

x := _HMG_aControlFontHandle [ i ]

IF ISNUMERIC ( x ) .AND. !Empty ( x ) .AND. AScan( _HMG_aControlHandles, x ) == 0
DeleteObject ( x )
ENDIF

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

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




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


Подготовил 2-й релиз-кандидат для новой сборки 19.08 со следующим списком изменений:
Скрытый текст

Хотя эта сборка работает стабильно, выпуск финальной версии отложен по финансовым причинам

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



Пост N: 2701
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.08.19 11:28. Заголовок: gfilatov2002 Может ..


gfilatov2002
Может добавить для фонта
 
PROCEDURE _DefineFont( FontName, fName, fSize, bold, italic, underline, strikeout, nAngle, default, charset )
...
_HMG_aControlWidth [k] := GetTextWidth ( 0, 'B', FontHandle )
_HMG_aControlHeight [k] := GetTextHeight( 0, 'B', FontHandle )
...
FUNCTION GetFontParam( FontHandle )
...
aFontAttr := { _HMG_DefaultFontName, _HMG_DefaultFontSize, .F., .F., .F., .F., 0, 0, 0 }
...
iif( Len( _HMG_aControlFontAttributes[ i ] ) == 5, _HMG_aControlFontAttributes[ i, FONT_ATTR_ANGLE ], 0 ), ;
_HMG_aControlWidth [ i ], _HMG_aControlHeight [ i ] }

ENDIF
...
И псевдо функции
FUNC GetFontWidth( FontName, nLen )
RETUNR GetFontParam( GetFontHandle( FontName ) )[8] * nLen
FUNC GetFontHeight( FontName )
RETUNR GetFontParam( GetFontHandle( FontName ) )[9]


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



Пост N: 2702
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.08.19 11:44. Заголовок: PS Может покороче на..


PS
Может покороче назвать FontWidth(...), FontHeight(...) ?

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




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


SergKis пишет:

 цитата:
добавить для фонта


Добавил конечно, но оставил названия псевдо-функций с Get (так понятнее).
Благодарю за помощь

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



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


gfilatov2002
Предложение добавить
 
*-----------------------------------------------------------------------------*
PROCEDURE _PopEventInfo( n )
*-----------------------------------------------------------------------------*
LOCAL l

IF ( l := Len ( _HMG_aEventInfo ) ) > 0

DEFAULT n := 0

IF n > 0 .and. n <= l; l := n
ENDIF

_HMG_ThisFormIndex := _HMG_aEventInfo [l] [1]
_HMG_ThisEventType := _HMG_aEventInfo [l] [2]
_HMG_ThisType := _HMG_aEventInfo [l] [3]
_HMG_ThisIndex := _HMG_aEventInfo [l] [4]
_HMG_ThisFormName := _HMG_aEventInfo [l] [5]
_HMG_ThisControlName := _HMG_aEventInfo [l] [6]

IF n == 0

ASize ( _HMG_aEventInfo , l - 1 )
ENDIF


ELSE
...

Тогда в блоке кода на окно, контрол можно ставить среду This запомненную ранее, к примеру, на TIMER другого окна
ACTION {|| _PopEventInfo( Len( _HMG_aEventInfo ) - 1 ), ... }

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




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


SergKis пишет:

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

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

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



Пост N: 2707
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.08.19 10:55. Заголовок: gfilatov2002 пишет Д..


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


Большой опасности нет (не удаляем из стека, применяя n), на мой взгляд, но понимать, что происходит, конечно надо.
Вариантов больше получается, к примеру
1
define window ... (сохраняет среду), если сделать
_PushEventInfo
...
end window (восстановит среду, но останется доп. установка)
action window ...
_PopEventInfo() (окончательно восстановит среду до работы окна)
This среда будет стоять для окна (в блоках контролов среда ставится\восстанавливается для тек. окна)
2
В Timer (к примеру, на Main окне) поставив This среду по n (который можно определить по разному) можно анализировать ThisWindow.Name и даже This.Name, что бы проделывать разные операции в зависимости от имен. Завершение блока кода Timer восстановит из последнего элемента _HMG_aEventInfo, т.е. то что было при входе.

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




Пост N: 1547
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.08.19 11:01. Заголовок: SergKis пишет: пони..


SergKis пишет:

 цитата:
понимать, что происходит, конечно надо


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

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



Пост N: 2709
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.19 10:03. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправил LoadFields() для работы с др. alias Скрытый текст

Пример для проверки https://TransFiles.ru/1z51g

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



Пост N: 2710
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.19 11:06. Заголовок: PS Для работы с MEMI..


PS
Для работы с MEMIO (пропустил, не доделал), надо
 
REQUEST DBFCDX, DBFFPT, DBFNTX, HB_MEMIO

*-----------------------------------------------------------------------------*
FUNCTION Main( cPath )
*-----------------------------------------------------------------------------*
LOCAL nY, nX, nW, nH, hSpl, oBrw
LOCAL cWnd := 'wMain', cAlias, aStru
LOCAL cOut := 'OUT'
LOCAL cTmp := 'mem:out'

...

и Compile.bat
call ..\..\..\batch\compile.bat demo /l hbmemio %1 %2 %3 %4 %5 %6 %7 %8 %9

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



Пост N: 2711
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.19 13:47. Заголовок: PPS Если сделать изм..


PPS
Если сделать изменения, то можно менять поля в dbf из которого выборка
 
:LoadFields(.F., aColSel, cOut, aNamSel)

aColSel := {"FIRST" , "LAST" , "STATE" , "AGE" , "ZIP", "MARRIED" }

:LoadFields(.T., aColSel, cAls)

FOR nI := 1 TO Len( aColSel )
:GetColumn(aColSel[ nI ]):bPrevEdit := {|| (cAls)->( RLock() ) }
IF 'MARR' $ aColSel[ nI ]
:GetColumn(aColSel[ nI ]):bPostEdit := {|| (cAls)->MARRIED := ! (cAls)->MARRIED, ;
(cAls)->( dbUnLock() ) }
ELSE
:GetColumn(aColSel[ nI ]):bPostEdit := {|| (cAls)->( dbUnLock() ) }
ENDIF
NEXT

AEval(:aColumns, {|oc,nc| oc:lEmptyValToChar := .T., ;
oc:lFixLite := .T. })


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




Пост N: 1548
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.08.19 18:55. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправил LoadFields() для работы с др. alias


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

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



Пост N: 2712
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.19 10:17. Заголовок: gfilatov2002 Андрей..


gfilatov2002
Андрей сказал, что у меня в примере простая карточка, без вызова справочника.
Исправил пример, добавив имитацию вызова справочников у 2х GetBox кнопками
Так же сделал на этих GetBox F5 и DublClick для вызова справочника + ToolTip информация
Пример тут https://TransFiles.ru/ocym6

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



Пост N: 2713
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.19 11:02. Заголовок: PS Небольшая бяка в ..


PS
Небольшая бяка в примере. Если карточка изменена, фокус на GetBox и нажимаем Esc, то запрос на сохранение карточки, сделанный на AletYesNo(...), улетает в координаты 0,0. Правка такая
 
STATIC FUNC Age_CardSave( oBrw, lSave )
...
LOCAL nRec := ATail(aRec)
LOCAL cFocu := This.FocusedControl


If empty( lSave ) .and. ThisWindow.Cargo
If ! empty(cFocu) .and. ! 'BUTT' $ This.&(cFocu).Type
This.Btn_04.SetFocus
DO EVENTS
EndIf

// lMsg := MsgYesNo('Save card - '+cValToChar(This.AGE.Value )+CRLF+ ;
lMsg := AlertYesNo('Save card - '+cValToChar(This.AGE.Value )+CRLF+ ;
...


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




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


SergKis пишет:

 цитата:
Исправил пример, добавив имитацию вызова справочников у 2х GetBox кнопками


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

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



Пост N: 2714
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.19 15:11. Заголовок: gfilatov2002 Если д..


gfilatov2002
Если добавить методы в
CLASS TGetData INHERIT TCnlData 
...
METHOD SetKeyEvent ( nKey, bKey, lCtrl, lShift, lAlt ) INLINE ::Get:SetKeyEvent(nKey, bKey, lCtrl, lShift, lAlt)
METHOD SetDublClick( bBlock ) INLINE ::Get:SetKeyEvent( , bBlock )

METHOD Destroy() INLINE ::oGetBox := ::Super:Destroy()
...
то удобней писать
(This.&(o:GetName).Object):SetKeyEvent ( VK_F5, hb_MacroBlock(o:BtnAction) )
(This.&(o:GetName).Object):SetDublClick( hb_MacroBlock(o:BtnAction) )


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




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


SergKis пишет:

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


Добавил эти методы, но, конечно, переименовал SetDublClick в SetDoubleClick
Благодарю за помощь

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



Пост N: 2716
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.08.19 20:58. Заголовок: gfilatov2002 Мелочь..


gfilatov2002
Мелочь, но поправьте
 
#translate System.ClientWidth => ( GetDesktopWidth () - GetBorderWidth () )
#translate System.ClientHeight => ( GetDesktopHeight() - GetBorderHeight() - GetTaskBarHeight() )


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




Пост N: 1551
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.08.19 21:17. Заголовок: SergKis пишет: попр..


SergKis пишет:

 цитата:
поправьте


OK

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



Пост N: 2717
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.08.19 10:47. Заголовок: gfilatov2002 Для пр..


gfilatov2002
Для простого определения принадлежности колонки к алиасу добавил
 
CLASS TSColumn
...
DATA cError // Bad valid error message
DATA cArea INIT "" // Alias name of column

DATA cField INIT "" // Field Name of column
...
METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel ) CLASS TSBrowse
...
ATail( ::aColumns ):cArea := cAlias

ATail( ::aColumns ):cData := cAlias + "->" + FieldName( nE )
...
METHOD LoadRelated( cAlias, lEditable, aNames, aHeaders ) CLASS TSBrowse
...
ATail( ::aColumns ):cAlias := cAlias
ATail( ::aColumns ):cData := cAlias + "->" + FieldName( nE )
ATail( ::aColumns ):cField := cAlias + "->" + FieldName( nE )
ATail( ::aColumns ):cName := cAlias + "->" + ( cAlias )->( FieldName( nE ) )

ATail( ::aColumns ):cArea := cAlias
ATail( ::aColumns ):cFieldTyp := aStru[ nE, 2 ]
ATail( ::aColumns ):nFieldLen := aStru[ nE, 3 ]
ATail( ::aColumns ):nFieldDec := aStru[ nE, 4 ]


Next
...


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




Пост N: 1552
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.08.19 11:07. Заголовок: SergKis пишет: опре..


SergKis пишет:

 цитата:
определения принадлежности колонки к алиасу добавил


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

 цитата:
ATail( ::aColumns ):cAlias := cAlias


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

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



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


gfilatov2002 пишет
 цитата:
требуется дублировать это значение в еще одну переменную cArea


oBrw:cAlias опр. рабочую область тсб,
oCol:cAlias задействован в работе блока кода, для массива то же срабатывает.
oCol:cArea позволит связать колонку с полем в базе, не меняя "старые" алгоритмы, в том числе и при тсб массива.
Выделять из oCol:cData алиас можно, но не очень удобно.
Код (выделен)
 
:LoadFields(.T., aColSel, cAls)

FOR nI := 1 TO Len( aColSel )
:GetColumn(aColSel[ nI ]):bPrevEdit := {|| (cAls)->( RLock() ) }
:GetColumn(aColSel[ nI ]):bPostEdit := {|| (cAls)->( dbUnLock() ) }

NEXT

:GetColumn("MARRIED" ):bEncode := {|lx| ! lx }

Можно, в дальнейшем, убрать в тсб, где cAls брать из oCol:cArea, т.к. сейчас при LOCK свойстве тсб блокируется \ разблокируется запись oBrw:cAlias

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




Пост N: 1553
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.08.19 14:02. Заголовок: SergKis пишет: oCol..


SergKis пишет:

 цитата:
oCol:cArea позволит связать колонку с полем в базе


Понятно, благодарю за разъяснение
SergKis пишет:

 цитата:
Можно, в дальнейшем, убрать в тсб, где cAls брать из oCol:cArea


Тогда ожидаю такую модификацию, если она потребуется...

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



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


gfilatov2002 пишет
 цитата:
Тогда ожидаю такую модификацию


Сделал так
 
CLASS TSBrowse FROM TControl
...
DATA lRecLockArea AS LOGICAL INIT .F. // flag to lock record for oCol:cArea alias

...
METHOD PostEdit( uTemp, nCol, bValid ) CLASS TSBrowse
...
Local lLockArea, cArea

...
bAddRec := If( ! Empty( ::bAddRec ), ::bAddRec, {|| ( cAlias )->( dbAppend() ), ! NetErr() } )

cArea := ::aColumns[ nCol ]:cArea

lLockArea := ::lRecLockArea .and. ! Empty( cArea ) .and. Select( cArea ) > 0

If bValid != Nil
...
If ::lIsDbf

If Eval( If( ! ::lAppendMode, bRecLock, bAddRec ), uTemp )

If lLockArea
If ( cArea )->( RLock() )
::bDataEval( ::aColumns[ nCol ], uTemp, nCol )
EndIf
Else
::bDataEval( ::aColumns[ nCol ], uTemp, nCol )
EndIf

SysRefresh()
...
if !("SQL" $ ::cDriver)
( cAlias )->( DbUnLock() )
endif

If lLockArea
( cArea )->( dbUnLock() )
( cArea )->( DbSkip( 0 ) )
EndIf

If lAppend
...

Пример проверки тут https://TransFiles.ru/xe6ti

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




Пост N: 1554
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 07.08.19 14:53. Заголовок: SergKis пишет: Сдел..


SergKis пишет:

 цитата:
Сделал так


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

SergKis пишет:

 цитата:
Пример проверки


Работает отлично
Я только добавил

 цитата:
:GetColumn("MARRIED" ):nEditMove := DT_DONT_MOVE


чтобы не убегал курсор после нажатия Enter на этом поле

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



Пост N: 2723
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.08.19 11:41. Заголовок: gfilatov2002 Возмож..


gfilatov2002
Возможно, будет интересно.
Подключил в примерах Tsb_ReportAge и Tsb_SetFieldsTo работу с LetoDbf, работают с одной базой Employee.dbf.
Сервер из каталога SAMPLES\Advanced\LetoDbf\SERVER должен быть запущен.
Запуск в обоих случаях Demo.exe *
На сервер переписывается таблица Employee.dbf, если первым запустить Tsb_ReportAge, то на сервере в таблице будет 1000 записей, если Tsb_SetFieldsTo, то 11000
Tsb_ReportAge тут https://TransFiles.ru/etjm9
Tsb_SetFieldsTo тут https://TransFiles.ru/l8587

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




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


SergKis пишет:

 цитата:
Подключил в примерах Tsb_ReportAge и Tsb_SetFieldsTo работу с LetoDbf


Спасибо!
Да, примеры работают с сервером при запуске
demo.exe *
Заметил, что в Tsb_SetFieldsTo количество отобранных записей в подвале правильно обновляется только со второй попытки...

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



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


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


Добавьте прорисовку подвала
 
oBrw:GetColumn("NN"):cFooting := hb_ntos( (cOut)->( OrdKeyCount() ) )
oBrw:DrawFooters()



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



Пост N: 2727
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.08.19 23:40. Заголовок: gfilatov2002 Модифи..


gfilatov2002
Модифицировал пример, добавив справочник STATE.DBF, колонки в тсб набираются смешано с 3х алиасов.
Работает запуск и с сервером тоже
Пример тут https://TransFiles.ru/xuqt2

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



Пост N: 2728
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.08.19 10:50. Заголовок: gfilatov2002 Предла..


gfilatov2002
Предлагаю добавить в тсб
 
METHOD IsEditable( nCol ) INLINE ::lCellBrw .and. ::aColumns[ nCol ]:lEdit .and. ;
( ::aColumns[ nCol ]:bWhen == Nil .or. Eval( ::aColumns[ nCol ]:bWhen, Self ) )

ACCESS IsEdit INLINE ! Empty( ::aColumns[ ::nCell ]:oEdit )

...
использовать, к примеру, вместо
// ON KEY ESCAPE ACTION iif( Empty(oBrw:aColumns[ oBrw:nCell ]:oEdit), _wPost(99), )
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, , _wPost(99) )




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



Пост N: 2729
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.08.19 11:57. Заголовок: PS Добавить параметр..


PS
Добавить параметр
 
METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse
...
If ValType( ::aHeaders ) == "A" .and. ! Empty( ::aHeaders ) .and. n <= Len( ::aHeaders )
cHeading := ::aHeaders[ n ]
Else
cHeading := ::Proper( ( cAlias )->( Field( nE ) ) )
EndIf

If HB_ISARRAY( aHeadSel ) .and. Len( aHeadSel ) > 0 .and. n <= Len( aHeadSel ) .and. aHeadSel[ n ] != Nil
cHeading := aHeadSel[ n ]
EndIf

...
тогда можно так делать ( удобнее )
:LoadFields(.F., {"REC" }, cOut , {"IDN"}, {"Id"})
:LoadFields(.F., {"STATE"}, cAls )
:LoadFields(.F., {"NAME" }, cAlsS, , {"State name"})
:LoadFields(.T., {"CITY", "STREET", "ZIP", "FIRST", "LAST", "AGE", "MARRIED" }, cAls)

AEval(:aColumns, {|oc,nc| oc:lEmptyValToChar := .T., ;
oc:lFixLite := .T. })

// :GetColumn("IDN" ):cHeading := "Id"
// :GetColumn("NAME"):cHeading := "State name"

...


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




Пост N: 1557
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.08.19 12:18. Заголовок: SergKis пишет: Моди..


SergKis пишет:

 цитата:
Модифицировал пример, добавив справочник STATE.DBF


ОК

SergKis пишет:

 цитата:
Предлагаю добавить в тсб


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

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




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


SergKis пишет:

 цитата:
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, , _wPost(99) )


Записал эту строку так:

 цитата:
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, oBrw:PostMsg( WM_KEYDOWN, VK_ESCAPE, 0 ), _wPost(99) )


Работает нормально

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



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


gfilatov2002 пишет
 цитата:
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, oBrw:PostMsg( WM_KEYDOWN, VK_ESCAPE, 0 ), _wPost(99)


Может добавить
 
METHOD PostMsg( nMsg, wParam, lParam ) INLINE ::Super:PostMsg( hb_defaultValue(nMsg, WM_KEYDOWN), wParam, hb_defaultValue(lParam, 0) )

Мелочь, но тогда короче писать можно (клавишных сообщений исп. достаточно)
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, oBrw:PostMsg(, VK_ESCAPE), _wPost(99) )



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




Пост N: 1559
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.08.19 17:23. Заголовок: SergKis пишет: Може..


SergKis пишет:

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


Нет, на мой взгляд такой синтаксис

 цитата:
oBrw:PostMsg( WM_KEYDOWN, VK_ESCAPE, 0 )


нагляднее
В противном случае, надо помнить, что сообщение WM_KEYDOWN используется по умолчанию (и не забыть поставить запятую перед VK_ESCAPE),
но ведь есть и другие сообщения

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



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


gfilatov2002 пишет
 цитата:
такой синтаксис нагляднее


Согласен
Хотелось покороче писать, к примеру, методами
oBrw:PostKeyDown( VK_ESCAPE )
oBrw:PostKeyUp( VK_ESCAPE )
но короче не получается, а вот последний параметр можно не задавать.
oBrw:PostMsg( WM_KEYDOWN, VK_ESCAPE, 0 )

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




Пост N: 6389
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.08.19 12:28. Заголовок: Всем привет ! Вопрос..


Всем привет !
Вопрос возник, а почему в ресурсах МиниГуи нет иконки самого МиниГуи - официальной ?
Примеры тестовые делать можно было бы с официальной иконкой, а то и не знаешь какой вариант использовать.

И второй вопрос, почему нет в ядре МиниГуи функции _ShowContextMenu() ?
Замучился таскать её в проекты, частенько использую для тестовых проектов.
Григорий, добавь пожалуйста эту функцию в ядро.

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




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


Andrey пишет:

 цитата:
Вопрос возник, а почему в ресурсах МиниГуи нет иконки самого МиниГуи - официальной ?


Спасибо за вопрос
Дело в том, что в разное время были разные иконки, а сейчас - такая, как на моей аватарке.
Поэтому проще просто поместить эту иконку в папку с примером и подключать ее из файла, а не из ресурсов

Andrey пишет:

 цитата:
второй вопрос, почему нет в ядре МиниГуи функции _ShowContextMenu() ?


Потому, что эта функция не доработана до конца (в частности, режим центрирования).


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




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


gfilatov2002 пишет:

 цитата:
Потому, что эта функция не доработана до конца (в частности, режим центрирования).


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

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




Пост N: 1561
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.08.19 20:14. Заголовок: Andrey пишет: включ..


Andrey пишет:

 цитата:
включите, нужна очень


Добавил эту функцию в новую сборку 19.08

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




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


gfilatov2002 пишет:

 цитата:
Добавил эту функцию в новую сборку 19.08


Спасибо !

Выслал примеры по Tsbrowse с карточкой + блокировка записей на почту.

Вопрос возник по Tab.
Показываю окно с Tab карточкой юзеру.
На медленных компах видно как этот Tab дергается, т.е. на Tab вывожу объекты Label и GetBox.
Там их много, порядка 150 объектов. Вот и дергается Tab.
Можно как то это "дерганье" убрать ?

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



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


gfilatov2002
Предложение по растяжке предпоследней колонки показа, если последняя не помещается в размер тсб, при горизонтальном скроллинге колонок.
 
CLASS TSBrowse FROM TControl
...
DATA lAdjColumn AS LOGICAL INIT .F. // column expands to flush table window right

...
METHOD GetDeltaLen( nCol, nStartCol, nMaxWidth, aColSizes ) CLASS TSBrowse
Local nDeltaLen := 0

If ::lAdjColumn .and. nCol < Len( ::aColumns )
If ( nStartCol + aColSizes[ nCol ] + aColSizes[ nCol + 1 ] ) > nMaxWidth
nDeltaLen := nMaxWidth - ( nStartCol + aColSizes[ nCol ] )
EndIf
EndIf

RETURN nDeltaLen

...
METHOD DrawHeaders( lFooters ) CLASS TSBrowse
...
Local nDeltaLen

...
For nI := nBegin To nLastCol

If nStartCol >= nMaxWidth

Exit
EndIf

nJ := If( nI < ::nColPos, nJ + 1, nI )

oColumn := If( nJ > Len( ::aColumns ), ::oPhant, ::aColumns[ nJ ] )

nDeltaLen := ::GetDeltaLen( nJ, nStartCol, nMaxWidth, aColSizes )

...
TSDrawCell( hWnd, ; // 1
hDC, ; // 2
0, ; // 3
nStartCol, ; // 4
aColSizes[ nJ ] + nDeltaLen, ; // 5
...
IF ::lDrawSpecHd
...
TSDrawCell( hWnd, ; // 1
hDC, ; // 2
0, ; // 3
nStartCol, ; // 4
aColSizes[nJ] + nDeltaLen, ; // 5
...
If ::lFooting .and. ::lDrawFooters
...
TSDrawCell( hWnd, ; // 1
hDC, ; // 2
::nRowCount(), ; // 3
nStartCol, ; // 4
aColSizes[nJ] + nDeltaLen, ; // 5
...
EndIf

nStartCol += aColSizes[nJ] + nDeltaLen

Next

Return Self
...
METHOD DrawLine( xRow ) CLASS TSBrowse
...
Local nDeltaLen

...
For nI := nBegin To nLastCol

If nStartCol >= nMaxWidth

Exit
EndIf

nJ := If( nI < ::nColPos, nJ + 1, nI )

lSelected := If( nJ == nLastCol, .F., lSelected )
nLineStyle := ::nLineStyle
oColumn := If( nJ > Len( ::aColumns ), ::oPhant, ::aColumns[ nJ ] )

nDeltaLen := ::GetDeltaLen( nJ, nStartCol, nMaxWidth, aColSizes )

...
TSDrawCell( hWnd, ; // 1
hDC, ; // 2
xRow, ; // 3
nStartCol , ; // 4
aColSizes[ nJ ] + nDeltaLen, ; // 5
...
nStartCol += aColSizes[ nJ ] + nDeltaLen

Next

EndIf

Return Self
...
METHOD DrawSelect( xRow ) CLASS TSBrowse
...
Local nDeltaLen

...
For nI := nBegin To nLastCol

If nStartCol >= nMaxWidth

Exit
EndIf

nJ := If( nI < ::nColPos, nJ + 1, nI )
oColumn := If( nJ > Len( ::aColumns ), ::oPhant, ::aColumns[ nJ ] )
nLineStyle := ::nLineStyle

nDeltaLen := ::GetDeltaLen( nJ, nStartCol, nMaxWidth, aColSizes )

...
TSDrawCell( hWnd, ; // 1
hDC, ; // 2
nRowPos, ; // 3
nStartCol, ; // 4
aColSizes[ nJ ] + nDeltaLen, ; // 5
...
!(::lCellBrw .and. nJ != ::nCell) ) // 32 Invert color

nStartCol += aColSizes[ nJ ] + nDeltaLen

Next

EndIf
...

SuperHeader не поддерживает, надо править расчет.
Пример проверки тут https://TransFiles.ru/34r31

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



Пост N: 2741
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.08.19 16:37. Заголовок: PS Для работы коррек..


PS
Для работы корректировки надо
 
CLASS TSColumn
...
DATA nEditWidth AS NUMERIC //

DATA nEditMove AS NUMERIC // post editing cursor movement
...
METHOD DrawSelect( xRow ) CLASS TSBrowse
...
EndIf

oColumn:nEditWidth := 0

If nDeltaLen > 0
oColumn:nEditWidth := aColSizes[ nJ ] + nDeltaLen
EndIf

TSDrawCell( hWnd, ; // 1
...
METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, ;
nClrBack ) CLASS TSBrowse
...
EndIf

If oCol:nEditWidth > 0
nWidth := oCol:nEditWidth
If ! ::lNoVScroll
nWidth -= GetVScrollBarWidth()
EndIf
EndIf

If oCol:cResName != Nil .or. oCol:lBtnGet
...

В примере
ON KEY ESCAPE ACTION iif( oBrw:IsEdit, oBrw:PostMsg(WM_KEYDOWN, VK_ESCAPE), _wPost(99) )

END WINDOW
...
FUNCTION Brw2Fld( nY, nX, nW, nH, cBrw, aColor )
...
:LoadFields(.T.)
...

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




Пост N: 1562
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.08.19 20:12. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для работы корректировки


Принято с благодарностью
Проверил на Вашем примере - работает

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



Пост N: 2742
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.08.19 23:58. Заголовок: gfilatov2002 Добави..


gfilatov2002
Добавил в пример проверку работы метода :GetCellinfo(...). На кл. F3 в Footer колонки вкл. GetBox для ввода
Пример https://TransFiles.ru/958i8

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




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


SergKis пишет:

 цитата:
проверку работы метода :GetCellinfo(...)


По-видимому, были еще внесены изменения в код, поскольку у меня этот метод так красиво не отрабатывает, как в Вашем откомпилированном примере. Что-то я потерял в этих модификациях

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




Пост N: 1564
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.08.19 10:12. Заголовок: P.S. Понял, что надо..


P.S. Понял, что надо изменить метод :GetCellinfo(...) также, как и метод Edit().
Сейчас Ваш пример у меня работает нормально
Благодарю за помощь

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



Пост N: 2743
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.08.19 10:29. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
По-видимому, были еще внесены изменения в код[quote]

`
Отвлекли на другое и забыл об изменениях внесенных в :GetCellInfo, извините.
У меня они такие
 
METHOD GetCellInfo( nRowPos, nCell, lColSpecHd ) CLASS TSBrowse
...
endif

If oCol:nEditWidth > 0
nWidth := oCol:nEditWidth
If ! ::lNoVScroll
nWidth -= GetVScrollBarWidth()
EndIf
EndIf

nRow += ::aEditCellAdjust[1]
nCol += ::aEditCellAdjust[2]
nWidth += ::aEditCellAdjust[3] + 2
nHeight += ::aEditCellAdjust[4]
...


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




Пост N: 1565
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.08.19 11:20. Заголовок: SergKis пишет: У ме..


SergKis пишет:

 цитата:
У меня они такие

METHOD GetCellInfo( nRowPos, nCell, lColSpecHd ) CLASS TSBrowse


Аналогично
Благодарю за подтверждение

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



Пост N: 2744
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.08.19 13:29. Заголовок: gfilatov2002 Правка..


gfilatov2002
Правка (тогда :lNoHScroll := .F.\.T. работает правильно)
 
METHOD SetNoHoles( nDelta, lSet ) CLASS TSBrowse
...
nHole := _GetClientRect( ::hWnd )[ 4 ] - ;
::nHeightHead - ::nHeightSuper - ;
::nHeightFoot - ::nHeightSpecHd //- ;
// If( ::lNoHScroll, 0, GetHScrollBarHeight() )

...
и
METHOD GetCellInfo( nRowPos, nCell, lColSpecHd ) CLASS TSBrowse
...
Local lHead := .F.
Local lFoot := .F.

If HB_ISLOGICAL( nRowPos )
If nRowPos ; lHead := .T.
Else ; lFoot := .T.
EndIf
nRowPos := NIL
lColSpecHd := .F.
EndIf
...
endif

If lHead
nRow := ::nHeightSuper + If( oCol:l3DLook, 2, 0 ) + 1
nHeight := ::nHeightHead
ElseIf lFoot
nRow := _GetClientRect( ::hWnd )[4] - ::nHeightFoot + 1
nHeight := ::nHeightFoot
EndIf

ix := GetControlIndex ( cBrw, cForm )
if _HMG_aControlContainerRow [ix] == -1
...
тогда в примере сделать
DEFINE TOOLBAR ToolBar_3 CAPTION "" BUTTONSIZE 42,32 FLAT
BUTTON 99 CAPTION 'Exit' PICTURE 'exit' ACTION _PushKey(VK_ESCAPE)
END TOOLBAR
...
oBrw:UserKeys(VK_F3, {|ob| _wPost(3, ob, ob) })
oBrw:UserKeys(VK_F4, {|ob| _wPost(4, ob, ob) })

(This.Object):Event( 3, {|ot,oi,ob,y,x,w,h,cn| cn := ot:Name, ;
oi := ob:GetCellinfo(.T., ob:nCell), ; // Header
y := oi:nRow, ;
x := oi:nCol, ;
w := oi:nWidth, ;
h := ob:nHeightFoot, ;
This.MyFoot.Row := y, ;
This.MyFoot.Col := x, ;
This.MyFoot.Width := w, ;
This.MyFoot.Height := h, ;
This.MyFoot.Show, DoEvents(), ;
This.MyFoot.SetFocus } )

(This.Object):Event( 4, {|ot,oi,ob,y,x,w,h,cn| cn := ot:Name, ;
oi := ob:GetCellinfo(.F., ob:nCell), ; // Footer
y := oi:nRow, ;
x := oi:nCol, ;
w := oi:nWidth, ;
h := ob:nHeightFoot, ;
This.MyFoot.Row := y, ;
This.MyFoot.Col := x, ;
This.MyFoot.Width := w, ;
This.MyFoot.Height := h, ;
This.MyFoot.Show, DoEvents(), ;
This.MyFoot.SetFocus } )

...


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




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


SergKis пишет:

 цитата:
Правка (тогда :lNoHScroll := .F.\.T. работает правильно)


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

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



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


gfilatov2002
Предложение
 
HB_FUNC( TSDRAWCELL )
...
int iTxtW = 0;
BOOL bDraw = FALSE;

memset( &bm, 0, sizeof( BITMAP ) );
...
if( lCursor )
cDrawCursor( hWnd, &rct, lCursor, clrFore );
}
bDraw = TRUE;

}

DeleteObject( hGrayPen );
DeleteObject( hWhitePen );

hb_retl( bDraw );

...
CLASS TSBrowse FROM TControl
...
DATA aDrawCols AS ARRAY INIT {} // list of columns in display

...
METHOD DrawSelect( xRow ) CLASS TSBrowse
...
Local nDeltaLen, lDraw := .F.

Default xRow := nRowPos

::nPaintRow := xRow
::aDrawCols := {}


If Empty( ::aColumns )
...
If nDeltaLen > 0
oColumn:nEditWidth := aColSizes[ nJ ] + nDeltaLen
EndIf

lDraw := TSDrawCell( hWnd, ; // 1
...
nStartCol += aColSizes[ nJ ] + nDeltaLen

If lDraw
AAdd( ::aDrawCols, nJ )
EndIf

Next
...


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



Пост N: 2746
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.08.19 17:52. Заголовок: PS В примере получим..


PS
В примере получим список колонок в отображении
 
oBrw:UserKeys(VK_F5, {|ob| _wPost(5, ob, ob) })
...
(This.Object):Event( 5, {|ot,oi,ob| _LogFile(.T., hb_valtoexp(ob:aDrawCols)) })
...


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




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


SergKis пишет:

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


Сергей,

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

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



Пост N: 2747
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.08.19 20:59. Заголовок: gfilatov2002 пишет Д..


gfilatov2002 пишет
 цитата:
Добавить эти изменения можно без проблем, но только использовать их - в целях отладки


Сейчас трудно понять список колонок, которые проходят в методах прорисовки :Draw...(), т.к. определяется реально в функции TSDrawCell(...) по nStartCol и размером тсб GetClientRect( hWnd, &rct ), что затрудняет переделать :DrawSuper к примеру, т.к. там пляшет от ::aColSizes и aColSizes, понять мне не удалось, есть значения не совпадающие ни oCol:nWidth, oCol:nEditWidth и нет ясности в списке колонок.
Для начала на :aDrawCols сделать прорисовку :DrawSuper() для режима :ladjColumn := .T.
Может еще где пригодится

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




Пост N: 1568
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.08.19 21:20. Заголовок: SergKis пишет: на :..


SergKis пишет:

 цитата:
на :aDrawCols сделать прорисовку :DrawSuper() для режима :ladjColumn := .T.


Понял, уже добавляю...
Благодарю за разъяснение

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



Пост N: 2749
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.08.19 08:54. Заголовок: gfilatov2002 Что то..


gfilatov2002
Что то получилось с :DrawSuper(). Изменения Скрытый текст

Пример тут https://TransFiles.ru/qjle1

Работает и пример из Advanced\TsBrowse\sbsuperh.prg (с выделенной строкой и без нее)
 
MENUITEM "Super Columns" ACTION fSuperCol()
...
Function fSuperCol()
...
DEFINE TBROWSE oBrw AT 0,0 ALIAS "Products" CELLED ;
WIDTH 490 HEIGHT 350 ;
COLORS {CLR_BLACK, CLR_NBLUE} ;

oBrw:nFreeze := 2
oBrw:nHeightCell += 1
oBrw:SetAppendMode( .T. )
oBrw:SetDeleteMode( .T., .T.)

oBrw:lAdjColumn := .T.



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




Пост N: 1569
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.08.19 10:13. Заголовок: SergKis пишет: полу..


SergKis пишет:

 цитата:
получилось с :DrawSuper()


Благодарю за все Ваши усилия
Возможно, переменная lAdjColumn д.б. установлена в .T. по умолчанию

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



Пост N: 2750
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.08.19 11:22. Заголовок: gfilatov2002 пишет В..


gfilatov2002 пишет
 цитата:
Возможно, переменная lAdjColumn д.б. установлена в .T. по умолчанию


Конфликта с :AdjColumns() быть не должно, это для работы - ширина всех колонок < ширины тсб,
:lAdjColumn := .T. имеет смысл, если ширина всех колонок > ширины тсб, при этом сменится (от old версии) показ колонок. Как реагировать пользователи будут ?
Можно попробовать поставить :lAdjColumn := .T.

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




Пост N: 1570
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.08.19 11:32. Заголовок: SergKis пишет: :lAd..


SergKis пишет:

 цитата:
:lAdjColumn := .T. имеет смысл, если ширина всех колонок > ширины тсб


Понятно

SergKis пишет:

 цитата:
при этом сменится (от old версии) показ колонок. Как реагировать пользователи будут ?


Думаю, будут реагировать негативно...

Поэтому оставил по умолчанию :lAdjColumn := .F., как и было предложено изначально

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




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


Опубликована новая сборка 19.08 для BCC 5.5.1 и компиляторов Harbour и xHarbour.

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

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

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

- MinGW 9.1.1 32-bit для Harbour 3.2.0dev; (есть в наличии)

- MinGW 9.2.1 32-bit для Harbour 3.2.0dev; (под заказ)

- MinGW 8.2.0 64-bit для Harbour 3.4.0dev; (есть в наличии)

- MS VisualC 2019 32-bit для Harbour 3.2.0dev; (под заказ)

- MS VisualC 2019 64-bit для Harbour 3.2.0dev; (под заказ)

- Pelles C 8.0 32-bit для xHarbour b10253; (под заказ)

- Pelles C 9.0 64-bit для xHarbour b10253; (под заказ)

- Borland/Embarcadero C++ 7.4 (32-bit) для Harbour 3.2.0dev; (под заказ)

- Open Watcom C/C++ 2.0 (32-bit) для Harbour 3.2.0dev. (под заказ)

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

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




Пост N: 6398
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.08.19 13:47. Заголовок: Поставил новую верси..


Поставил новую версию.
Начал просматривать примеры.
При запуске - вылет:
Application: C:\MiniGUI\SAMPLES\Advanced\Tsb_menu\demo.exe
Time from start: 0 days 0 hours 0 mins 0 secs
Error MGERROR/0 Window: unrecognized property 'TS_OB1'. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(100) in module: h_error.prg
Called from SETPROPERTY(3952) in module: h_controlmisc.prg
Called from TSMENU(127) in module: p_menu.prg
Called from (b)MAIN(246) in module: demo.prg
Called from _PROCESSINITPROCEDURE(1674) in module: h_windows.prg
Called from _ACTIVATEWINDOW(1489) in module: h_windows.prg
Called from MAIN(254) in module: demo.prg


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




Пост N: 1572
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 21.08.19 14:22. Заголовок: Andrey Благодарю за..


Andrey
Благодарю за сообщение
Уже поправил с помощью "тихого" апдейта

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




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


gfilatov2002 пишет:

 цитата:
- MS VisualC 2019 32-bit для Harbour 3.2.0dev; (под заказ)

- MS VisualC 2019 64-bit для Harbour 3.2.0dev; (под заказ)


Как получить сборку под этот компилятор ?

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




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


Andrey пишет:

 цитата:
Как получить сборку под этот компилятор ?


Отправил ссылки в личку (см. Л.С.)

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




Пост N: 1574
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.08.19 10:01. Заголовок: Обновил сборку 19.08..


Обновил сборку 19.08 (Update 1) с учетом последних наработок

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

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

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


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




Пост N: 6410
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.08.19 13:08. Заголовок: Пере собрал некоторы..


Пере собрал некоторые программы ! Полёт нормальный !

Вопрос по COMBOBOXEX возник.

А нельзя увеличить ту часть со стрелкой вниз ?
А то её через микроскоп разглядывать нужно.
Взять стрелку с вертикального скролинга и повесить вместо этого значка.

Юзера слёзно просят увеличить.

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




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


Обновил сборку 19.08 (Update 2) с учетом последних наработок

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

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

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

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

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



Пост N: 30
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: 11.09.19 10:37. Заголовок: Что изменилось в пос..


Что изменилось в последних версиях, что при трансляции старых программ появилось это :

Error: Unresolved external '_HB_FUN_WIN_OSVERSIONINFO' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISNT' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISNT351' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISNT4' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS2000ORUPPER' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS2000' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISXP' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISWINXPORUPPER' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS2003' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISVISTA' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISVISTAORUPPER' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS7' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS8' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS9X' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS95' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS98' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISME' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISTSCLIENT' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSNETREGOK' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSNETVREDIROK' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver

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




Пост N: 1579
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.09.19 11:49. Заголовок: Avf пишет: Error: U..


Avf пишет:

 цитата:
Error: Unresolved external '_HB_FUN_WIN_OSVERSIONINFO' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISNT' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISNT351' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISNT4' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS2000ORUPPER' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS2000' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISXP' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISWINXPORUPPER' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS2003' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISVISTA' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISVISTAORUPPER' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS7' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS8' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS9X' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS95' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS98' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISME' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISTSCLIENT' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSNETREGOK' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSNETVREDIROK' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver

Эти функции появились в Харборе 10 лет назад (в ноябре 2009 года).
По-видимому, используется более старая версия Харбора

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



Пост N: 75
Зарегистрирован: 22.04.15
ссылка на сообщение  Отправлено: 13.09.19 11:22. Заголовок: Добавь список конста..


Добавь список констант для MS Word "word.ch", MS Excel "excel.ch" если не трудно

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




Пост N: 1582
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.09.19 11:44. Заголовок: Новичок пишет: спис..


Новичок пишет:

 цитата:
список констант для MS Word "word.ch", MS Excel "excel.ch"


Такие списки уже есть в папке samples\Advanced\Tsb_Export

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



Пост N: 76
Зарегистрирован: 22.04.15
ссылка на сообщение  Отправлено: 13.09.19 12:10. Заголовок: Видел, устарели уже ..


Видел, устарели уже - добавлял константы
да и желательно в основной каталог перебросить, чтобы там постоянно жило :)

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




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


Подготовил первую бету для новой сборки 19.10 со следующим списком изменений:

 цитата:
* New: Added a new command for managing of the Splash Windows:
[ SHOW ] SPLASH WINDOW PICTURE <image> ;
[ DELAY <delay> ] ;
[ ON INIT <InitProcedure> ] ;
[ ON RELEASE <ReleaseProcedure> ]
where <image> may be BMP, JPG, PNG, GIF or TIF image
from application's resources or from a disk file.
Note that above command should be launched at ON INIT event
of a MAIN form.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Basic\SPLASHDEMO)
* New: Added the new commands for tuning of the Status Items
properties at runtime:
SET STATUSITEM <nItem> OF <Form> ;
[ FONTCOLOR | BACKCOLOR | ALIGN | ACTION ] [ TO ] <xValue>
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demos in folder \samples\Basic\Status)
* New: Added the useful pseudo-function HMG_SysWait( [ <nSeconds> ] )
which based upon the Harbour function hb_idleSleep().
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Advanced\MP3Info)
* Modified: The first code refactoring attempt was made using of the
individual modules for:
- the extended and owner-draw controls;
- the filenames management functions;
- the nonclient C-functions;
- the databases conversion auxiliary functions.
Requested by Pete D. <pete_westg/at/yahoo.gr>.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
* Enhanced: The ButtonEX control supports now an optional clause
HOTKEY <KeyName>.
Requested by Verchenko Andrey <verchenkoag@gmail.com>.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder\samples\Basic\Button_Hotkey)
* Updated: Synchronized Extended HMG for compatibility with Official HMG:
- New: function IsContextMenuDefined ( cFormName );
- New: function IsNotifyMenuDefined ( cFormName ).
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see demo in folder \samples\Basic\MENU_Dynamic)
* Updated: HbSQLite3 library:
- update for using SQLITE3 latest version 3.30.0dev.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
* Updated: Harbour Compiler 3.2.0dev (SVN 2019-09-11 10:16).
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(look at ReadMe.txt in folder \harbour)
* New: 'Extended Dynamic Context Menu' sample.
Contributed by Sergej Kiselev and Verchenko Andrey
(see menudemo6.prg in folder \samples\Basic\Menu)
* Updated: 'Show Password without the asterisks and vice versa' sample.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see in folder \samples\Basic\ShowPassword)
* Updated: 'Splash Screen' sample.
Contributed by Grigory Filatov <gfilatov@inbox.ru>
(see in folder \samples\Basic\SPLASHDEMO)

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

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



Пост N: 2884
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: Вчера 10:52. Заголовок: gfilatov2002 О чем ..


gfilatov2002
О чем речь ?
 цитата:

* Modified: The first code refactoring attempt was made using of the
individual modules for:
- the extended and owner-draw controls;
- the filenames management functions;
- the nonclient C-functions;
- the databases conversion auxiliary functions.
Requested by Pete D. <pete_westg/at/yahoo.gr>



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




Пост N: 1584
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: Вчера 10:56. Заголовок: SergKis пишет: О че..


SergKis пишет:

 цитата:
О чем речь


Речь о том, что сегментация редко используемого кода в ядре библиотеки позволила уменьшить размер экзешника mgDBU на 5 килобайт, например

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



Пост N: 2886
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: Вчера 11:27. Заголовок: gfilatov2002 пишет Р..


gfilatov2002 пишет
 цитата:
Речь о том


Спасибо за пояснение.

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



Пост N: 31
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: Вчера 12:02. Заголовок: После перехода с вер..


После перехода с версии Minigui 19.02 на 19.03 ( и более поздние ) при выполнении
* Form_1.Browse_1.Value := RecNo()
DoMethod('Form_1','Browse_1','Value',RecNo()) (например,в Sample/Basic/Browse_1)

если Arg3 = "Value" ( и наверное не только ) выполнение идет на

OTHERWISE
MsgMiniGuiError( "Control: unrecognized method '" + Arg3 + "'." )
в h_controlmisc.prg.

Зачем это было сделано и что надо исправить в исходниках ?

Спасибо за внимание.

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




Пост N: 6443
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: Вчера 12:08. Заголовок: Avf пишет: DoMethod..


Avf пишет:

 цитата:
DoMethod('Form_1','Browse_1','Value',RecNo())


Может я и не прав, но DoMethod() нельзя так использовать.
Здесь нужно использовать SetProperty()

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



Пост N: 32
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: Вчера 12:14. Заголовок: Почему нельзя ? До м..


Почему нельзя ? До марта 2019 было можно и все работало. Кроме того, в другой нотации ( Form_1.Browse_1.Value := RecNo() )
не всегда удобно использовать вместо имен окна/бровса переменные.

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




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


Avf пишет:

 цитата:
Зачем это было сделано


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

Andrey пишет:

 цитата:
DoMethod() нельзя так использовать


Да, верно. Потому что VALUE - это свойство, а не метод у элемента управления

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



Пост N: 33
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: Вчера 12:30. Заголовок: Спасибо за разъяснен..


Спасибо за разъяснение.

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



Пост N: 2888
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: Вчера 12:39. Заголовок: Avf пишет Кроме того..


Avf пишет
 цитата:
Кроме того, в другой нотации ( Form_1.Browse_1.Value := RecNo() )
не всегда удобно использовать вместо имен окна/бровса переменные.


Для бровсе и др. контролов будет работать через переменные
cNam := 'Browse_1'
This.&(cNam).Value := ... // др. свойства\методы тоже будут работать
Form_1.&(cNam).Value := ...
Если использовать SET OOP ON и события, то в них будет среда This всегда и доступны команды
This.&(cNam).Value := ...
и т.д.

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



Пост N: 34
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: Вчера 13:33. Заголовок: Именно использование..


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

 цитата:
Если использовать SET OOP ON и события, то в них будет среда This всегда


Спасибо.

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



Пост N: 2889
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: Вчера 14:56. Заголовок: Avf пишет Именно исп..


Avf пишет
 цитата:
Именно использование макроподстановки и является неудобством


Смотря когда. Пример
 
as := dbStruct()
y := x := 10
for each af in as
@ y, x label &( af[1]+'_lbl' ) .... value af[1] ...
x += This.&( af[1]+'_lbl' ).Width + 10
@ y, x getbox &( af[1] ) .... value &(af[1]) ...
y += This.&( af[1]+'_lbl' ).Height + 10
next
...
Писать с именами всегда можно
nOld := This.Browse_1.Value
This.Browse_1.Value := ...


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



Пост N: 35
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: Вчера 15:21. Заголовок: Error: Unresolved ex..



 цитата:
Error: Unresolved external '_HB_FUN_WIN_OSVERSIONINFO' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISNT' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISNT351' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISNT4' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS2000ORUPPER' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS2000' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISXP' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISWINXPORUPPER' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS2003' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISVISTA' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISVISTAORUPPER' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS7' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS8' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS9X' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS95' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSIS98' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISME' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSISTSCLIENT' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSNETREGOK' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Error: Unresolved external '_HB_FUN_WIN_OSNETVREDIROK' referenced from C:\MINIGUI\HARBOUR\LIB\XHB.LIB|xwin_ver
Эти функции появились в Харборе 10 лет назад (в ноябре 2009 года).
По-видимому, используется более старая версия Харбора



В последней версии сборки(19.08) эти функции перебрались из xhb.lib в hbwin.lib.

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



Пост N: 36
Зарегистрирован: 19.10.05
ссылка на сообщение  Отправлено: Вчера 15:25. Заголовок: Смотря когда Я согла..



 цитата:
Смотря когда


Я согласен. Но это уже особенности языка.

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

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