Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне
Кратко, что нового:
- исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
Да пусть живет Главное всегда должен быть выбор. И про него сейчас разговор. Мне больше две переменные нравятся в твоем последнем предложении.
Andrey
постоянный участник
Пост 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
Григорий, верни назад как ранее была обработка, как советовал Сергей !
h_controlmisc.prg line 4025 CASE Arg3 == "BACKCOLOR" .OR. Arg3 == "GRADIENTOVER" .OR. Arg3 == "BACKGROUNDCOLOR" добавь и пересобери libу
Вот это помогло !
Andrey
постоянный участник
Пост 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) вставить проверку, чтобы не вылетало ?
Обновил сборку 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)
If Valtype( ::aCheck ) == "A" .and. ! Empty( ::aCheck ) AEval( ::aCheck, {|hBmp| If( Empty( hBmp ), , DeleteObject( hBmp ) ) } ) EndIf Картинок можно больше складывать и на ходу менять по ситуевинам разным
gfilatov2002 Сейчас в тсб :Destroy() отрабатывают не на все переменные DeleteObject(), загруженных по LoadImage() и их надо отрабатывать собственными обработчиками или складывать картинки в public переменные Предлагаю добавить в тсб переменную и такой вид :Destroy()
DATA lDestroyAll AS LOGICAL INIT .F. // flag to destroy all bitmap created LoadImage(...) ... METHOD Destroy() CLASS TSBrowse
Обновил сборку 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)
Andrey
постоянный участник
Пост N: 6281
Зарегистрирован: 12.09.06
Отправлено: 14.05.19 11:06. Заголовок: Всем привет. Появила..
Всем привет. Появилась ошибка в давно работающем модуле печати. Т.е. в новой версии МиниГуи появилась ошибка. Из таблицы вызываю форму печати через &cRun(cMenu, cForma, cAls2,..), там доп.окно MODAL Form_Dolg на которой в цикле вывод 10 значений:
Оставляю курсор на форме допустим на 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 ошибка тоже появляется. Ниже протестировать пока не удалось. Очень срочно нужна помощь.... Что делать мне ?
SergKis
постоянный участник
Пост 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 есть обращение к контролу, которое раньше игнорировалось.
Понял из твоего сообщения, что Form_Dolg закрылась при возвращении на гл. таблицу, т.е. окна нет уже. Возможно, в button_upmenutable есть обращение к контролу, которое раньше игнорировалось.
Да ! Больше я НИГДЕ не обращаюсь к GetBox_Dolg3/4/5/6... Это единственная форма с такими переменными.
Если КУРСОР будет стоять в GetBox_Dolg8, то ошибка будет: Error MGERROR/0 Control: GetBox_Dolg8 Of Form_Dolg Not defined. Program terminated.
Как убрать ошибку ?
SergKis
постоянный участник
Пост 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 */
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 - то ?
Andrey
постоянный участник
Пост 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 ? Но она же есть на экране !
Т.е. это вызов на кнопке - ACTION aObj2But[12,12] Другие формы печати работают без ошибок, а где есть с GETBOX - то вылетает. Такое впечатление, что после GETBOX портится - MsgDebug( ThisWindow.Name, This.Name ) ?
SergKis
постоянный участник
Пост N: 2549
Зарегистрирован: 17.02.12
Отправлено: 14.05.19 16:22. Заголовок: Andrey Попробуй в O..
Andrey Попробуй в ON RELEASE формы с GetBox поставить самым последним вызов _PopEventInfo() для восстановления среды This, т.к. по сообщению об ошибке видно, что нет имени контрола
SergKis
постоянный участник
Пост N: 2550
Зарегистрирован: 17.02.12
Отправлено: 14.05.19 16:35. Заголовок: PS Дело в том, что п..
PS Дело в том, что при создании новой формы\окна информация о предыдущей форме\окне среды This теряется, что и происходит, т.е. нет гарантии, что она будет соответствовать. При Release окна среда This, которая была не восстанавливается, т.к. окна могут закрываться не в том порядке, как открывались. Выход 1. Сохранять\восстанавливать среду This самому 2. Работать без This с конкретным именем окна (основное правило hmg) 3. Раскладывать последовательность действий на события и выполнять события по сообщениям. Для каждого события будет создана среда This окна или контрола, в зависимости как укажешь в сообщении. Пример у тебя есть
Попробуй в 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
Да, это написание более понятней ! Все названия сохранены через переменные и при обнулении This уже путаницы не будет. Спасибо !
SergKis
постоянный участник
Пост N: 2554
Зарегистрирован: 17.02.12
Отправлено: 15.05.19 11:55. Заголовок: Andrey пишет Да, это..
Andrey пишет
цитата:
Да, это написание более понятней !
Если исходить из правила hmg в блоке кода контрола ACTION, ON CHANGE и т.д., должна быть установлена и сохраняться среда переменных _THIS_..., то вариант с функцией более правильный, т.е.
Отправлено: 15.05.19 12:10. Заголовок: PS И лучше использов..
PS И лучше использовать ф-ю внутри своей DogListAbon(...) LOCAL aThis := _ThisInfo() ... ACTIVATE WINDOW ...
_ThisInfo(aThis)
RETURN
gfilatov2002
moderator
Пост N: 1510
Зарегистрирован: 11.02.10
Отправлено: 10.06.19 11:44. Заголовок: Всем кому это интересно
Подготовил 2-ю бетку для новой сборки 19.06 со следующим списком изменений: Скрытый текст
* Fixed: Problem with a handling <Esc> key into the function HMG_Alert() (introduced in the build 18.02). Processing of a closing of a window in the Alert* family functions is similar to the system dialogs in Windows 7. Bug was reported by Grzegorz Wojnarowski. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\AlertBoxes) * Fixed: Problem with using of the function AScan() without <lExact> switch into the function HMG_GetFormControls() (introduced in the build 19.04). Bug was reported by Grzegorz Wojnarowski. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\MAINDEMO_(SYNTAX_I)) * Fixed: The wrong using of the Registry class was fixed in the function DeleteRegistryKey( nKey, cRegKey ). Added the new command DELETE [REGISTRY] SECTION <cKey> FROM [KEY] <hKey> instead of the mistaked command DELETE KEY <cKey> OF <oReg>. Sample code: CREATE REGISTRY oReg KEY HKEY_CURRENT_USER SECTION "_TEST" IF IsRegistryKey( HKEY_CURRENT_USER, "_TEST" ) SET VALUE "test" OF oReg TO "myval" CLOSE REGISTRY oReg MsgInfo( GetRegistryValue( HKEY_CURRENT_USER, "_TEST", "test" ) ) DELETE REGISTRY SECTION "_TEST" FROM KEY HKEY_CURRENT_USER ENDIF Contributed by Grigory Filatov <gfilatov@inbox.ru> * Modified: Correction of SetKey events processing in the GetBox control. You can modify an action of the predefined keys in GetBox now. Sample code: @ 10, 10 GETBOX GetBox1 OBJ oGet VALUE Space( 30 ) oGet:SetKeyEvent( VK_RETURN, {|| MsgInfo("Enter pressed") } ) oGet:SetKeyEvent( VK_DOWN, {|| MsgInfo("Down pressed") } ) Requested by Dusko Radojcin. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\GetBox_3) * Updated: Harbour contrib HbFImage library: - update for using FreeImage DLL version 3.18.0 (from 3.15.0). (see source in folder \Source\hbfimage) Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\FREEVIEW) * 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 latest version 3.29.0dev. Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: Added the auxiliary add-on binary archive for a correct launching of the MiniGUI advanced samples. This archive contains the following tools: - CUrl dlls; - FreeImage dll; - MySQL dll; - PageScript dll; - SumatraPDF application; - QHTM installer; - RMChart installer; - VLC ActiveX Control. Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: 'GetFont dialog with the monospace fonts' sample. Based upon a contribution of HMG user KDJ. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\GetFont) * Updated: 'Alert Boxes usage' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\AlertBoxes) * Updated: 'Contactos' sample. Contributed by Pierpaolo Martinello <pier.martinello[at]alice.it> (see in folder \samples\Basic\CONTACTOS) * Updated: MPM utility: - fixed using of the function DeleteRegistryKey(). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\MPM)
Постараюсь не затягивать с выпуском финальной сборки
Также после нескольких попыток удалось собрать Харбор для свежей версии MinGW 9.1
Завершена подготовка новой сборки 19.06, которая будет опубликована на следующей неделе.
Я отказался от поддержки бесплатного компилятора BCC 10.1 и старой сборки для xHarbour.com вследствие нулевого интереса со стороны пользователей библиотеки.
Собрал новую сборку только для слкдующих компиляторов: - BCC 5.5 (Базовый дистрибутив); - MinGW 9.1 (32- и 64-бит).
Сборки для других Си-компиляторов будут выполняться только под заказ (на платной основе)
gfilatov2002
moderator
Пост N: 1512
Зарегистрирован: 11.02.10
Отправлено: 18.06.19 09:44. Заголовок: Всем кому это интересно
Опубликована новая сборка 19.06 для BCC 5.5.1 и компиляторов Harbour и xHarbour.
А что примеры - назначений событий на объекты формы не добавил ? Это же самые понятные примеры для новичков. Мне Сергей давно советовал делать так - через события, а я всё не понимал как это работает. В Виндах всё же через события происходят, а большинство делает по старинке, через функции. А в этих примерах всё просто демонстрируется...
Да и ещё один классный пример я высылал - универсальное затенение формы со всеми объектами, включая картинки. FormDarken(1.2).7z Код маленький и короткий, удобно очень встраивать к себе в программу другим программистам.
* 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)
Обновил сборку 19.06 (Update 1) с учетом последних наработок
Уважаемый Григорий (повторная просьба) можно обновить хотя бы один из примеров (типа \MiniGUI\SAMPLES\Applications\MultipleMail) чтобы была возможность отправлять e-mail на mail.ru, yandex.ru и т.п. с учетом SSL. Сейчас ни один из примеров не работают ...
отправлять e-mail на mail.ru, yandex.ru и т.п. с учетом SSL
Эта тема уже обсуждалась на форуме здесь и здесь Могу только добавить, что все требуемые библиотеки для поддержки SSL есть в поставке МиниГУИ: hbtip hbssl libeay32 ssleay32.
SergKis
постоянный участник
Пост 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:={}
// LOCAL cActiveFormName := 'Form_3' LOCAL cOwnerFormName := ThisWindow.Name, cOwnerFormTitle := ThisWindow.Title LOCAL oWnd := ThisWindow.Object LOCAL cTit := oWnd:Title
* New: Added the useful function HMG_GetForms( [ cFormTypes ] [, lObj ] ) for retrieving of an array of the form's names (or handles). Contributed by Sergej Kiselev (see demo in folder \samples\Basic\MAINDEMO_(SYNTAX_I)) * Modified: The local OS detecting functions were replaced with a native [x]Harbour implementation (instead of using the MiniGUI function WindowsVersion()). NOTE: The C-functions IsWinXPorLater() and IsVistaOrLater() are defined as pseudo-functions now. It was a postponed modification. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see i_pseudofunc.ch in folder Include\) * Modified: The function IsExe64() is replaced with a native Harbour implementation. The compatibility with xHarbour compiler is provided also. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see i_pseudofunc.ch in folder Include\) * Updated: Header file i_hmgcompat.ch for compatibility with Official HMG: - added pseudo-function IsMaximized( hWnd ). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\ImageFromWeb) * Updated: Pacified the warnings in the C-code for compatibility with MS Visual C++ 2019 (32-bit) compiler. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: OpenSSL wrapper for using of the version 1.0.2s. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: 'MiniGUI DataBase Utility' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\mgDBU)
gfilatov2002 Думается функция _hmg_OnHideFocusManagement ( i ) для окна STANDART работает не точно. Подправленный пример (был выше) тут https://TransFiles.ru/b0lgp Нажатие кнопок на окнах CHILD и MODAL работает нормально, а на окне STANDART на передний план выводится окно MAIN и потом окно AlertInf(...). Если, в ф-ии _DO_BTN_( oBtn ), убрать строку (выделено цветом)Скрытый текст
STATIC FUNC _DO_BTN_( oBtn ) LOCAL cBtn := oBtn:Name //This.Name LOCAL cCapt := This.Caption LOCAL cWnd := ThisWindow.Name LOCAL cTitl := ThisWindow.Title LOCAL cType := ThisWindow.Type LOCAL lStbP := 'Export' $ cBtn LOCAL cText := iif( lStbP, CRLF+CRLF+'Start ProgressBar', '' )
cStaticGlobalForm - делаю определение сразу под созданием окна. Т.е. должно всегда возвращаться Form_AYC !!! Значит - ThisWindow.Name, _HMG_ThisFormName нельзя использовать ?
Правда у меня на форме Form_Main включён таймер на каждую секунду (для тестирования). Может он влияет на псевдо-функции ThisWindow.Name, _HMG_ThisFormName ?
SergKis
постоянный участник
Пост N: 2643
Зарегистрирован: 17.02.12
Отправлено: 16.07.19 18:03. Заголовок: Andrey пишет Значит ..
Andrey пишет
цитата:
Значит - ThisWindow.Name, _HMG_ThisFormName нельзя использовать ?
Отправлено: 16.07.19 18:08. Заголовок: PS т.е. в TIMER блок..
PS т.е. в TIMER блоке на Form_Main ставишь aThis := _ThisInfo() // в начале ... _ThisInfo(aThis) // в конце
SergKis
постоянный участник
Пост N: 2645
Зарегистрирован: 17.02.12
Отправлено: 16.07.19 18:11. Заголовок: PPS Наврал, на TIMER..
PPS Наврал, на TIMER не получится, там ставится среда This для Form_Main, sory
Andrey
постоянный участник
Пост N: 6338
Зарегистрирован: 12.09.06
Отправлено: 16.07.19 18:24. Заголовок: Понял, что с TIMER н..
Понял, что с TIMER нужно аккуратно работать. Всё таки решение через STATIC переменную типа cStaticThisForm более простое. SergKis пишет:
цитата:
Лучшее решение, по мне, функция aThis := _ThisInfo(), работаешь как с Alias(), сохраняешь\восстанавливаешь
Буду иметь ввиду. Уже кое где применил.
SergKis
постоянный участник
Пост N: 2646
Зарегистрирован: 17.02.12
Отправлено: 16.07.19 18:30. Заголовок: Andrey пишет Всё так..
Andrey пишет
цитата:
Всё таки решение через STATIC переменную типа cStaticThisForm более простое.
Теряется универсальность. Надо каждое окно делать в отдельном prg файле, иначе для каждого окна свою переменную, что фактически означает работу по имени окна, т.е. Form_Main.Btn1.Value и т.д.
Теряется универсальность. Надо каждое окно делать в отдельном prg файле, иначе для каждого окна свою переменную, что фактически означает работу по имени окна, т.е. Form_Main.Btn1.Value и т.д.
Да зачем усложнять то код написания. Нужно проще писать код, чтобы когда нужно править так лет через 10, понимать что и как написано. А то открываешь свой код написанный 12 лет назад и думаешь, кто так фигово написал то.... и почему до сих пор работает ?
SergKis
постоянный участник
Пост N: 2647
Зарегистрирован: 17.02.12
Отправлено: 16.07.19 22:21. Заголовок: PSP пишет Как это м..
PSP пишет [quote]` Как это может помочь при плавающем cForm
WHILE _IsWindowDefined( cForm := cFrm+'_'+hb_ntos(++nFrm) ) ENDDO
SergKis
постоянный участник
Пост N: 2648
Зарегистрирован: 17.02.12
Отправлено: 16.07.19 22:24. Заголовок: Упс, промахнулся по ..
Упс, промахнулся по клавише. PSP пишет
цитата:
hash-массив не поможет в этом случае?
SergKis
постоянный участник
Пост N: 2649
Зарегистрирован: 17.02.12
Отправлено: 17.07.19 07:26. Заголовок: Andrey пишет Правда ..
Andrey пишет
цитата:
Правда у меня на форме Form_Main включён таймер на каждую секунду (для тестирования). Может он влияет на псевдо-функции ThisWindow.Name, _HMG_ThisFormName ?
Предлагаю такую схему для TIMER на Form_Main
Выполнение основного тела блока кода перенести на событие приложения, т.е. FUNCTION Main(...) ... SetsEnv()
Работа блока кода Timer_1 будет оч. короткой, среда This восстановлена после него, какая была. В установленном событии oDlu2Pixel():Event(1) This среда не важна, должна быть.
SergKis
постоянный участник
Пост N: 2650
Зарегистрирован: 17.02.12
Отправлено: 17.07.19 07:40. Заголовок: PS Точнее так WI..
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 )
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
END TBROWSE ON END _wPost( 92, This.Index ) DO EVENTS
SergKis
постоянный участник
Пост 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
Аналогично можно сделать в методах 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
gfilatov2002
moderator
Пост N: 1525
Зарегистрирован: 11.02.10
Отправлено: 20.07.19 20:58. Заголовок: SergKis пишет: Не р..
gfilatov2002 Добавил в пример (выше) сохранение позиции курсора при повторном нажатии на одну и ту же кнопку (с перемещением курсора на др. страницы тсб). :GotoRec(...) не работает с массивом, может кому интересно будет Тут Скрытый текст
*-----------------------------------------------------------------------------* STATIC FUNC AgeReport( oWnd, nEvent, aSelect ) *-----------------------------------------------------------------------------* LOCAL aDatos, aArray, aSize LOCAL cCapt := 'All' LOCAL cBrw := This.E0.Cargo // TsBrowse name LOCAL nRec, nPos, nCol, cBtnC
nEvent := Val( This.Name ) // Button name oWnd:Action := .F. oWnd:StatusBar:Say('W A I T')
If aSelect[1] != Nil cCapt := hb_ntos(aSelect[1])+'-'+hb_ntos(aSelect[2]) EndIf
cBtnC := This.E0.Caption This.E0.Caption := cCapt ; DO EVENTS
aDatos := AgeSelect( aSelect[1], aSelect[2] )
aArray := aDatos[1] aSize := aDatos[3]
WITH OBJECT (This.&(cBrw).Object):Tsb // oWnd:GetObj(cBrw):Tsb
Отправлено: 24.07.19 13:07. Заголовок: gfilatov2002 Не наш..
gfilatov2002 Не нашел функций в lib для использования в блоках кода для работы с RGB. Приходится все время таскать ToRGB( aColor ), n2RGB( nColor ). Может сделать что то такое
*-----------------------------------------------------------------------------* FUNCTION HMG_RGB2n( p1, p2, p3 ) *-----------------------------------------------------------------------------*
Отправлено: 24.07.19 15:29. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет
цитата:
Пример отработал нормально с этими кодо-блоками
Да. Отработал Мой косяк, переносил текст и перенес RGB( { 40, 122, 237 } ), RGB( YELLOW ) с лишними скобками {} Но ArrayRGB_TO_COLORREF( YELLOW ) не вспомнишь как пишется. Останусь на своих RGB2n(...), n2RGB(...) Спасибо.
Andrey
постоянный участник
Пост 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() Лишь бы были и не таскать из проекта в проект.
SergKis
постоянный участник
Пост N: 2683
Зарегистрирован: 17.02.12
Отправлено: 24.07.19 19:39. Заголовок: gfilatov2002 пишет а..
gfilatov2002 пишет
цитата:
аргументируйте...
Небольшой аргумент в пользу функций (не псевдо) - это хранение цветов в файлах ini, xml или использование hb_macroBlock(...) для создания блоков кода.
Применять так к примеру 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
Предлагаю добавить метод в TsColumn (при работе с dbf заполняются :nFieldTyp, :nFieldLen на колонки)
А как код будет выглядеть ?
SergKis
постоянный участник
Пост 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) } )
gfilatov2002 Предлагаю такой HMG_Alert(), добавил параметр cFont, для исп. вместо DlgFont. Тогда можно применять Alert...() ф-ии с DlgFont. Скрытый текст
*-----------------------------------------------------------------------------* FUNCTION HMG_Alert( cMsg, aOptions, cTitle, nType, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable, cFont ) *-----------------------------------------------------------------------------* LOCAL nLineas LOCAL aIcon := { "ALERT", "QUESTION", "INFO", "STOP" } LOCAL lFont := .F. LOCAL lEmpty := ( Empty( aOptions ) .OR. ISNUMERIC( aOptions ) ) LOCAL cForm := "oDlg"
IF _IsWindowDefined( cForm ) nLineas := 0 WHILE _IsWindowDefined( cForm := 'oDlg' + hb_ntos( ++nLineas ) ) END ENDIF
#ifdef _HMG_COMPAT_ CHECK TYPE cMsg AS USUAL, ; aOptions AS USUAL, ; cTitle AS CHARACTER, ; nType AS NUMERIC, ; cIcoFile AS USUAL, ; nIcoSize AS USUAL, ; aBtnColors AS USUAL, ; bInit AS USUAL, ; lClosable AS LOGICAL #endif IF nType < 1 .OR. nType > 4 nType := 1 ENDIF
AEval( aIcon, {|x, i| aIcon[ i ] := "ZZZ_B_" + x } )
*-----------------------------------------------------------------------------* STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont ) *-----------------------------------------------------------------------------* LOCAL hWnd LOCAL hDC LOCAL hDlgFont LOCAL aBut := {} LOCAL cForm := ThisWindow.Name LOCAL cLblName LOCAL cBtnName LOCAL nCol LOCAL nOpc := 1 LOCAL nMaxLin := 0 LOCAL nMaxBoton := 0 LOCAL nLenBotones LOCAL nLenaOp LOCAL nWidthCli, nHeightCli LOCAL nWidthDlg, nHeightDlg LOCAL nChrHeight LOCAL nHeightBtn LOCAL nVMARGIN_BUTTON := VMARGIN_BUTTON LOCAL nSeconds LOCAL n LOCAL lExt
#ifdef _HMG_COMPAT_ CHECK TYPE cMsg AS CHARACTER, ; aOptions AS USUAL, ; nLineas AS NUMERIC, ; cIcoFile AS CHARACTER, ; nIcoSize AS NUMERIC #endif IF ValType( aOptions ) == "N"
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 ... и использованный в контроле.
такая штука удаляет фонт, если он не 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
SergKis
постоянный участник
Пост N: 2696
Зарегистрирован: 17.02.12
Отправлено: 30.07.19 11:20. Заголовок: gfilatov2002 пишет В..
gfilatov2002 пишет
цитата:
В момент удаления мы ведь не знаем название шрифта, а только указатель (handle) на него.
Зачем удалять фонт, созданный (сохранен в базе _HMG_aControlType == 'FONT') по DEFINE FONT ... ? Его удаляем по RELEASE FONT, а в контролах, если не найден в базе фонтов, используем _HMG_DefaultFontName, или фонт установленный на окно. Или я что то упускаю ?
SergKis
постоянный участник
Пост N: 2697
Зарегистрирован: 17.02.12
Отправлено: 30.07.19 11:23. Заголовок: PS Ведь все фонты по..
PS Ведь все фонты по DEFINE FONT ... цепляются к _FORMNAME_ 'Main' и там живут
SergKis
постоянный участник
Пост N: 2698
Зарегистрирован: 17.02.12
Отправлено: 30.07.19 11:38. Заголовок: PPS Если фонтов нет ..
PPS Если фонтов нет в списке DEFINE FONT ..., работают С ф-ии _SetFont(...), _SetFontHandle(...), а они не используют базу. По мне, команды удаления фонтов в _EraseControl() не нужны.
SergKis
постоянный участник
Пост N: 2699
Зарегистрирован: 17.02.12
Отправлено: 30.07.19 11:44. Заголовок: SergKis пишет По мне..
SergKis пишет
цитата:
По мне, команды удаления фонтов в _EraseControl() не нужны
Уточню, если они находятся в секции 'Main' - удалять не нужно.
Зачем удалять фонт, созданный (сохранен в базе _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
Благодарю за помощь
gfilatov2002
moderator
Пост N: 1542
Зарегистрирован: 11.02.10
Отправлено: 31.07.19 10:43. Заголовок: Всем кому это интересно
Подготовил 2-й релиз-кандидат для новой сборки 19.08 со следующим списком изменений: Скрытый текст
* Fixed missed hiding of all controls on a FOCUSED deleted TabPage in the function _DeleteTabPage(). It exists in the official version too.
* Added possibility to modify the following Windows events at runtime: - OnInit - OnRelease - OnInteractiveClose - OnGotFocus - OnLostFocus - OnNotifyClick - OnMouseclick - OnMouseDrag - OnMouseMove - OnMove - OnSize - OnMaximize - OnMinimize - OnPaint - OnRestore - OnDropFiles
* Added the useful pseudo-functions RGB2n( n1 [, n2] [, n3] ) and n2RGB( n ) for converting of a color array.
* The 'Cursor' property is supported in the function GetProperty() for the Forms.
* Added possibility to modify of 'OnEnter' event for the controls at runtime.
* Added possibility to modify of the 'OnListDisplay/OnDropDown' and 'OnListClose/OnCloseUp' events for ComboBox control at runtime.
* The Spinner control supports now a changing of the INCREMENT property at runtime.
* The Timer control supports now a changing of the INTERVAL and ONCE properties at runtime.
* The BTNTEXTBOX control supports now a changing of the separated TOOLTIPs for the edit box and buttons at runtime.
* The GETBOX control supports now a changing of the separated TOOLTIPs for the edit box and buttons at runtime.
* The global fonts which were defined by the command DEFINE FONT <font> FONTNAME <name> ... will preserved after closing of a form.
* A 'Value' property will changed to a first available item in the RadioGroup control if a focused item was disabled with a putting of 'ReadOnly' property.
* Updated the TSBrowse, HBPrinter and Sqlite3 libraries.
* Added the new interesting samples and updated some Basic and Advanced samples.
Хотя эта сборка работает стабильно, выпуск финальной версии отложен по финансовым причинам
SergKis
постоянный участник
Пост N: 2701
Зарегистрирован: 17.02.12
Отправлено: 01.08.19 11:28. Заголовок: gfilatov2002 Может ..
*-----------------------------------------------------------------------------* PROCEDURE _PopEventInfo( n ) *-----------------------------------------------------------------------------* LOCAL l
Тогда в блоке кода на окно, контрол можно ставить среду This запомненную ранее, к примеру, на TIMER другого окна ACTION {|| _PopEventInfo( Len( _HMG_aEventInfo ) - 1 ), ... }
Добавил, хотя эта коррекция является опасным хаком, на мой взгляд
SergKis
постоянный участник
Пост 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, т.е. то что было при входе.
Вот в этом и проблема - обычно пользователи библиотеки (они же прикладные разработчики) редко хотят заморачиваться такими вещами. Но как дополнительная возможность - не помешает, я думаю.
gfilatov2002 Андрей сказал, что у меня в примере простая карточка, без вызова справочника. Исправил пример, добавив имитацию вызова справочников у 2х GetBox кнопками Так же сделал на этих GetBox F5 и DublClick для вызова справочника + ToolTip информация Пример тут https://TransFiles.ru/ocym6
SergKis
постоянный участник
Пост 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
определения принадлежности колонки к алиасу добавил
Продублировал эти изменения также, хотя и не очень понятно, почему недостаточно
цитата:
ATail( ::aColumns ):cAlias := cAlias
и требуется дублировать это значение в еще одну переменную cArea
SergKis
постоянный участник
Пост 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
oCol:cArea позволит связать колонку с полем в базе
Понятно, благодарю за разъяснение SergKis пишет:
цитата:
Можно, в дальнейшем, убрать в тсб, где cAls брать из oCol:cArea
Тогда ожидаю такую модификацию, если она потребуется...
SergKis
постоянный участник
Пост 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() } )
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
Подключил в примерах Tsb_ReportAge и Tsb_SetFieldsTo работу с LetoDbf
Спасибо! Да, примеры работают с сервером при запуске demo.exe * Заметил, что в Tsb_SetFieldsTo количество отобранных записей в подвале правильно обновляется только со второй попытки...
SergKis
постоянный участник
Пост N: 2724
Зарегистрирован: 17.02.12
Отправлено: 08.08.19 16:23. Заголовок: gfilatov2002 пишет к..
gfilatov2002 пишет
цитата:
количество отобранных записей в подвале правильно обновляется только со второй попытки...
gfilatov2002 Модифицировал пример, добавив справочник STATE.DBF, колонки в тсб набираются смешано с 3х алиасов. Работает запуск и с сервером тоже Пример тут https://TransFiles.ru/xuqt2
Мелочь, но тогда короче писать можно (клавишных сообщений исп. достаточно) ON KEY ESCAPE ACTION iif( oBrw:IsEdit, oBrw:PostMsg(, VK_ESCAPE), _wPost(99) )
нагляднее В противном случае, надо помнить, что сообщение WM_KEYDOWN используется по умолчанию (и не забыть поставить запятую перед VK_ESCAPE), но ведь есть и другие сообщения
SergKis
постоянный участник
Пост 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 )
Andrey
постоянный участник
Пост N: 6389
Зарегистрирован: 12.09.06
Отправлено: 15.08.19 12:28. Заголовок: Всем привет ! Вопрос..
Всем привет ! Вопрос возник, а почему в ресурсах МиниГуи нет иконки самого МиниГуи - официальной ? Примеры тестовые делать можно было бы с официальной иконкой, а то и не знаешь какой вариант использовать.
И второй вопрос, почему нет в ядре МиниГуи функции _ShowContextMenu() ? Замучился таскать её в проекты, частенько использую для тестовых проектов. Григорий, добавь пожалуйста эту функцию в ядро.
Вопрос возник, а почему в ресурсах МиниГуи нет иконки самого МиниГуи - официальной ?
Спасибо за вопрос Дело в том, что в разное время были разные иконки, а сейчас - такая, как на моей аватарке. Поэтому проще просто поместить эту иконку в папку с примером и подключать ее из файла, а не из ресурсов
Andrey пишет:
цитата:
второй вопрос, почему нет в ядре МиниГуи функции _ShowContextMenu() ?
Потому, что эта функция не доработана до конца (в частности, режим центрирования).
Выслал примеры по Tsbrowse с карточкой + блокировка записей на почту.
Вопрос возник по Tab. Показываю окно с Tab карточкой юзеру. На медленных компах видно как этот Tab дергается, т.е. на Tab вывожу объекты Label и GetBox. Там их много, порядка 150 объектов. Вот и дергается Tab. Можно как то это "дерганье" убрать ?
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
Отправлено: 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
gfilatov2002 Добавил в пример проверку работы метода :GetCellinfo(...). На кл. F3 в Footer колонки вкл. GetBox для ввода Пример https://TransFiles.ru/958i8
По-видимому, были еще внесены изменения в код, поскольку у меня этот метод так красиво не отрабатывает, как в Вашем откомпилированном примере. Что-то я потерял в этих модификациях
gfilatov2002
moderator
Пост N: 1564
Зарегистрирован: 11.02.10
Отправлено: 19.08.19 10:12. Заголовок: P.S. Понял, что надо..
P.S. Понял, что надо изменить метод :GetCellinfo(...) также, как и метод Edit(). Сейчас Ваш пример у меня работает нормально Благодарю за помощь
SergKis
постоянный участник
Пост 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
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
Добавить эти изменения можно без проблем, но только использовать их - в целях отладки. Или я что-то упустил
SergKis
постоянный участник
Пост 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. Может еще где пригодится
gfilatov2002
moderator
Пост N: 1568
Зарегистрирован: 11.02.10
Отправлено: 19.08.19 21:20. Заголовок: SergKis пишет: на :..
SergKis пишет:
цитата:
на :aDrawCols сделать прорисовку :DrawSuper() для режима :ladjColumn := .T.
Понял, уже добавляю... Благодарю за разъяснение
SergKis
постоянный участник
Пост N: 2749
Зарегистрирован: 17.02.12
Отправлено: 20.08.19 08:54. Заголовок: gfilatov2002 Что то..
gfilatov2002 Что то получилось с :DrawSuper(). Изменения Скрытый текст
METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... Local nDeltaLen, lDraw := .F.
Default xRow := nRowPos, lDrawCell := .T. ... If lDrawCell
FOR nI := 1 TO Len( ::aColumns ) oCol := ::aColumns[ nI ] If oCol:nEditWidth > 0 aColSizes[ nI ] := oCol:nEditWidth - iif( ::lNoVScroll, GetVScrollBarWidth(), 0 ) Else aColSizes[ nI ] := oCol:nWidth EndIf NEXT
For nI := 1 To Len( aSuperHead ) For nJ := aSuperHead[ nI, 1 ] To aSuperHead[ nI, 2 ] If nI == 1 .and. AScan(aDrawCols, nJ) > 0 nWidth += aColSizes[ nJ ] EndIf Next Next
If nI < Len( aSuperHead ) For nJ := aSuperHead[ nI + 1, 1 ] To aSuperHead[ nI + 1, 2 ] If ::lAdjColumn If AScan(aDrawCols, nJ) > 0 nWidth += aColSizes[ nJ ] EndIf Else nWidth += aColSizes[ nJ ] EndIf Next EndIf
Благодарю за все Ваши усилия Возможно, переменная lAdjColumn д.б. установлена в .T. по умолчанию
SergKis
постоянный участник
Пост N: 2750
Зарегистрирован: 17.02.12
Отправлено: 20.08.19 11:22. Заголовок: gfilatov2002 пишет В..
gfilatov2002 пишет
цитата:
Возможно, переменная lAdjColumn д.б. установлена в .T. по умолчанию
Конфликта с :AdjColumns() быть не должно, это для работы - ширина всех колонок < ширины тсб, :lAdjColumn := .T. имеет смысл, если ширина всех колонок > ширины тсб, при этом сменится (от old версии) показ колонок. Как реагировать пользователи будут ? Можно попробовать поставить :lAdjColumn := .T.
Также имеются дополнительные сборки для следующих Си-компиляторов:
- 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. (под заказ)
Благодарю за Ваше внимание и поддержку
Andrey
постоянный участник
Пост 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
* Enhanced: Added possibility to modify of 'OnDblClick' event for the LABEL and IMAGE controls at run-time with: - function syntax: SetProperty(Form,Control,'OnDblClick',{|| MsgInfo('New action')}) - pseudo-OOP syntax: Form.Control.OnDblClick := {|| MsgInfo('New action')} Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\MP3Info) * Enhanced: Added possibility of in-line usage of the commands [DE]ACTIVATE TIMER <name> OF <parent> for the Timer control. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\MP3Info) * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.30.0dev (from 3.29.0). Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: 'MP3 Info Class Test' sample. Based upon a contribution of Victor Daniel Cuatecatl Leon for FiveWin library. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\TestMP3Info) * Updated: 'Replacement for Clipper ALERT() function' sample: - New: using of the codeblock bOnInit in the Alert* functions. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\WALERT_2) * Updated: 'DOS-like menu with using of TsBrowse' sample. - updated for the recent changes in Minigui core. Problem was reported by Verchenko Andrey. (see in folder \samples\Advanced\Tsb_menu)
Andrey
постоянный участник
Пост N: 6410
Зарегистрирован: 12.09.06
Отправлено: 29.08.19 13:08. Заголовок: Пере собрал некоторы..
Пере собрал некоторые программы ! Полёт нормальный !
Вопрос по COMBOBOXEX возник. А нельзя увеличить ту часть со стрелкой вниз ? А то её через микроскоп разглядывать нужно. Взять стрелку с вертикального скролинга и повесить вместо этого значка.
Юзера слёзно просят увеличить.
gfilatov2002
moderator
Пост N: 1577
Зарегистрирован: 11.02.10
Отправлено: 05.09.19 10:19. Заголовок: Всем кому это интересно
Обновил сборку 19.08 (Update 2) с учетом последних наработок
* New: Added the useful pseudo-function HMG_TimeMS( TS1 [, TS2] ) for calculation of an elapsed time in the milliseconds. Sample code: #include "minigui.ch" STATIC s_tStartTime INIT PROCEDURE OnStartup() s_tStartTime := hb_DateTime() RETURN PROCEDURE main() hb_idleSleep(.1) RETURN EXIT PROCEDURE OnExit() ? "You used this program by", HMG_TimeMS( s_tStartTime ) RETURN Suggested and contributed by Sergej Kiselev. * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.30.0dev. Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: 'HMG Misc' sample. Borrowed from HMG 4 project. Adapted by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\Misc) * New: 'OrdWildSeek() Test' sample. Note: Harbour has this function in core without documentation. Based upon a contribution of Mario Mansilla and Pete D. (see in folder \samples\Basic\OrdWildSeek) * New: 'PE Test' sample. Contributed by Pierpaolo Martinello <pier.martinello[at]alice.it> (see in folder \samples\Advanced\PE_Test) * Updated: 'Multi Instance' sample: - updated for the recent changes in Minigui core. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\MULTI_INSTANCE) * Updated: 'MiniGUI DataBase Utility' sample: - updated a memo field editing with using of the function InputBox(). Suggested by Pierpaolo Martinello <pier.martinello[at]alice.it>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\mgDBU)
Благодарю за Ваше внимание и поддержку
Avf
Пост 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
список констант для MS Word "word.ch", MS Excel "excel.ch"
Такие списки уже есть в папке samples\Advanced\Tsb_Export
Новичок
Пост N: 76
Зарегистрирован: 22.04.15
Отправлено: 13.09.19 12:10. Заголовок: Видел, устарели уже ..
Видел, устарели уже - добавлял константы да и желательно в основной каталог перебросить, чтобы там постоянно жило :)
gfilatov2002
moderator
Пост N: 1583
Зарегистрирован: 11.02.10
Отправлено: 16.09.19 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)
Ваши комментарии приветствуются
SergKis
постоянный участник
Пост N: 2884
Зарегистрирован: 17.02.12
Отправлено: 16.09.19 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>
gfilatov2002
moderator
Пост N: 1584
Зарегистрирован: 11.02.10
Отправлено: 16.09.19 10:56. Заголовок: SergKis пишет: О че..
SergKis пишет:
цитата:
О чем речь
Речь о том, что сегментация редко используемого кода в ядре библиотеки позволила уменьшить размер экзешника mgDBU на 5 килобайт, например
SergKis
постоянный участник
Пост N: 2886
Зарегистрирован: 17.02.12
Отправлено: 16.09.19 11:27. Заголовок: gfilatov2002 пишет Р..
gfilatov2002 пишет
цитата:
Речь о том
Спасибо за пояснение.
Avf
Пост N: 31
Зарегистрирован: 19.10.05
Отправлено: 16.09.19 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" ( и наверное не только ) выполнение идет на
Может я и не прав, но DoMethod() нельзя так использовать. Здесь нужно использовать SetProperty()
Avf
Пост N: 32
Зарегистрирован: 19.10.05
Отправлено: 16.09.19 12:14. Заголовок: Почему нельзя ? До м..
Почему нельзя ? До марта 2019 было можно и все работало. Кроме того, в другой нотации ( Form_1.Browse_1.Value := RecNo() ) не всегда удобно использовать вместо имен окна/бровса переменные.
Для быстрого обнаружения ошибок или опечаток при неправильном применении свойств и методов.
Andrey пишет:
цитата:
DoMethod() нельзя так использовать
Да, верно. Потому что VALUE - это свойство, а не метод у элемента управления
Avf
Пост N: 33
Зарегистрирован: 19.10.05
Отправлено: 16.09.19 12:30. Заголовок: Спасибо за разъяснен..
Спасибо за разъяснение.
SergKis
постоянный участник
Пост N: 2888
Зарегистрирован: 17.02.12
Отправлено: 16.09.19 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 := ... и т.д.
Avf
Пост N: 34
Зарегистрирован: 19.10.05
Отправлено: 16.09.19 13:33. Заголовок: Именно использование..
Именно использование макроподстановки и является неудобством.
цитата:
Если использовать SET OOP ON и события, то в них будет среда This всегда
Спасибо.
SergKis
постоянный участник
Пост N: 2889
Зарегистрирован: 17.02.12
Отправлено: 16.09.19 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 := ...
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.
Avf
Пост N: 36
Зарегистрирован: 19.10.05
Отправлено: 16.09.19 15:25. Заголовок: Смотря когда Я согла..
цитата:
Смотря когда
Я согласен. Но это уже особенности языка.
avf2007
Пост N: 3
Зарегистрирован: 18.02.11
Отправлено: 21.09.19 10:53. Заголовок: Случайно обратил вни..
Случайно обратил внимание : в h_browse.prg :
*-----------------------------------------------------------------------------* FUNCTION _GetBrowseFnValue ( cTemp ) *-----------------------------------------------------------------------------* LOCAL cRet := 'Nil'
SWITCH ValType ( cTemp )
CASE 'N' cRet := hb_ntos ( &cTemp ) ...
наверное, должно быть : SWITCH ValType ( &cTemp )
Andrey
постоянный участник
Пост N: 6448
Зарегистрирован: 12.09.06
Отправлено: 21.09.19 22:06. Заголовок: На нормальных компах..
На нормальных компах под Win7 заметно очень скачки окна HMG_Alert(). Сначала окно появляется чуток пониже верха экрана и в левом углу, потом скачет в центр экрана. Под Win8.1 вроде не замечал, но у меня комп побыстрее обычного, офисного компа. Почему так ? Можно ли убрать эти скачки ?
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
RETURN NIL
Это более правильно, по мне, т.к. в bInit можно изменить размеры окна и повторить This.Center для них или не делать центровку, а задать row, col позицию
SergKis
постоянный участник
Пост N: 2912
Зарегистрирован: 17.02.12
Отправлено: 21.09.19 22:43. Заголовок: PS к этому (из пред...
PS к этому (из пред. версии) можно в DEFINE WINDOW ... добавить NOSHOW, а в ON INIT This.Show()
SergKis
постоянный участник
Пост N: 2913
Зарегистрирован: 17.02.12
Отправлено: 21.09.19 23:07. Заголовок: SergKis пишет к этом..
SergKis пишет
цитата:
к этому (из пред. версии) можно в DEFINE WINDOW ... добавить NOSHOW, а в ON INIT This.Show()
Проверил на примере Advanced\App_OopReport\demo2.prg Все нормально, перемещал main окно в разные углы, вызывал карточку, менял вызывая справочник, жал Cancel ... все HMG_Alert() отработали как надо.
Andrey
постоянный участник
Пост N: 6449
Зарегистрирован: 12.09.06
Отправлено: 21.09.19 23:16. Заголовок: SergKis пишет: Все ..
SergKis пишет:
цитата:
Все нормально, перемещал main окно в разные углы, вызывал карточку, менял вызывая справочник, жал Cancel ... все HMG_Alert() отработали как надо.
Теперь бы в самой библиотеке МиниГуи поменять, чтобы в следующей версии это не вылезло опять !
gfilatov2002
moderator
Пост N: 1586
Зарегистрирован: 11.02.10
Отправлено: 22.09.19 14:18. Заголовок: SergKis пишет: В пр..
SergKis пишет:
цитата:
В предыдущей версии hmg было
Сделал, как в предыдущей версии... Кстати, это SergKis попросил изменить, когда работал с карточкой в примере Advanced\App_OopReport\demo2.prg
Эти изменения будут включены в 4-ю бета-версию новой сборки
SergKis
постоянный участник
Пост N: 2923
Зарегистрирован: 17.02.12
Отправлено: 25.09.19 12:50. Заголовок: gfilatov2002 Может ..
gfilatov2002 Может в StatusBar завести item для индикации RddSetDefault() и click для установки\смены ACTION {|| RddSetDefault( iif( RddSetDefault() == 'DBFCDX', 'DBFNTX', 'DBFCDX' ) ) }
gfilatov2002
moderator
Пост N: 1589
Зарегистрирован: 11.02.10
Отправлено: 25.09.19 14:54. Заголовок: SergKis пишет: в St..
SergKis пишет:
цитата:
в StatusBar завести item для индикации RddSetDefault() и click для установки\смены
Сделал, конечно Благодарю за помощь
SergKis
постоянный участник
Пост N: 2924
Зарегистрирован: 17.02.12
Отправлено: 26.09.19 11:07. Заголовок: gfilatov2002 По мне..
gfilatov2002 По мне, использовать GetStartupFolder() при работе с dbf не очень хорошо. Работаю в Far и мне нужно тек. каталог, т.е. mgDbu.exe U09.dbf или mgDbu.exe .\2019\R08.dbf а зацеплено везде GetStartupFolder()
gfilatov2002 Предложение. У себя сделал для многострочных колонок, прошло на ура.
CLASS TSColumn ... DATA nEditRow AS NUMERIC // DATA nEditCol AS NUMERIC // DATA nEditHeight AS NUMERIC // DATA nEditWidth AS NUMERIC // ... METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, nClrBack ) CLASS TSBrowse ... ::cChildControl := GetUniqueName( "GetBox" )
If oCol:nEditHeight > 0 nHeight := oCol:nEditHeight IF oCol:nEditRow > 0 nRow := oCol:nEditRow ENDIF IF oCol:nEditCol > 0 nCol := oCol:nEditCol ENDIF EndIf
oCol:oEdit := TGetBox():New( nRow, nCol, bSETGET( uValue ), Self, nWidth, nHeight, ; ... Применение. Двухстрочная строка тсб. Есть 2е колонки с ценой, 1ая показ в первой строке, 2ая во второй. Цены надо править, т.е GetBox там где своя цена соответсвено. В программе дл тсб :InsColumn( 1, gCols( ArrayNo )) // первая цена oCol := :GetColumn("R_10") oCol:bDecode := {|nv| hb_ntos(nv)+CRLF+' ' } oCol:bPrevEdit := {|nv,ob| Prev_Cena0(ob, 1 ) } oCol:bPostEdit := {|nv,ob| Post_Cena0(ob, 1, nv) } oCol:lEdit := .T. // вторая цена, вторая строка oCol := :GetColumn("R_12") oCol:bDecode := {|nv| ' ' + CRLF + hb_ntos(nv) } oCol:bPrevEdit := {|nv,ob| Prev_Cena0(ob, 2 ) } oCol:bPostEdit := {|nv,ob| Post_Cena0(ob, 2, nv) } oCol:lEdit := .T.
ADD SUPER HEADER TO oBrw FROM 1 TO :nColumn("R_2") TITLE "Excel" ADD SUPER HEADER TO oBrw FROM :nColumn("R_2" )+1 TO :nColumn("R_10")-1 TITLE gTxt(Material) ADD SUPER HEADER TO oBrw FROM :nColumn("R_10") TO :nColCount() TITLE gTxt(Ucen) ... *-----------------------------------------------------------------------------* STAT FUNC Prev_Cena0( oBrw, nLine ) *-----------------------------------------------------------------------------* LOCAL oCol, aLine, cPic := '99999.9999'
RETURN .T. *-----------------------------------------------------------------------------* STAT FUNC Post_Cena0( oBrw, nLine, nCena ) *-----------------------------------------------------------------------------* LOCAL aLine, cKodK, nCenK, cKod, nCnt LOCAL nColC := oBrw:nCell - 1 // 7 LOCAL nColK := Len(oBrw:aArray[1]) - 1 // 9
nCenK := Val( StrZero(nCena, 11, 4) )
WITH OBJECT oBrw
If nLine == 1
:aArray[ :nAt ][ nColC ] := nCenK :DrawSelect()
Else
cKodK := :aArray[ :nRowPos ][ nColK ] nCnt := 0
FOR EACH aLine IN :aArray nCnt += 1 cKod := aLine[ nColK ] If ! Empty( cKod ) .and. cKodK == cKod :aArray[ nCnt ][ nColC ] := nCenK EndIf NEXT
:Refresh()
EndIf
END WITH
RETURN .T. ...
В методе :Edit() сделанное для GetBox можно распространить для всех контролов, кроме EditBox
gfilatov2002
moderator
Пост N: 1592
Зарегистрирован: 11.02.10
Отправлено: 30.09.19 10:34. Заголовок: SergKis пишет: В ме..
SergKis пишет:
цитата:
В методе :Edit() сделанное для GetBox можно распространить для всех контролов, кроме EditBox
Добавил эти изменения, хотя у меня создается впечатление, что кроме Вас никто это не будет использовать Благодарю за помощь в любом случае...
SergKis
постоянный участник
Пост N: 2929
Зарегистрирован: 17.02.12
Отправлено: 30.09.19 12:32. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет
цитата:
Добавил эти изменения, хотя у меня создается впечатление, что кроме Вас никто это не будет использовать
Ради только меня не стоит это делать. В моей версии это есть. TBrowse таблица, как бы, осноаной рабочий инструмент. Разве не возникает потребности организовать ввод в отдельной строке (задаем заранее в каждой колонке координаты) или все колонки вводить в одних координатах (как в Excel) ? Это все без доп. GetBox и ... в связке с тсб.
PS В TSCOLUMN добавлен еще, т.к. Picture отображения тсб колонки и Edit ее могут быть разными. DATA cEditPicture
... METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, nClrBack ) CLASS TSBrowse ... If oCol:nEditHeight > 0 nHeight := oCol:nEditHeight IF oCol:nEditRow > 0 nRow := oCol:nEditRow ENDIF IF oCol:nEditCol > 0 nCol := oCol:nEditCol ENDIF EndIf If oCol:cEditPicture != Nil cPicture := oCol:cEditPicture EndIf ...
gfilatov2002
moderator
Пост N: 1593
Зарегистрирован: 11.02.10
Отправлено: 30.09.19 14:16. Заголовок: SergKis пишет: В TS..
SergKis пишет:
цитата:
В TSCOLUMN добавлен еще, т.к. Picture отображения тсб колонки и Edit ее могут быть разными. DATA cEditPicture
Добавил такое свойство (и его обработку) также. Благодарю за помощь
Добавил эти изменения, хотя у меня создается впечатление, что кроме Вас никто это не будет использовать
Я буду использовать. Сталкивался с таким, и не знал как сделать. Только бы надо примерчик небольшой сделать или показать уже в готовом примере как такое можно использовать.
SergKis пишет:
цитата:
TBrowse таблица, как бы, осноаной рабочий инструмент.
Просто отличный инструмент !!! Вот так можно сделать TBrowse-таблицу:
gfilatov2002 Немного изменил, что бы не перекрывались :nEditWidth при перерисовке с :llAdjColumns и заданным :nEditWidth для Edit
DATA cEditPicture // DATA nEditRow AS NUMERIC // DATA nEditCol AS NUMERIC // DATA nEditHeight AS NUMERIC // DATA nEditWidth AS NUMERIC // DATA nEditWidthDraw AS NUMERIC // DATA nEditMove AS NUMERIC // post editing cursor movement ... METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... oColumn:nEditWidthDraw := 0
DEFINE SPLITBOX HANDLE hSpl DEFINE TOOLBAR ToolBar_1 CAPTION "" BUTTONSIZE 100,32 FLAT BUTTON Seek CAPTION 'Seek' PICTURE 'n1' SEPARATOR WHOLEDROPDOWN DEFINE DROPDOWN MENU BUTTON Seek ITEM "Seek first 15.10.2018" IMAGE 'n1' ACTION mySeek(oBrw, 1, .F.) ITEM "Seek last 15.10.2018" IMAGE 'n2' ACTION mySeek(oBrw, 1, .T.) SEPARATOR ITEM "Seek first 17.10.2018" IMAGE 'n3' ACTION mySeek(oBrw, 2, .F.) ITEM "Seek last 17.10.2018" IMAGE 'n4' ACTION mySeek(oBrw, 2, .T.) SEPARATOR ITEM "Seek first 20.10.2018" IMAGE 'n5' ACTION mySeek(oBrw, 3, .F.) ITEM "Seek last 20.10.2018" IMAGE 'n6' ACTION mySeek(oBrw, 3, .T.) END MENU BUTTON Find CAPTION 'Find' PICTURE 'n2' SEPARATOR WHOLEDROPDOWN DEFINE DROPDOWN MENU BUTTON Find ITEM 'Find first "aaa"' IMAGE 'n1' ACTION myFind(oBrw, 'aaa', .F.) ITEM 'Find next "aaa"' IMAGE 'n2' ACTION myFind(oBrw, 'aaa', .T.) SEPARATOR ITEM 'Find first "ccc"' IMAGE 'n3' ACTION myFind(oBrw, 'ccc', .F.) ITEM 'Find next "ccc"' IMAGE 'n4' ACTION myFind(oBrw, 'ccc', .T.) END MENU BUTTON Scope CAPTION 'Scope' PICTURE 'n3' SEPARATOR WHOLEDROPDOWN DEFINE DROPDOWN MENU BUTTON Scope ITEM "Scope first 15.10.2018" IMAGE 'n1' ACTION myScope(oBrw, 1, .F.) ITEM "Scope last 15.10.2018" IMAGE 'n2' ACTION myScope(oBrw, 1, .T.) SEPARATOR ITEM "Scope first 17.10.2018" IMAGE 'n3' ACTION myScope(oBrw, 2, .F.) ITEM "Scope last 17.10.2018" IMAGE 'n4' ACTION myScope(oBrw, 2, .T.) SEPARATOR ITEM "Scope first 20.10.2018" IMAGE 'n5' ACTION myScope(oBrw, 3, .F.) ITEM "Scope last 20.10.2018" IMAGE 'n6' ACTION myScope(oBrw, 3, .T.) SEPARATOR ITEM "Scope first 15.10.2018-17.10.2018" IMAGE 'n7' ACTION myScope(oBrw, 4, .F.) ITEM "Scope last 15.10.2018-17.10.2018" IMAGE 'n8' ACTION myScope(oBrw, 4, .T.) SEPARATOR ITEM "Scope first 17.10.2018-20.10.2018" IMAGE 'n9' ACTION myScope(oBrw, 5, .F.) ITEM "Scope last 17.10.2018-20.10.2018" IMAGE 'n10' ACTION myScope(oBrw, 5, .T.) SEPARATOR ITEM "Reset scope first" IMAGE 'n11' ACTION myScope(oBrw, 0, .F.) ITEM "Reset scope last " IMAGE 'n12' ACTION myScope(oBrw, 0, .T.) END MENU BUTTON Scope2 CAPTION 'Complex Scope' PICTURE 'n4' SEPARATOR WHOLEDROPDOWN DEFINE DROPDOWN MENU BUTTON Scope2 ITEM "Complex Scope first Nr.=444" IMAGE 'n1' ACTION myScope2(oBrw, 1, .F.) ITEM "Complex Scope last Nr.=444" IMAGE 'n2' ACTION myScope2(oBrw, 1, .T.) SEPARATOR ITEM "Complex Scope first Nr.=555" IMAGE 'n3' ACTION myScope2(oBrw, 2, .F.) ITEM "Complex Scope last Nr.=555" IMAGE 'n4' ACTION myScope2(oBrw, 2, .T.) SEPARATOR ITEM "Reset scope first" IMAGE 'n5' ACTION myScope2(oBrw, 0, .F.) ITEM "Reset scope last " IMAGE 'n6' ACTION myScope2(oBrw, 0, .T.) END MENU BUTTON Delete CAPTION 'Delete tag' PICTURE 'n5' SEPARATOR WHOLEDROPDOWN DEFINE DROPDOWN MENU BUTTON Delete ITEM "Goto first" IMAGE 'n1' ACTION myDelete(oBrw, 0, .F.) ITEM "Goto last " IMAGE 'n2' ACTION myDelete(oBrw, 0, .T.) SEPARATOR ITEM "Set deleted on" IMAGE 'n3' ACTION myDelete(oBrw, 1, .F.) ITEM "Reset view" IMAGE 'n4' ACTION myDelete(oBrw, 2, .F.) END MENU BUTTON InfoDb CAPTION 'Info-Dbase' PICTURE 'n0' SEPARATOR WHOLEDROPDOWN DEFINE DROPDOWN MENU BUTTON InfoDb ITEM "Database Information" IMAGE 'n0' ACTION InfoDbase() END MENU END TOOLBAR
DEFINE TOOLBAR ToolBar_2 CAPTION "" BUTTONSIZE 42,32 FLAT BUTTON Exit CAPTION 'Exit' PICTURE 'exit' ACTION ThisWindow.Release() END TOOLBAR END SPLITBOX
y := x := 5 g := 2 w := 90 h := 30
y += GetWindowHeight(hSpl) x := 5
@ y, x LABEL Label_1 WIDTH This.ClientWidth - x * 2 HEIGHT 24 VALUE ' ' ; VCENTERALIGN y += 24 + 2 w := This.ClientWidth - x * 2 h := This.ClientHeight - y - 2 - This.StatusBar.Height
oBrw := CreateBrowse(y, x, w, h)
oBrw:bChange := {|ob| _wPost(1, ob, ob) }
FOR EACH o IN oBrw:aColumns o:bGotFocus := {|no,nc,ob| _wPost(1, ob, ob) } o:nEditRow := This.Label_1.Row o:nEditCol := This.Label_1.Col o:nEditWidth := This.Label_1.Width o:nEditHeight := This.Label_1.Height o:lEdit := .T. NEXT
FUNCTION CreateBrowse( y, x, w, h ) LOCAL nI, aFields, oBrw
DEFINE TBROWSE oBrw AT y, x ; OF Form_0 ; ALIAS "TEST" ; WIDTH w ; HEIGHT h ; GRID ; COLORS { CLR_BLACK, CLR_BLUE }
:SetAppendMode( .F. ) // вставка записи запрещена (в конце базы стрелкой вниз) :SetDeleteMode( .T., .T. ) // удаление записи разрешено
:lNoHScroll := .T. // показ горизонтального скролинга :lCellBrw := .F. :lInsertMode := .T. // флаг для переключения режима Вставки при редактировании :lPickerMode := .F. // ввод формата колонки типа ДАТА сделать через цифры
END TBROWSE
ADD COLUMN TO TBROWSE oBrw DATA {|| hb_ntoc((oBrw:cAlias)->( OrdKeyNo() )) } ; HEADER "№№" SIZE 40 ; COLORS {CLR_BLACK, WHITE} ALIGN DT_CENTER, DT_CENTER, DT_CENTER ; NAME NN
oBrw:AdjColumns() oBrw:SetNoHoles() // убрать дырку внизу таблицы перед подвалом
oBrw:GoPos( 7,3 ) // передвинуть МАРКЕР на 5 строку и 3 колонку
RETURN oBrw
FUNCTION UseOpenBase() LOCAL aStr := {} LOCAL cDbf := GetStartUpFolder() + "\test5" LOCAL cIndx := cDbf LOCAL lDbfNo, aChr := {} LOCAL aAlias := {} LOCAL i, c, d, j, n := 0 LOCAL a := {'aaa','bbb','ccc','ddd','eee'} LOCAL r := {'c','b','a',' '}
IF lDbfNo .OR. !File( cIndx+'.cdx' ) USE ( cDbf ) ALIAS TEST EXCLUSIVE NEW
c := CtoD('20.10.2018') WHILE TEST->( RecCount() ) < ( 15 * 4 ) d := c - n++ TEST->( dbAppend() ) TEST->F1 := d TEST->F2 := "Line - " + str( n, 3 ) + " " + REPL(aChr[n], 12 ) TEST->F3 := n TEST->F4 := ( n % 2 ) == 0 For i := 1 To Len(a) TEST->( dbAppend() ) TEST->F1 := d TEST->F0 := i TEST->F2 := a[ i ] TEST->F3 := i * 10 Next END
n := 10 c := 10 j := 1 GO TOP DO WHILE !EOF() i := RECNO() TEST->F5 := HB_NtoS(n) IF ( i % 2 ) == 0 TEST->F5 := HB_NtoS(n) + r[1] ENDIF IF ( i % 3 ) == 0 TEST->F5 := HB_NtoS(n) + r[2] ENDIF IF ( i % 4 ) == 0 TEST->F5 := HB_NtoS(n) + r[3] ENDIF IF ( i % 5 ) == 0 n++ ENDIF
IF ( i % 8 ) == 0 .OR. ( i % 9 ) == 0 TEST->F0 := 444 TEST->F2 := ALLTRIM(TEST->F2) + " (444)" TEST->F5 := HB_NtoS(c) + r[j] j++ j := IIF(j > LEN(r), 1, j) c-- ENDIF IF ( i % 11 ) == 0 .OR. ( i % 12 ) == 0 TEST->F0 := 555 TEST->F2 := ALLTRIM(TEST->F2) + " (555)" TEST->F5 := HB_NtoS(c) + r[j] c-- ENDIF c := IIF(c < 1, 8, c)
GO TOP INDEX ON DTOS(F1)+STR(F0) TAG DTN FOR !Deleted() INDEX ON RECNO() TAG DEL FOR Deleted() // Необходимо для этого индекса указать длину, иначе нет ясности к какой длине приводить // It is necessary to specify the length for this index, otherwise it is not clear what length to bring INDEX ON STR(F0, 7)+STR(VAL(F5), 4)+F5 TAG ROOM FOR !Deleted() USE ENDIF
SET AUTOPEN ON
USE ( cDbf ) ALIAS TEST SHARED NEW If OrdCount() > 0 OrdSetFocus(1) EndIf GO TOP
SET AUTOPEN OFF
AADD( aAlias, ALIAS() )
RETURN aAlias
FUNCTION mySeek( oBrw, nDat, lLast ) LOCAL lRet, cDat, cVal LOCAL aDat := { ; CtoD('15.10.2018'), ; CtoD('17.10.2018'), ; CtoD('20.10.2018'), ; }
DATA Index INIT 0 DATA BadDate INIT .F. ... FUNCTION _DefineGetBox ( ControlName, ParentFormName, x, y, w, h, Value, ; ... oGet:UpdateBuffer() oGet:Index := k
Public &mVar. := k ... CLASS TGetBox FROM TControl ... METHOD VarGet()
If ! Empty( oCol:aKeyEvent ) ... тогда в примере (был выше) добавим FOR EACH o IN oBrw:aColumns o:bGotFocus := {|no,nc,ob| _wPost(1, ob, ob) } o:nEditRow := This.Label_1.Row o:nEditCol := This.Label_1.Col o:nEditWidth := This.Label_1.Width o:nEditHeight := This.Label_1.Height o:nEditAlign := DT_LEFT o:lEdit := .T. NEXT ... тогда GetBox будут, как и Label, в одной позиции
Еще можно добавить свойство ALIGN в команды #command @ <row>, <col> GETBOX <name> ; ...
- oGet:Index - это oGet:Atx - oGet:Handle - это oGet:hWnd
SergKis
постоянный участник
Пост N: 2933
Зарегистрирован: 17.02.12
Отправлено: 03.10.19 17:20. Заголовок: gfilatov2002 пишет В..
gfilatov2002 пишет
цитата:
Ведь эти значения уже есть в классе
Если есть, то, конечно, не нужны. Сильно не вникал, но названия особенно :Atx - догадываться надо. Скопировал со своей версии. Но чтобы голова не болела, сделал бы ACCESS Index INLINE ::Atx ACEESS Handle INLINE ::hWnd
Отправлено: 22.10.19 12:28. Заголовок: Dima Спасибо. А как..
Dima Спасибо. А как с лицензией ? Если она коммерческая, то, наверно и ставить не буду.
Andrey
постоянный участник
Пост N: 6490
Зарегистрирован: 12.09.06
Отправлено: 22.10.19 13:39. Заголовок: > Какой статус л..
> Какой статус лицензии у BCC 5.8 ? Григорий так мне написал:
Лицензия подобна BCC 5.5 (она есть в архиве BCC 5.8 на сайте). В любом случае, это такой же устаревший продукт (2006 года выпуска), как и BCC 5.5.
SergKis
постоянный участник
Пост N: 2959
Зарегистрирован: 17.02.12
Отправлено: 22.10.19 15:08. Заголовок: Andrey пишет это так..
Andrey пишет
цитата:
это такой же устаревший продукт (2006 года выпуска), как и BCC 5.5.
Достаточно
LIMITED WARRANTY Except with respect to the Redistributables, which are provided "as is," without warranty of any kind, Borland warrants that the Software, as updated and when properly used, will perform substantially in accordance with the accompanying documentation, and the Software media will be free from defects in materials and workmanship, for a period of ninety (90) days from the date of receipt. Any implied warranties on the Software are limited to ninety (90) days. Some states/jurisdictions do not allow limitations on duration of an implied warranty, so the above limitation may not apply to you.
Доказывать, что ты не "верблюд", в наших краях себе дороже выйдет. В таком варианте, для меня, проект hmg закрыт
LIMITED WARRANTY Except with respect to the Redistributables, which are provided "as is," without warranty of any kind, Borland warrants that the Software, as updated and when properly used, will perform substantially in accordance with the accompanying documentation, and the Software media will be free from defects in materials and workmanship, for a period of ninety (90) days from the date of receipt. Any implied warranties on the Software are limited to ninety (90) days. Some states/jurisdictions do not allow limitations on duration of an implied warranty, so the above limitation may not apply to you.
Доказывать, что ты не "верблюд", в наших краях себе дороже выйдет. В таком варианте, для меня, проект hmg закрыт
Может я чего то не понял, но точно такая же ограниченная гарантия есть у BCC 5.5 В чем тогда проблема с BCC 5.8.2
SergKis
постоянный участник
Пост N: 2960
Зарегистрирован: 17.02.12
Отправлено: 22.10.19 15:39. Заголовок: gfilatov2002 пишет В..
gfilatov2002 пишет
цитата:
В чем тогда проблема с BCC 5.8.2
Везде про bcc 55 пишут
цитата:
Особенностью этого программного продукта, кроме бесплатной лицензии, является отсутствие интегрированной визуальной среды разработки и библиотек компонентов, входящих в состав полного коммерческого продукта Borland Builder C++. Однако в бесплатный пакет входят почти все заголовочные и библиотечные файлы, необходимые для разработки 32-разрядных приложений под Windows
Про bcc 5.8.2 не видел. У нас есть организация, следящая за лицензиями (ходят по клиентам с проверками). Если я приду и попаду у клиента на такую шнягу, то мой ноут может оказаться забранным на n-ое время, а вернется ли, х.з. Стукачков много развелось (по разным причинам) к тому же. На bcc 5.5 в целом программ нет (небольшая утилита), вся основная работа на vc hmg 2.07 версии. Так что, лучше bcc 5.8 не буду устанавливать совсем
По большому счету, этот компилятор можно не устанавливать, поскольку все библиотеки, скомпилированные BCC 5.8, прекрасно работают с BCC 5.5. У них полная бинарная совместимость
SergKis
постоянный участник
Пост N: 2961
Зарегистрирован: 17.02.12
Отправлено: 22.10.19 15:58. Заголовок: Dima пишет MinGW пос..
Dima пишет
цитата:
MinGW поставь
Зачем ? Рабочая версия на vc есть. Версия с bcc 55 использовалась как пример исследования новшеств. Unicode нет версии. Из hmg в рабочей версии исп. только browse и tsbrowse. Все печати, EAN коды, pdf, mail, ... vo 2.7 все umicode TsBrowse у меня практически идентичны ...
Отправлено: 22.10.19 16:02. Заголовок: gfilatov2002 пишет У..
gfilatov2002 пишет
цитата:
У них полная бинарная совместимость
А поковыряться ? Пересобрать lib-ы ?
Andrey_IV
Пост N: 31
Зарегистрирован: 20.04.07
Отправлено: 23.10.19 02:28. Заголовок: BCC 5.82 Кодировка Win-1251 в файле ресурсов
Всем доброго времени суток!
В BCC 5.5 (да и в BCC 5.6), если в файле ресурсов .RC писал русскими буквами в кодировке Win-1251 - то на экране все отображалось корректно Когда попробовал в компилировать программу в BCC 5.82 - получил крякозябры. Попробовал забить вместо латинских, русскими в примере: C:\MiniGUI\SAMPLES\BASIC\TEST_APPLICATION\demo.rc - та-же история. Крякозябры вместо русских букв. Это только в файле ресурсов. Если просто в .PRG пишу русскими - все нормально. Это вообще можно победить ? Не может-же быть такого, что компилятор не дружит с кодировкой Win-1251 ТОЛЬКО в ресурсах. Или может ???
Рабочая версия на vc есть. Версия с bcc 55 использовалась как пример исследования новшеств.
Давайте тогда перейдём полностью на MSVC ?
Andrey_IV
Пост N: 32
Зарегистрирован: 20.04.07
Отправлено: 24.10.19 10:00. Заголовок: BCC 5.82 Кодировка Win-1251 в файле ресурсов - УТОЧНЕНИЕ
Не точно выразился
1) Кодировка RC-файла конечно-же Win-1251 2) Речь идёт не об этом блоке RC-файла, который привёл в приме Григорий [quote]` { POPUP "&Файл" { MENUITEM "&Выход", ID_FILE_EXIT } POPUP "&Помощь" { MENUITEM "&О программе", ID_HELP_ABOUT } } [quote]` а вот об этом (то, что в проводнике "Свойства файла", закладка "Подробно" - в общем информация "О программе" (проверял в Windows 7). Возьмем файл: C:\MiniGUI\SAMPLES\Applications\SysInfo\SysInfo.rc Меняю кодировку на Win-1251, пишу на русском (извините - просто пример) [quote]` 1 VERSIONINFO FILEVERSION 1,1,0,0 PRODUCTVERSION 1,0,0,0 FILEOS 0x4 FILETYPE 0x1 { BLOCK "StringFileInfo" { BLOCK "040904b0" { VALUE "FileDescription", "Системная информация\000" VALUE "FileVersion", "1.1.0.0" VALUE "InternalName", "SysInfo\000" VALUE "LegalCopyright", "Freeware 2003-2012\000" VALUE "LegalTrademarks", "Harbour" VALUE "OriginalFilename", "SysInfo.exe" VALUE "CompanyName", "" VALUE "ProductName", "Утилита MiniGUI" VALUE "ProductVersion", "1.0.0.0" VALUE "Comments", "Создано Григорием Филатовым <gfilatov@inbox.ru>\000" } }
BLOCK "VarFileInfo" { VALUE "Translation", 0x0409 0x04B0 } }
[quote]` Компилирую, в проводнике в свойствах файла в описании файла и в названии продукта вижу крякозябры
Пробовал менять Английский на Русский // BLOCK "040904b0" BLOCK "041904e3" и // VALUE "Translation", 0x0409 0x04B0 VALUE "Translation", 0x0419 0x04E3
Ничего не даёт
Dima
администратор
Пост N: 7132
Зарегистрирован: 17.05.05
Отправлено: 24.10.19 20:32. Заголовок: Там вроде нужно прик..
Там вроде нужно прикручивать windows manifest и кодировка в rc должна быть utf-8
gfilatov2002
moderator
Пост N: 1615
Зарегистрирован: 11.02.10
Отправлено: 25.10.19 09:34. Заголовок: Всем кому это интересно
Обновил сборку 19.10 (Update 1) с учетом последних наработок
* Fixed: Problem with a handling of 'Transparent' property of a label which was placed on top of an image (introduced in the build 19.10). Bug was reported by Valtecom Jose Martins. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Modified: ButtonEx: using of the Harbour function hb_tokenCount() instead of a local implementation. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo3.prg in folder \samples\Basic\ButtonEx) * Enhanced: Added the Metro color's constants to the header file include\i_color.ch. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: HBPrinter library v.2.48: - modified toolbar buttons placing in the Preview form and a look of Options dialog; - updated Greek language translation. Based upon a contribution of Pete D. <pete_westg/at/yahoo.gr>. Revised by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\HBPrinter) * Updated: Harbour Compiler 3.2.0dev (SVN 2019-09-11 10:16): * Updated: OpenSSL wrapper for using of the version 1.0.2t. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'Circle Progress Animation' sample. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\CircleProgressAnimation)
gfilatov2002
moderator
Пост N: 1616
Зарегистрирован: 11.02.10
Отправлено: 30.10.19 10:47. Заголовок: Всем кому это интересно
Обновил сборку 19.10 (Update 2) с учетом последних наработок
Базовый дистрибутив для BCC 5.8.2 находится по адресу
* Updated: HbSQLite3 library: - update for using SQLITE3 version 3.31.0dev (from 3.30.1). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2019-09-11 10:16): * the hbrdd and hbrtl core libraries were compiled with the default switch -l for a smallest size. Note: the minimal supported platform is Windows XP now. The recommended platforms are Windows 7 and later. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: HMGS-IDE v.1.4.3.7 Project Manager and Two-Way Visual Form Designer: * Changed: the default C-compiler is BCC 5.8 now instead of BCC 5.5. * Updated: in mpmc.prg use Harbour contrib hbziparc library instead of obsolete ziparchive library. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \Ide\Samples\Zip) * Updated: MPM and MPMC utilities will use Harbour contrib hbziparc library. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folders \Utils\MPM and \Utils\MPMC)
Они раздают бесплатно 32-битный компилятор BCC 10.1, который основан на LLVM/Clang C 3.3.1 и датирован 2016 годом.
Проблема в том, что собрать Харбор для этого компилятора стандартным образом не получится. После многих попыток мне, правда, удалось это сделать. Результат см. ниже
Если массив нельзя, то тогда бы сделать перечисление клавиш:
ON KEY F1 ACTION _wPost( 10 , .... здесь не знаю как .... ) ON KEY F2 ACTION _wPost( 10 , .... здесь не знаю как .... ) ......
Юзера просят горячие клавиши сразу по F1/F2 ... ну или просто по 1/2 .... Я понимаю что горячая клавиша ОДНА, но блин нашему юзеру всё мало.... Просто в старых программах сделал так, теперь просят такого же в МиниГуи.
SergKis
постоянный участник
Пост N: 2963
Зарегистрирован: 17.02.12
Отправлено: 27.11.19 02:01. Заголовок: Andrey пишет O..
Andrey пишет
цитата:
ON KEY F1 ACTION _wPost( 10 , .... здесь не знаю как .... ) ON KEY F2 ACTION _wPost( 10 , .... здесь не знаю как .... ) ......
так же
ON KEY F1 ACTION _wPost( 10 , This.button_1.Index ) ON KEY F2 ACTION _wPost( 10 , This.button_1.Index ) ......
создается в событии 10 среда This для button1, как и для ACTION кнопки, по указанному индексу
SergKis
постоянный участник
Пост N: 2964
Зарегистрирован: 17.02.12
Отправлено: 27.11.19 02:13. Заголовок: PS т.е. если делать ..
PS т.е. если делать _wPost(10), то в событии 10 This.Name - имя окна, ThisWindow.Name - тоже, если делать _wPost( 10 , This.button_1.Index ), то в событии 10 This.Name - имя кнопки, ThisWindow.Name - имя окна
Andrey
постоянный участник
Пост N: 6526
Зарегистрирован: 12.09.06
Отправлено: 27.11.19 09:26. Заголовок: SergKis пишет: ON K..
SergKis пишет:
цитата:
ON KEY F1 ACTION _wPost( 10 , This.button_1.Index ) ON KEY F2 ACTION _wPost( 10 , This.button_1.Index ) ......
Чуток ошибся:
ON KEY F1 ACTION _wPost( 10 , This.button_1.Index ) ON KEY F2 ACTION _wPost( 10 , This.button_2.Index ) ON KEY F3 ACTION _wPost( 10 , This.button_3.Index )
А если будут две формы и будут такие же кнопки, то горячие клавиши будут различаться ? This.button_1.Index - это для каждого окна своя кнопка ?
SergKis
постоянный участник
Пост N: 2965
Зарегистрирован: 17.02.12
Отправлено: 27.11.19 12:16. Заголовок: Andrey пишет Чуток о..
Andrey пишет
цитата:
Чуток ошибся:
Именно так и хотел написать, о назначении ОДНОГО события для button_1 разным клавишам, т.е. одной кнопке назначаем нажатия "1", "F1", "CTRL+F1", "SHIFT+F1", "CTRL+1", ... и при всех нажатиях будет исполнен блок кода события 10 со средой This, для кнопки "button_1" То что ты добавил\исправил на F2 - это может быть доп. множество клавиш для др. кнопки "button_2"
цитата:
А если будут две формы и будут такие же кнопки, то горячие клавиши будут различаться ? This.button_1.Index - это для каждого окна своя кнопка ?
На каждой форме-окне контролы могут называться одинаково, они, как и события "привязаны" к своему окну. Т.е. если создаешь окно по переменной cForm := <имя> и DEFINE WINDOW &cForm ... то сменив имя окна-формы => получишь новое окно, на котором имена контролов будут одинаковы с первым и события совпадут. Если в них исп. public (не static) функции они будут вызываться одни и те же при наступлении события, но внутри будут иметь разную среду This для окна, This.Name контрола совпадать, ThisWindow.Name разное
gfilatov2002
moderator
Пост N: 1626
Зарегистрирован: 11.02.10
Отправлено: 28.11.19 17:35. Заголовок: Всем кому это интересно
Подготовил 1-й релиз-кандидат для новой сборки 19.12 со следующим списком изменений (кратко): Скрытый текст
* Fixed: The 'OnChange' event fired by a mouse click in a Browse control without changing of the row. It exists in the official version too.
* Fixed: A potential RTE at using of a TRANSPARENT checkbox control into SplitChild window.
* Revised GdiPlus.dll system library handling: - added the new function HMG_SaveImage( FileName, cOutName [, cEncoder] [, nJpgQuality] ; [, aOutSize] ), where cEncoder parameter may be "BMP", "JPEG", "PNG", "GIF" or "TIFF" value ("BMP" is a default).
* The Image control supports now ICON images from the resources via using of a dynamic loading of the system library GdiPlus.dll.
* The CHECKBOX, FRAME and RADIOGROUP controls supports the FontColor and BackColor properties in the THEMED Operating Systems. It was a postponed user's request.
* The PROGRESSBAR control supports the ForeColor and BackColor properties at a definition in the THEMED Operating Systems.
* The function InputWindow() supports now an optional 11th logical parameter to use a Switcher control for a managing of the logical variables (default value is false).
* The internal function ErrorMessage() will return an information about the mistaked arguments of calling function from error object.
* The minor modification of a data value position in the BAR GRAPH.
* Updated header file i_hmgcompat.ch for compatibility with Official HMG.
* Updated HMGS-IDE v.1.4.3.8 and Sqlite3 library.
* Added the new interesting samples and updated some Basic and Advanced samples.
hb_itemReturnRelease( pArray ); pArray = NULL; } тогда можно получать handle внешних программ так (эту ф-ю можно не вкл. lib) *-----------------------------------------------------------------------------* STATIC FUNCTION HandlesHbWin( cText, cClass, lUpper ) *-----------------------------------------------------------------------------* LOCAL i, h, t LOCAL aWnd := EnumWindows() LOCAL aTmp := aWnd LOCAL aRet := {}
IF ! empty(cText) .and. HB_ISCHAR(cText) .and. Len(aTmp) > 0 lUpper := ! empty( lUpper ) IF lUpper cText := upper( cText ) ENDIF FOR EACH h IN aTmp t := GetWindowText( h ) IF lUpper ; t := upper( t ) ENDIF IF cText $ t ; AAdd( aRet, h ) ENDIF NEXT ELSE aRet := aTmp ENDIF
RETURN aRet т.е. aHandle := HandlesHbWin( , 'Form1_Main' ) // окна hmg с именем Form1_Main, по доп. cText выделить нужное aWvt := HandlesHbWin( cText, 'Harbour_WVT_Class' ) // handles wvt окон aDos := HandlesHbWin( 'DOSBox ', 'SDL_app' ) // handles загруженных DosBox программ и .т.д.
Но вроде уже живет эта функция в примерах: - SAMPLES\Advanced\ProcInfo; - SAMPLES\Advanced\ExternalApp_2
Кстати, там еще д.б. сишная дополнительная функция EnumWindowsProc, которая заполняет массив pArray
SergKis
постоянный участник
Пост N: 2998
Зарегистрирован: 17.02.12
Отправлено: 11.12.19 19:58. Заголовок: gfilatov2002 пишет Н..
gfilatov2002 пишет
цитата:
Но вроде уже живет эта функция в примерах
Не увидел, пропустил. Хорошо, что есть в примерах, мне не хватило в lib. Пришлось позаниматься управлением внешних программ из hmg. Предложил по причине, что она более удобна, во многих случаях, чем та которая есть в hmg FindWindow
Благодарю Сергея Киселева и Андрея Верченко за помощь при подготовке этого релиза
SergKis
постоянный участник
Пост N: 2999
Зарегистрирован: 17.02.12
Отправлено: 12.12.19 19:53. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет
цитата:
Добавил также архив для бесплатного Embarcadero C++ 10.1 Berlin compiler
Установил, собрал несколько примеров. Работают. Спасибо
SergKis
постоянный участник
Пост N: 3003
Зарегистрирован: 17.02.12
Отправлено: 20.12.19 15:52. Заголовок: gfilatov2002 Может ..
gfilatov2002 Может стоит заменить в InitCodePage() использование ф-ии cLang := hb_UserLang() на что то другое, т.к. она не точна, т.е.
REQUEST HB_CODEPAGE_LVWIN, HB_LANG_LV
function main() LOCAL i
hb_cdpSelect( "LVWIN" ) HB_LANGSELECT("LV")
SET DATE GERMAN
? HB_LANGSELECT(), hb_UserLang(), Set ( _SET_LANGUAGE ) for i := 1 to 12 ? hb_StrToUtf8(CMONTH(CTOD("01."+StrZero(i,2)+".2019"))) next ? "" for i := 1 to 7 ? hb_StrToUtf8(CDOW(Date() + i)) next ... будет результат LV.LVWIN ru-RU LV.LVWIN Janvāris Februāris Marts Aprīlis Maijs Jūnijs Jūlijs Augusts Septembris Oktobris Novembris Decembris '' Sestdiena Svētdiena Pirmdiena Otrdiena Trešdiena Ceturtdiena Piektdiena
Все правильно, кроме выделенного цветом, а это работа hb_UserLang()
заменить в InitCodePage() использование ф-ии cLang := hb_UserLang()
Работа этой функция основана на WinAPI функции GetUserDefaultLangID(). Кроме того, она используется для определения языка пользователя в утилите hbmk2
Кстати, для того чтобы исправить поведение этой функции, можно определить системную константу LANG. Если эта глобальная переменная определена, то значение для возврата функции берется из нее.
gfilatov2002 Спасибо за разъяснение По сути, в работе hb_UserLang() лучше не использовать, что бы не колбаситься с Set LANG=lv-LV
gfilatov2002
moderator
Пост N: 1639
Зарегистрирован: 11.02.10
Отправлено: 13.01.20 11:57. Заголовок: Всем кому это интересно
Подготовил 1-й релиз-кандидат для новой сборки 20.01 со следующим списком изменений (кратко): Скрытый текст
* Added the new C-function C_SaveHIconToFile( cIconName, { hIcon1, ... } ) for saving a multipages icon to a disk file.
* Added the new useful C-functions - ShowBalloonTip ( hWnd, cText [ , cTitle ] [ , nTypeIcon ] ) - HideBalloonTip ( hWnd ) for displaying a balloon tip associated with an edit control.
* Added the useful C-function aHWnds := EnumWindows() for retrieving of an array of the external windows handles.
* Added the optional ON INIT <bBlock> clause to a TextBox control. It was a postponed modification.
* Synchronized Extended HMG for compatibility with Official HMG: - New: Added a readonly property 'ColumnCount' for Browse/Grid; - New: Added a read/write property 'ColumnDisplayPosition' for Browse and Grid controls. Based upon a C-code contributed by Petr Chornyj which fixes GPF in the official version (hb_xfree must be used for hb_xgrab memory). - New: Added the following properties for Forms: - ThisWindow | <FormName>.AlphaBlendTransparent := nAlphaBlend (0 to 255, Completely Transparent = 0, Opaque = 255); - ThisWindow | <FormName>.BackColorTransparent := aRGBColor.
* Updated header file i_hmgcompat.ch for compatibility with Official HMG.
* Updated Harbour Compiler 3.2.0dev: - New: Added the Harbour HbMxml contrib library is based upon the Mini-XML library 2.7 by Michael R Sweet.
* Updated HMGS-IDE v.1.4.3.9, RDDLeto and Sqlite3 libraries.
* Added the new interesting samples and updated some Basic and Advanced samples.
Подготовил 1-й релиз-кандидат для новой сборки 20.01
gfilatov2002
moderator
Пост N: 1640
Зарегистрирован: 11.02.10
Отправлено: 23.01.20 16:12. Заголовок: Всем кому это интересно
Завершена подготовка новой сборки 20.01, которая будет опубликована на следующей неделе.
Уже готовы дистрибутивы для следующих Си-компиляторов:
- Borland C++ 5.8; - Borland/Embarcadero C++ 10.1; - MinGW GNU C 9.2.1 (32-bit и 64-bit); - MS Visual C++ 2019 19.24.28314 (32-bit и 64-bit).
Если у Вас есть дополнения (или идеи) для реализации в библиотеке Минигуи, то я с удовольствием их учту при подготовке следующей сборки. Благодарю за внимание
gfilatov2002
moderator
Пост N: 1643
Зарегистрирован: 11.02.10
Отправлено: 28.01.20 10:25. Заголовок: Всем кому это интересно
Опубликована новая сборка 20.01 для BCC 5.8.2 и компиляторов Harbour и xHarbour.
* Updated: Synchronized Extended HMG for compatibility with Official HMG: - Fixed: 'HeaderImages' property for Grid and Browse controls was not showed automatically after the above controls definition. This property is a character array containing image filenames or resource names (one for each column). Problem was reported by Ivanil Marcelino <ivanil/at/linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\BROWSE_8) (see demo.prg in folder \samples\Basic\Grid_Test) * Updated: Harbour Compiler 3.2.0dev (SVN 2020-01-31 15:34). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: 'Sort Grid Columns' sample: - using of standard OnInit event instead of tricky OnGotFocus event. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\HeaderImage)
kkg
Пост N: 17
Зарегистрирован: 29.11.19
Отправлено: 05.02.20 13:51. Заголовок: Добрый день, в BCC10..
Добрый день, в BCC101 функции aMonths(), CDOW( Date()) как то неправильно реагируют на REQUEST HB_LANG_RUWIN HB_LANGSELECT( "RUWIN" ) это лечится ? Спасибо.
gfilatov2002
moderator
Пост N: 1647
Зарегистрирован: 11.02.10
Отправлено: 05.02.20 18:24. Заголовок: kkg пишет: это лечи..
kkg пишет:
цитата:
это лечится ?
Для русского языка можно написать свои функции-аналоги Другие (не кириллические) языки отрабатывают нормально
Кстати, там исправлена ошибка с неправильной нумерацией замороженных столбцов в Tbrowse с использованием enumerator, которая озвучивалась здесь, на форуме
При добавлении этого кода в заголовок таблицы попадет только одна строка наибольшей длины из много-строчного заголовка. Остальные строки этого много-строчного заголовка будут удалены. В чем смысл этой поправки
SergKis
постоянный участник
Пост N: 3040
Зарегистрирован: 17.02.12
Отправлено: 09.02.20 19:49. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет
цитата:
При добавлении этого кода в заголовок таблицы попадет только одна строка наибольшей длины из много-строчного заголовка. Остальные строки этого много-строчного заголовка будут удалены. В чем смысл этой поправки
Эта поправка для правильного расчета ширины колонки, берется самое длинное слово для участия в расчете, иначе ширина колонки получается по всем словам с учетом CRLF. Текст в header потом выводится правильный, полностью все с переносом и ширина max от выделенного слова и значения в колонке. Так работает в моей версии. После такой правки колонка после LoadFields рассчитана хорошо и показывает аналогично.
SergKis
постоянный участник
Пост N: 3041
Зарегистрирован: 17.02.12
Отправлено: 09.02.20 20:25. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет
цитата:
При добавлении этого кода в заголовок таблицы попадет только одна строка наибольшей длины из много-строчного заголовка.
Прошу прощения, упустил, что у меня стоит перед созданием колонки
If ValType(::aHeaders) == "A" .and. ! empty(::aHeaders) .and. n <= Len( ::aHeaders ) // .08. cHeading := ::aHeaders[ n ] EndIf If HB_ISARRAY( aHeadSel ) .and. Len( aHeadSel ) > 0 .and. n <= Len( aHeadSel ) .and. aHeadSel[ n ] != Nil cHeading := aHeadSel[ n ] EndIf
т.е. восстанавливаются данные cHeading + я упустил из вида вариант If HB_ISARRAY( aHeadSel ) .and. Len( aHeadSel ) > 0 .and. n <= Len( aHeadSel ) .and. aHeadSel[ n ] != Nil cHeading := aHeadSel[ n ] EndIf при выделении слова из заголовка. Наверно проще переделать так Local cTmp, cHead ... If ValType(::aHeaders) == "A" .and. ! empty(::aHeaders) .and. n <= Len( ::aHeaders ) // .08. cHeading := ::aHeaders[ n ] cHead := cHeading 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 ] cHead := cHeading EndIf
IF CRLF $ cHeading cData := "" FOR EACH cTmp IN hb_ATokens(cHeading, CRLF) IF Len(cTmp) > Len(cData) cData := cTmp EndIf NEXT cHeading := cData cData := NIL ENDIF ... If HB_ISCHAR(cHead) cHeading := cHead EndIf
Да, после такой переделки обработка заголовка отработала нормально Благодарю за помощь
Andrey
постоянный участник
Пост N: 6583
Зарегистрирован: 12.09.06
Отправлено: 10.02.20 10:01. Заголовок: SergKis пишет: Эта ..
SergKis пишет:
цитата:
Эта поправка для правильного расчета ширины колонки, берется самое длинное слово для участия в расчете, иначе ширина колонки получается по всем словам с учетом CRLF. Текст в header потом выводится правильный, полностью все с переносом и ширина max от выделенного слова и значения в колонке. Так работает в моей версии. После такой правки колонка после LoadFields рассчитана хорошо и показывает аналогично.
Классно ! Это когда будет включено в МиниГуи ? А то у меня своя функция криво работает...
IF w > GetDesktopWidth() ; w := GetDesktopWidth() ENDIF IF h > ( GetDesktopHeight() - GetTaskBarHeight() ) ; h := GetDesktopHeight() - GetTaskBarHeight() ENDIF перед строкой с mVar := '_' + FormName
в функции FUNCTION _DefineWindow ( FormName, Caption, x, y, w, h, nominimize, nomaximize, ; FUNCTION _DefineModalWindow ( FormName, Caption, x, y, w, h, Parent, nosize, nosysmenu, nocaption, aMin, aMax, ;
Если высота ширина заданы, то есть шанс при переносе на др. комп, с др. монитором попадать на размеры окна > экрана, что произошло с примером CBru.exe на др. pc.
SergKis
постоянный участник
Пост N: 3052
Зарегистрирован: 17.02.12
Отправлено: 11.02.20 12:53. Заголовок: PS У меня, еще, така..
PS У меня, еще, такая штука присутствует
IF y > 0 .and. y < 1 ; y := int( GetClientHeight(0) * y ) ENDIF IF x > 0 .and. x < 1 ; x := int( GetClientWidth (0) * x ) ENDIF IF w > 0 .and. w < 1 ; w := int( GetClientWidth (0) * w ) ENDIF IF h > 0 .and. h < 1 ; h := int( GetClientHeight(0) * h ) ENDIF IF w > GetClientWidth (0) ; w := GetClientWidth (0) ENDIF IF h > GetClientHeight(0) ; h := GetClientHeight(0) ENDIF ... для управления положением окна с отключенным CENTER WINDOW ... , т.е. DEFINE WINDOW Form_0 ; At 0.5,0.5 ; WIDTH 0.5 ; HEIGHT 0.5 ; ... разместит окно в правом нижнем углу
Благодарю за предложение. Пока сделал эту проверку таким образом:
цитата:
IF ! ISNUMBER( w ) .AND. ! ISNUMBER( h ) ... ELSE
w := Min( w, GetDesktopWidth() ) h := Min( h, GetDesktopHeight() - GetTaskBarHeight() )
ENDIF
mVar := '_' + FormName ...
SergKis
постоянный участник
Пост N: 3056
Зарегистрирован: 17.02.12
Отправлено: 12.02.20 08:35. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет
цитата:
Пока сделал эту проверку таким образом:
В большинстве случаев задаю ширину, высоту окон в процентном отношении к клиентской обл. Descktop, т.е. w := GetClientWidth(0) * 0.4 h := GetClientHeight(0)*0.6 оказалось, что удобно располагать окно по координатам, также в процентах, т.е. запись удобна
DEFINE WINDOW Form_0 ; At 0.4,0.6 ; WIDTH 0.4 ; HEIGHT 0.6 ; для расположения в правом нижнем углу экрана DEFINE WINDOW Form_0 ; At 0,0.6 ; WIDTH 0.4 ; HEIGHT 0.6 ; для расположения в правом верхнем углу экрана DEFINE WINDOW Form_0 ; At 0.4,0 ; WIDTH 0.4 ; HEIGHT 0.5 ; в левом нижнем и т.д. т.е. оформив y,x,w,h как параметры, на мой взгляд, удобно динамически, при вызовах, задавать позиции и размеры окна. Это актуально для небольших, в размерах, справочниках. Располагая сразу, при вызове, удобно для клиента, часто, не надо делать запоминание координат и размеров для одного и того же окна справочника.
SergKis
постоянный участник
Пост N: 3057
Зарегистрирован: 17.02.12
Отправлено: 12.02.20 09:55. Заголовок: gfilatov2002 Не был..
gfilatov2002 Не было учтено в ch для tbrowse :lAdjColumn := .T. Сделал у себя так
* Fixed: Removed ButtonEx`s flickering at a MOUSEHOVER event. Contributed by Milomir Zecevic <zeka/at/bnbos.rs> (see menulist_2.prg in folder \samples\Advanced\MenuList)
SergKis
постоянный участник
Пост N: 3073
Зарегистрирован: 17.02.12
Отправлено: 25.02.20 12:32. Заголовок: gfilatov2002 пишет С..
gfilatov2002 пишет
цитата:
Снова обновил сборку 20.01 (Update 6) с учетом последних наработок
Андрей говорил, дать правку для TBrowse, а я не дал. Для одинаковой работы с колонкой в :bDecode и :bPrevEdit
Все даты в формате GMT
3 час. Хитов сегодня: 222
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет