Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне
Кратко, что нового:
- исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
что бы не делать доп. переменных, а использовать :cargo колонки, например (от Андрея):
Да, это очень удобно получается. Загружаешь в массив короткий справочник типа:
{1, "В офисе "} {2, "отданы лично в руки "} {3, "отданы Посыльному "}
А потом бровс сам показывает вместо кодов нужные наименования через функцию:
FUNCTION Select2Array(xVal,aDim) LOCAL nI, cRet := "none Dim"
FOR nI := 1 TO LEN(aDim) IF xVal == aDim[nI,1] cRet := aDim[nI,2] ENDIF NEXT
RETURN cRet
Ну а в oCol:bPrevEdit - показ выбора из этого массива SelectWho(ob, oc:Cargo) и потом запись в базу WriteColum4(ob).
Что-то форум потерял предыдущую тему. Не понятно будет о чем речь идёт...
SergKis
постоянный участник
Пост N: 3075
Зарегистрирован: 17.02.12
Отправлено: 25.02.20 15:08. Заголовок: Andrey пишет Ну а в ..
Andrey пишет
цитата:
Ну а в oCol:bPrevEdit - показ выбора из этого массива SelectWho(ob, oc:Cargo)
Можно упростить
oCol := oBrw:GetColumn("Name_4") oCol:Cargo := oKeyData() // Get2DimCol4() // получить массив для колонки 4 oCol:bDecode := {|val,ob,nc,oc| nc:=ob, oc:Cargo:Get(val, val) } // если для кода нет наименования, будет сам код oCol:nAlign := DT_CENTER oCol:cPicture := REPL("x",25) oCol:lEdit := .T. oCol:bPrevEdit := {|val,ob,nc,oc| SelectWho(ob, oc:Cargo), WriteColum4(ob), ob:Setfocus(), FALSE } // заполним из dbf коды и названия для колонки USE ... ALIAS SPR NEW SHARED dbEval({|| oCol:Cargo:Set(FIELD->KOD, FIELD->NAME) }) USE dbSelectArea(oBrw:cAlias) ...
SergKis
постоянный участник
Пост N: 3076
Зарегистрирован: 17.02.12
Отправлено: 25.02.20 15:58. Заголовок: PS массив получить т..
PS массив получить так oCol:CargoGetAll(.T.) // массив наименований для combobox например oCol:CargoGetAll(.F.) // массив {{kod, name},..., {kodN, nameN}} т.е. oCol:bPrevEdit := {|val,ob,nc,oc| SelectWho(ob, oc:Cargo:GetAll(.F.)), WriteColum4(ob), ob:Setfocus(), FALSE }
gfilatov2002
moderator
Пост N: 1660
Зарегистрирован: 11.02.10
Отправлено: 28.02.20 10:58. Заголовок: Всем кому это интересно
Снова обновил сборку 20.01 (Update 7) с учетом последних наработок
Базовый дистрибутив для BCC 5.8.2 находится по адресу
Отправлено: 01.03.20 14:54. Заголовок: Из замеченного, если..
Из замеченного, если в версии bcc101 подменить библиотеки hblang.lib hbcpage.lib от BCC 5.8.2 то установка русского языка отрабатывает нормально, включая обработку ошибок. На некоторых версиях ОС проявляется ошибка ilink32, "лечение" описано тут click here может кому то пригодится.
gfilatov2002
moderator
Пост N: 1661
Зарегистрирован: 11.02.10
Отправлено: 26.03.20 11:42. Заголовок: Всем кому это интересно
Завершена подготовка новой сборки 20.03, которая будет опубликована на следующей неделе.
* New: Added the new useful C-function dbInsert( [nRecNo] [, nCount] ). Added the new commands for managing of the above function: - INSERT BEFORE; - INSERT BLANK.
* Splitboxed TOOLBAR control supports the changing of a 'Caption' property at runtime.
* Added a support of the 'Variant' fields type in a Browse control.
* The Getbox control may manage a 'ValidMessage' property at runtime.
* Synchronized Extended HMG for compatibility with Official HMG: - New: Added the following read/write properties for a Grid control: - ColumnJUSTIFY( nColIndex ), - ColumnONHEADCLICK( nColIndex ), - ColumnCONTROL( nColIndex ), - ColumnDYNAMICBACKCOLOR( nColIndex ), - ColumnDYNAMICFORECOLOR( nColIndex ), - ColumnVALID( nColIndex ), - ColumnWHEN( nColIndex ), - ColumnVALIDMESSAGE( nColIndex ).
* Updated Harbour Compiler 3.2.0dev to a recent Git-version.
* Updated HMGS-IDE v.1.4.4.0 and Sqlite3 library.
* Updated the some Basic, Advanced and Applications samples.
В марте этого года исполнилось ровно 15 лет с момента начала разработки этой версии библиотеки
Выпуск последующих обновлений будет зависеть от активности и поддержки со стороны пользователей ее разработки.
Отдельная благодарность - Андрею Верченко, Диме (админу этого форума) и Саше Савову из Болгарии за их материальную поддержку
gfilatov2002
moderator
Пост N: 1664
Зарегистрирован: 11.02.10
Отправлено: 01.04.20 09:56. Заголовок: Всем кому это интересно
Сделал "тихое" обновление сборки 20.03 после повторного исправления следующего изменения:
цитата:
* Enhanced: Splitboxed TOOLBAR control supports the changing of a 'Caption' property at runtime.
Проблема была указана на английском форуме библиотеки. Если вы не используете данную возможность в своей программе, то это обновление является необязательным.
gfilatov2002
moderator
Пост N: 1675
Зарегистрирован: 11.02.10
Отправлено: 16.04.20 14:54. Заголовок: Всем кому это интересно
Подготовил 1-й релиз-кандидат для новой сборки 20.04 со следующим списком изменений (кратко): Скрытый текст
* Fixed problem with assigning of the BKBRUSH clause at a form definition (introduced in the build 19.12).
* A correction in the function _SetValue() for a conflict between the Timer and AniGif controls handling.
* The Label, HyperLink, CheckBox and RadioGroup controls support changing the 'Transparent' property at runtime.
* The EDIT controls family (TEXTBOX & EDITBOX) support changing the 'CaseConvert' property at runtime. It was a postponed user's request.
* The MONTHCAL control supports the BackColor, FontColor and others color clauses in the THEMED Operating Systems. It was a postponed user's request.
* Improved user type of control in INPLACE EDIT of GRID control. DYNAMIC type is defined as { cControlType, bCodeBlock [, bChange] } where cControlType = 'DYNAMIC' (Required) bCodeBlock = CodeBlock that return array with normal type control (Required) bChange = CodeBlock with ON CHANGE action (Optional) to above CodeBlock is passed one param - a current control value. Added a new control type 'CODEBLOCK' for using with 'DYNAMIC' type.
* The ANIMATEBOX control supports now an optional INVISIBLE clause.
* The FONT clause in the POPUP and MENUITEM commands supports a font name for the fonts which were defined by the command DEFINE FONT <font> FONTNAME <name>.
* Limited the height of the dialog box in the function HMG_Alert() to be able to output more than 20 strings in the EditBox control.
* The HMG Debugger resources were moved from the sample DBG_TEST to the application resources.
FUNCTION _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ; ... lLoad, lDblCursor, aNames, aFooters, nColNumber, aBrush, aEdit, Adjust, ; lAdjust, lEmptyValToChar ) ... ELSE // BK IF HB_ISARRAY( uAlias ) aArray := uAlias uAlias := NIL ENDIF IF HB_ISLOGICAL(aEdit) ... // BK IF HB_ISARRAY(aArray) oBrw:SetArrayTo( aArray, {hFontHead, hFontFoot} , aHeaders, aWidths, aFooters, aPicture, aJust, aNames ) ELSE If ! empty(hFontHead) ; oBrw:hFontHead := hFontHead EndIf If ! empty(hFontFoot) ; oBrw:hFontFoot := hFontFoot EndIf ENDIF
IF HB_ISARRAY(aBrush) .and. Len(aBrush) > 2 ... IF ( nColums := Len( oBrw:aColumns ) ) > 0 /* BK 18.05.2015 */ ... // BK n := nColums
IF ! HB_ISARRAY( aArray ) IF HB_ISARRAY(aNames) j := Min(Len(aNames), n) FOR t := 1 TO j IF ! Empty(aNames[ t ]) .and. HB_ISCHAR(aNames[ t ]) oBrw:aColumns[ t ]:cName := aNames[ t ] ENDIF NEXT ENDIF
IF HB_ISLOGICAL(aFooters) .and. aFooters aFooters := Array( n ) aFill( aFooters, " " ) ENDIF
IF HB_ISARRAY(aFooters) j := Min( Len(aFooters), n ) FOR t := 1 TO j IF aFooters[ t ] != NIL If HB_ISCHAR( aFooters[ t ] ) .and. ";" $ aFooters[ t ] aFooters[ t ] := StrTran( aFooters[ t ], ";", Chr(13) ) EndIf oBrw:aColumns[ t ]:cFooting := aFooters[ t ] ENDIF NEXT oBrw:lDrawFooters := .T. oBrw:lFooting := .T. oBrw:nHeightFoot := oBrw:nHeightCell ENDIF ENDIF
IF HB_ISARRAY(aEdit) ... IF ! Empty(lDblCursor) AEval( oBrw:aColumns, {|oCol| oCol:lFixLite := .T. } ) ENDIF IF ! empty(lEmptyValToChar) AEval( oBrw:aColumns, {| oCol| oCol:lEmptyValToChar := .T. } ) ENDIF
Отправлено: 16.04.20 20:25. Заголовок: SergKis пишет: Еще ..
SergKis пишет:
цитата:
Еще можно добавить
Добавил все ваши предложения без изменений, пример работает нормально. Благодарю за помощь
gfilatov2002
moderator
Пост N: 1678
Зарегистрирован: 11.02.10
Отправлено: 21.04.20 10:48. Заголовок: Всем кому это интересно
Подготовил 2-й релиз-кандидат для новой сборки 20.04. Что нового: Скрытый текст
цитата:
* Fixed: A correction for the font attributes handling in SplitButton control. Contributed by Ivanil Marcelino <ivanil/at/linkbr.com.br> (see demo in folder \samples\Advanced\SplitButton) ... * Modified: PLAYER: the helpful functions were moved from the samples to MiniGUI core: - aSize := GetAviFileSize( <cFileName> ) ; - aSize := GetAviResSize( <cResName> ). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demos in the folders \samples\Basic\PLAYER_1 and \samples\Basic\ANIMATEDEMO_2) ... * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: ... Added the following optional clauses to DEFINE TBROWSE command: - New: COLSEMPTY clause means to assign oCol:lEmptyValToChar := .T. for all columns of a TBROWSE control. - New: GOTFOCUSSELECT clause means to assign oCol:lOnGotFocusSelect := .T. for all edited columns of a TBROWSE control. - Enhanced: LOADFIELDS clause allows to load an array with using of the method SetArrayTo() at startup of a TBROWSE control. Contributed by Sergej Kiselev. (see demo3.prg in folder \samples\Advanced\Tsb_Array_2) * Updated: Harbour Compiler 3.2.0dev (SVN 2020-04-19 16:32). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) ... * Updated: 'Cas_dbf' sample: added an enhanced demo with Tsbrowse search. Contributed by Pierpaolo Martinello <pier.martinello[at]alice.it> (see in folder \samples\Basic\Database)
Благодарю за ваше внимание
alex_II
Пост N: 149
Зарегистрирован: 12.07.06
Отправлено: 22.04.20 06:46. Заголовок: TBROWSE vs мышь
В TBrowse использую событие ON CHANGE, в котором некая функция выводит в STATUSBAR дополнительную информацию из текущей строки: ... DEFINE TBROWSE Br_omes AT h_tlbar,0 ALIAS (al) WIDTH w_br HEIGHT h_br ; BOLD CELLED ; ON CHANGE Form_oMes.StatusBar.Item(1) := f_corr(1,al) ... Если движение по строкам осуществляется клавиатурой, то все работает нормально, в STATUSBAR'е идет корректное отображение данных функцией f_corr(). Если перемещение производить мышью, указывая строку в TBrowse или использовать колесо прокрутки, то после отработки события ON CHANGE, данные в STATUSBAR'е исчезают, т.е поле очищается. В Browse в аналогичной ситуации все отрабатывает нормально.
Отправлено: 29.04.20 12:42. Заголовок: gfilatov2002 Может ..
gfilatov2002 Может есть смысл добавить, что то такое ?
*-----------------------------------------------------------------------------* FUNCTION _SetWindowThis ( i ) *-----------------------------------------------------------------------------*
IF Empty( i )
_PushEventInfo()
ELSE
IF HB_ISCHAR( i ) i := GetFormIndex( i ) ELSEIF HB_ISOBJECT( i ) i := iif( i:ClassName == 'TSBROWSE', GetFormIndex( i:cParentWnd ), i:Index ) ENDIF
Благодарю за предложение Это уже идея для новой сборки... А подготовка апрельской сборки уже завершена, и она будет опубликована завтра
SergKis
постоянный участник
Пост N: 3147
Зарегистрирован: 17.02.12
Отправлено: 29.04.20 12:56. Заголовок: PS Ошибся. Надо ..
PS Ошибся. Надо
IF Empty( i )
_PopEventInfo()
ELSE
SergKis
постоянный участник
Пост N: 3148
Зарегистрирован: 17.02.12
Отправлено: 29.04.20 21:19. Заголовок: gfilatov2002 пишет Э..
gfilatov2002 пишет
цитата:
Это уже идея для новой сборки...
Есть ф-я _SetThisFormInfo (у меня давно исправлена) можно ее использовать
FUNCTION _SetThisFormInfo ( i ) // стек значений переменных _HMG_This... LOCAL l := .T. // BK 18.05.2015
IF empty( i )
_PopEventInfo()
ELSE IF HB_ISCHAR( i ) i := GetFormIndex( i ) l := .F. ELSEIF HB_ISOBJECT( i ) i := iif( i:ClassName == 'TSBROWSE', GetFormIndex( i:cParentWnd ), i:Index ) l := .F. ENDIF
_PushEventInfo()
_HMG_ThisEventType := iif( l, 'DEFINE_WINDOW', '' ) _HMG_ThisFormIndex := i _HMG_ThisType := _HMG_aFormType [ i ] _HMG_ThisIndex := i _HMG_ThisFormName := _HMG_aFormNames [ i ] _HMG_ThisControlName := ""
Да, решил, что это подождет до следующего релиза Добавил также новую команду:
цитата:
#xtranslate SET WINDOW THIS TO [<w>] => _SetThisFormInfo( [<w>] )
Еще раз благодарю за Ваши идеи
SergKis
постоянный участник
Пост N: 3150
Зарегистрирован: 17.02.12
Отправлено: 30.04.20 15:58. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет
цитата:
Да, решил, что это подождет до следующего релиза Добавил также новую команду:
Сделал эти изменения в MiniGuiBcc58, MiniGuiBcc102. Проверил сборку lib. Все либы собрались. Примеры Tsb_array_2 все отработали в обоих bcc. Пример с командой то же
... LOCAL oThis, cForm := "Form_Client" ... IF !_IsWindowActive( cForm )
Отправлено: 03.05.20 14:43. Заголовок: И вот эту ошибку тож..
И вот эту ошибку тоже бы убрать: Error BASE/2017 Argument error: AEVAL Args: [1] = U [2] = B {|| ... } --------------------------------- Stack Trace --------------------------------- Called from AEVAL(0) Called from MAIN(53) in module: demo5.prg
Делаю так:
aHead := NIL ?v aHead
Пускай NIL возвращает, а то прога валится.
SergKis
постоянный участник
Пост N: 3160
Зарегистрирован: 17.02.12
Отправлено: 03.05.20 14:57. Заголовок: Можно так поправить ..
gfilatov2002 Предложение по ENUMERATOR для нумерации только видимых колонок. :lEnum := .F. меняет цвет, align. Словом не подошел. Простое решение при :lEnum := .T.
METHOD DrawHeaders( lFooters ) CLASS TSBrowse ... Local nDeltaLen, uTmp ... IF ::lDrawSpecHd ... if ::lEnum cHeading := hb_ntos( nJ - iif( ::lSelector, 1, 0 ) ) IF ! empty( oColumn:cSpcHeading ) uTmp := iif( Valtype( oColumn:cSpcHeading ) == "B", Eval( oColumn:cSpcHeading, nJ, Self ), oColumn:cSpcHeading ) IF HB_ISNUMERIC ( uTmp ) ; cHeading := hb_ntos( uTmp ) ELSEIF HB_ISCHAR( uTmp ) ; cHeading := uTmp ENDIF ENDIF if nI == nBegin .and. ::lSelector .or. nI == nLastCol cHeading := "" endif else ...
Применение ... mySetTsb( oBrw ) myColorTsb( oBrw ) // цвета на таблицу myColorTsbElect( oBrw ) // цвета избранные myDbfDelColTsb( oBrw ) myEnumTsb( oBrw ) mySet2Tsb( oBrw )
:bOnEscape := {|ob| DoMethod(ob:cParentWnd, "Release") } // выход по ESC
END TBROWSE ON END {|ob| ob:SetNoHoles(), ob:SetFocus() } ... STATIC FUNCTION myEnumTsb( oBrw ) LOCAL oCol, nCnt := 0
FOR EACH oCol IN oBrw:aColumns oCol:cSpcHeading := NIL IF oCol:lVisible oCol:cSpcHeading := hb_ntos( ++nCnt ) ENDIF NEXT
RETURN NIL ...
Т.е. если убрать myDbfDelColTsb( oBrw ) // myEnumTsb( oBrw ) mySet2Tsb( oBrw ) будет первоначальный алгоритм При отработке ф-ии будет нумерация только видимых колонок У Андрея есть пример, если что ...
gfilatov2002 Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg) Скрытый текст
CLASS TSColumn DATA oCell // TSBcell object ... это только места обозначены CLASS TSBcell ... CLASS TSBrowse FROM TControl DATA lDrawLine AS LOGICAL INIT .T. // flag for cells row drawing ... METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse ... If ::bOnDrawLine != Nil Eval( ::bOnDrawLine, Self ) EndIf
IF ! ::lDrawLine nBegin := 1 nLastCol := ::nColCount() ENDIF
For nI := nBegin To nLastCol
If nStartCol >= nMaxWidth .and. ::lDrawLine Exit EndIf ... IF ::lDrawLine
IF ! ::lDrawLine nBegin := 1 nLastCol := ::nColCount() ENDIF
For nI := nBegin To nLastCol
If nStartCol >= nMaxWidth .and. ::lDrawLine Exit EndIf ... If lDrawCell .and. ::lDrawLine
lDraw := TSDrawCell( hWnd, ; // 1 ... Else
lDraw := .T.
IF ! ::lDrawLine
oColumn:oCell := TSBcell():New() ... ENDIF ...
Суть изменений получить все данные, которые получаются в :DrawLine() и :DrawSelect() для передачи в ф-ю TSDrawCell(...) рисования строки. Не стал сокращать список параметров для класса TSBcell оставил все параметры. Применение (в примерах прилагаются, нажатие кнопки F8 формирует _MsgLog.txt) такое
FOR nAt := 1 TO :nLen ? nAt, :aColumns[2]:oCell FOR nCol := 1 TO :nColCount() oCol := :aColumns[ nCol ] oCel := oCol:oCell ? ".", oCol:lVisible, nCol, oCel:nStartCol, oCol:cName, oCel:nAlign, oCel:nClrFore, oCel:nClrBack, oCel:uData NEXT :GoDown() NEXT ? :lDrawLine := .T. :Reset() END WITH
RETURN Nil
Запуск demo5.exe // работа с массивом demo5.exe * // работа с emploee.dbf demo7.exe // работа с AbonItogo.dbf (файл и раскраска от Андрея)
Должно облегчить работу с Excel, наверное PS В h_tbrowse.prg есть изменения связанные с отступами слева, справа, которые мы обсуждали с Игорем в теме "Курсы ЦБ на дату" это prg моей версии. В примере demo5 есть установка :nCellMarginLR := 1 Примеры и h_tbrowse.prg тут https://TransFiles.ru/eicsv
Haz
администратор
Пост N: 1549
Зарегистрирован: 20.02.11
Отправлено: 06.05.20 12:41. Заголовок: Эти изменения отключ..
Эти изменения отключают или включают прорисовку?
SergKis
постоянный участник
Пост N: 3169
Зарегистрирован: 17.02.12
Отправлено: 06.05.20 12:44. Заголовок: Отключают, т.е. при ..
Отключают, т.е. при :lDrawLine == .F. нет вывода на экран
SergKis
постоянный участник
Пост N: 3170
Зарегистрирован: 17.02.12
Отправлено: 06.05.20 12:48. Заголовок: PS :aDrawCols - это ..
PS :aDrawCols - это массив номеров колонок, которые на рисовались окне, формируется массив в :DrawLine()
Пальцы на автомате, набрали, надо не :DrawLine(), а DrawSelect()
Haz
администратор
Пост N: 1550
Зарегистрирован: 20.02.11
Отправлено: 06.05.20 12:56. Заголовок: Если практическое ис..
Если практическое использование - пробежаться по бровсу не тратя время на экранный вывод, то в случае с dbf можно проще
nRec := (oBrw:cAlias)->(RecNo()) while !(oBrw:cAlias)->( Eof()) for n := 1 To Len( oBrw:aColumns ) Eval( oBrw:aColumns[n]:bData) end (oBrw:cAlias)->(dbSkip(1)) end (oBrw:cAlias)->(dbGoTo(nRec))
пробежимся по всем строкам и столбцам и прописовки не будет
SergKis
постоянный участник
Пост N: 3172
Зарегистрирован: 17.02.12
Отправлено: 06.05.20 13:13. Заголовок: Haz пишет пробежимся..
Haz пишет
цитата:
пробежимся по всем строкам и столбцам и прописовки не будет
В таком варианте 1. Eval( oBrw:aColumns[n]:bData) не учитывает oBrw:aColumns[n]:bValue и особенно :bDecode, использую широко, т.е. надо Brw:GetValue( n ) или oBrw:bDataEval(oCol ,[xVal], nCol) 2. нет цветов фона и текста в такой реализации (получаются из блоков кода от значения данных в cell), для Excel это может быть важно 3. для массива и dbf надо писать разный код Можно, конечно писать, повторив часть кода из метода :DrawLine(), как сейчас и делали. В моем предложении все данные на ячейку в TSBcell объкте по адресу oBrw:aColumns[ n ]:oCell, т.е. надо используем, нет то как раньше
Haz
администратор
Пост N: 1551
Зарегистрирован: 20.02.11
Отправлено: 06.05.20 13:51. Заголовок: SergKis пишет: В мо..
SergKis пишет:
цитата:
В моем предложении все данные на ячейку в TSBcell объкте по адресу oBrw:aColumns[ n ]:oCell, т.е. надо используем, нет то как раньше
Сергей , да я не против твоей доработки. В простых задачах она пригодиться. Я же в проектах не смогу ее использовать по следующим причинам. 1. Редко когда использую простой бровс, как правило есть несколько подчиненных обновляемых по bChange (есть и bOnDraw ) и тупить прогон по бровсу будет не из-за прорисовки Можно отключать bChange при прогоне, а потом включать , но зачем ( см п 3 ) 2. Выгрузку в Excel через OLE не делаю совсем т.к. много отчетов объемных более 1000 строк и 50 и более колонок и через олю на отчеты тратится неприемлемое время Все отчеты только через XMLXLS . по скорости 20 минут это оля и 15 секунд xml Цвета и текст задаю заранее для xml 3. Как уже писал ранее ,при помощи Андрею в его TSB_экспортах - считаю такие экспорты (средствами бровса) красивыми, но бесперспективными с точки зрения временных затрат Бровс умеет работать только с текущей записью , зачем мне тормозной перебор если я могу взять весь массив данных сразу и делать с ним что хочу (aEval, dbEval, SQLExecute() и пр) .
В целом , для демонстрашки экспорта доработка хорошая, практически не знаю зачем
Сделал изменения в TsBrowse (изменения в прилагаемом файле h_tbrowse.prg)
Обязательно проанализирую и включу эти изменения в новую сборку (с учетом Вашего мнения и мнения Игоря, как главных разработчиков дополнений к TSBrowse). Благодарю за Вашу помощь
SergKis
постоянный участник
Пост N: 3173
Зарегистрирован: 17.02.12
Отправлено: 06.05.20 14:19. Заголовок: Haz пишет практическ..
Haz пишет
цитата:
практически не знаю зачем
Согласен, много случаев, особенно старых кодов, где это не применить, да и не нужно. А вывести в Excel таблицу (широкую, но простую), с цветными колонками, для которой печати нет (морока организации листов в разрезе горизонтали) есть передача в Excel и если захотят, будут распечатки делать из него. Условие сохранение цветности. С применением hbxmlxls.lib чтобы передать цветность это тоже пригодится.
цитата:
Бровс умеет работать только с текущей записью , зачем мне тормозной перебор
Можно не перебирать, а выполнить :DrawLine( , .F. ) и для тек. записи будет в колонках oCol:oCell заполнен
Отправлено: 06.05.20 16:11. Заголовок: Haz пишет: 3. Как у..
Haz пишет:
цитата:
3. Как уже писал ранее ,при помощи Андрею в его TSB_экспортах - считаю такие экспорты (средствами бровса) красивыми, но бесперспективными с точки зрения временных затрат Бровс умеет работать только с текущей записью , зачем мне тормозной перебор если я могу взять весь массив данных сразу и делать с ним что хочу (aEval, dbEval, SQLExecute() и пр) . В целом , для демонстрашки экспорта доработка хорошая, практически не знаю зачем
Если бы такие красивые отчеты нужны были каждый день, то согласен, делал бы НЕ через ОЛЮ. А так раз в месяц, а то и три нужен красивый отчёт начальству. Не буду я тратить время на это, пускай 20 минут ждут, хотя у меня быстрей проходит. Есть готовая фишка в МиниГуи - красивый экспорт, пускай работает.
gfilatov2002
moderator
Пост N: 1696
Зарегистрирован: 11.02.10
Отправлено: 06.05.20 17:07. Заголовок: Всем кому это интересно
Подготовил 2-ю бету для новой сборки 20.05. Что нового Скрытый текст
* New: Added a new command for managing of the 'This' property at runtime: SET WINDOW THIS TO [<w>] where <w> may be a Form Name or a Form Index. Sample code: DEFINE WINDOW Form_1 ... @ 10,10 BROWSE Browse_1 ... END WINDOW ... Set Window This To "Form_1" // set a new 'This' property This.Browse_1.ColumnsAutoFit() This.Center() This.Activate() Set Window This To // restore a previous 'This' property Suggested and contributed by Sergej Kiselev. * Enhanced: Added support of the PICTURE option to format the columns in the Browse control. Contributed by Jan Szczepanik <jan-szczepanik/at/wp.pl> (see demo in folder \samples\Basic\BROWSE_PICTURE) * Enhanced: The SplitButton control may be placed now in the TAB container. Requested by Ivanil Marcelino <ivanil/at/linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: PropGrid library v.2.0 (see source in folder \source\PropGrid): - Fixed: Bug in a Masked Float (double) item handling. Reported by Ivanil Marcelino <ivanil/at/linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo3.prg in folder \samples\Advanced\PropGrid) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - a minor correction in the method :AddColumn(); - added ENUMERATOR correction for numbering of the visible columns only. Usage: nCnt := 1 FOR EACH oCol IN oBrw:aColumns oCol:cSpcHeading := NIL IF oCol:lVisible oCol:cSpcHeading := hb_ntos( nCnt++ ) ENDIF NEXT - added the new variable :lDrawLine in the TSBrowse class and the new variable :oCell in the TSColumn class; - enhanced auxiliary class TSBcell for a quick export of a data; - added the new variable :nCellMarginLR and the new method CellMarginLeftRight() in the TSBrowse class. Contributed by Sergej Kiselev (see demo5.prg in folder \samples\Advanced\Tsb_Array_2) * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.32.0dev. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * Updated: '7-Zip interaction' sample by Vladimir Chumachenko: - the russian comments were replaced with an english translation. Contributed by Anand K Gupta (see in folder \samples\Advanced\7-Zip)
Если заметили неточности в этом описании - пишите, исправлю...
Andrey
постоянный участник
Пост N: 6652
Зарегистрирован: 12.09.06
Отправлено: 06.05.20 18:13. Заголовок: А нельзя в новой вер..
А нельзя в новой версии сделать правильное отображение символьных полей при задании центровки DT_CENTER ? Не работает центровка сейчас ! Чтобы заработало, нужно шаманство делать, благо без бубна...
SergKis
постоянный участник
Пост N: 3176
Зарегистрирован: 17.02.12
Отправлено: 06.05.20 18:35. Заголовок: Andrey пишет А нельз..
Andrey пишет
цитата:
А нельзя в новой версии сделать правильное отображение символьных полей при задании центровки DT_CENTER ? Не работает центровка сейчас !
Центровка работает, но мешает центровать, как ты хочешь правые пробелы. Если их убирать ( trim() или alltrim ? ), то "сломается" отображение старого алгоритма, т.е. значение "1 " в колонке 120 шириной отобразится по другому. Так же сломаться может отображение строк с CRLF. Сейчас решаю задавая oCol:bDecode := {|cval| Alltrim(cval) }
Отправлено: 06.05.20 19:15. Заголовок: Andrey Как он может..
Andrey Как он может работать, если цвета ставишь на него, раньше, чем создаешь SuperHeader
mySetTsb( oBrw ) // настройки таблицы myColorTsb( oBrw ) // цвета на таблицу myColorTsbElect( oBrw ) // цвета избранные mySumTsb ( oBrw ) // суммирование колонок таблицы myDbfDelColTsb( oBrw ) // убрать колонки из отображения mySupHdTsb( oBrw, aSupHd ) // SuperHeader myEnumTsb( oBrw ) // ENUMERATOR по порядку mySet2Tsb( oBrw ) // настройки таблицы
Andrey
постоянный участник
Пост N: 6654
Зарегистрирован: 12.09.06
Отправлено: 06.05.20 19:39. Заголовок: SergKis пишет: Как ..
SergKis пишет:
цитата:
Как он может работать, если цвета ставишь на него, раньше, чем создаешь SuperHeader
Ну вот так и бывает...
Haz
администратор
Пост N: 1553
Зарегистрирован: 20.02.11
Отправлено: 06.05.20 23:51. Заголовок: Andrey пишет: Не бу..
Andrey пишет:
цитата:
Не буду я тратить время на это
Каждому своё. Я лучше один раз потрачу тк мне неприемлемо когда отчёта нужно ожидать больше нескольких секунд. Что касается "пусть будет", то я и не говорил что эти доработки нужно убрать. Я говорил только о том, что для серьёзных объёмов есть другой инструмент, который в отличии от кривого Ole экспорта работает всегда и позволяет любые цвета и шрифт.
gfilatov2002 Предложение по hmg_alert(), AlertInfo() и др. - hmg_alert() значение nIcoSize сделать равным 0, тогда на окне нет DRAW ICO ... - в AlertInfo(), AlertExclamation(), AlertStop() добавить параметр lNoPlay, для отключения звук. сигнала Alert.prg Скрытый текст
... *-----------------------------------------------------------------------------* FUNCTION AlertExclamation ( Message, Title, Icon, nSize, aColors, lTopMost, bInit, lNoPlay ) *-----------------------------------------------------------------------------* LOCAL nWaitSec
- added the new variable :lDrawLine in the TSBrowse class
Добавил "быстрого" доступа к элементам тсб, SuperHeader, Header, SpecHd, DrawLine и Footer. В TsColumn.prg добавил переменные
DATA oCellHead // TSBcell object Header DATA oCellEnum // TSBcell object Enumerator DATA oCellFoot // TSBcell object Footer DATA oCell // TSBcell object
В h_tbrowse.prg правил METHOD DrawSuper( lDrawCell ) CLASS TSBrowse METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse CLASS TSBcell
Исходники и пример по использованию тут https://TransFiles.ru/vpnu8 в demo7 работают клавиши F8 - общий способ доступа для массива и dbf, использован "родной" вариант AlertInfo() F9 - только доступ для dbf, использован вариант AlertInfo() с nIcoSize := 0 и lNoPlay := .T.
IF _HMG_lOOPEnabled RetVal := _ControlObj ( Arg2 , Arg1 ) IF HB_ISOBJECT( RetVal ) .and. _HMG_aControlType[ RetVal:Index ] == "TBROWSE" RetVal := _HMG_aControlIds[ RetVal:Index ] ENDIF ELSEIF ( ix := GetControlIndex ( Arg2 , Arg1 ) ) > 0 IF _HMG_aControlType[ ix ] == "TBROWSE" RetVal := _HMG_aControlIds[ ix ] ENDIF ENDIF #endif ... Синим цветом, наверно, надо убрать Это даст возможность получать объект TSBROWSE, как SET OOP ON, так и SET OOP OFF ? (This.oBrw.Object):ClassName // SET OOP OFF ? (This.oBrw.Object):Tsb:ClassName // SET OOP ON\OFF
gfilatov2002 Немного подкрутил h_alert.prg для контроля выхода за пределы экрана по width. Вот, что получилось. Пример и исходник тут https://TransFiles.ru/mowhr Можно поиграть размером фонта DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize + 1 DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize - 1 DEFINE FONT DlgFont FONTNAME "Courier New" SIZE _HMG_DefaultFontSize - 2
подкрутил h_alert.prg для контроля выхода за пределы экрана
Эти изменения не приняты по причине увеличения ширины окон Alert* в примере из папки samples\Basic\WALERT_2 Изменения в файле h_alert.prg не должны приводить к изменению вида обычных окон (совместимость снизу вверх)
SergKis
постоянный участник
Пост N: 3189
Зарегистрирован: 17.02.12
Отправлено: 13.05.20 15:28. Заголовок: gfilatov2002 пишет и..
gfilatov2002 пишет
цитата:
изменения не приняты по причине увеличения ширины окон Alert*
Очень не хочется писать лишний блок кода bInit. Может такие поправки помогут
Отправлено: 13.05.20 16:27. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет
цитата:
Да, с этими изменениями примеры не отличаются
В примере BASIC\WALERT_2 надо, наверно, учесть вылезание списка ошибок за пределы descktop при фонте 16 на 14" мониторе (кнопку почти не видно), т.е. надо ставить ограничение по высоте
DEFINE FONT DlgFont FONTNAME "DejaVu Sans Mono" SIZE 16
SET MSGALERT FONTCOLOR TO BLACK SET MSGALERT BACKCOLOR TO {248,209,211}
Отправлено: 13.05.20 17:47. Заголовок: gfilatov2002 пишет я..
gfilatov2002 пишет
цитата:
я тоже вышел на этот коэффициент 0,7
Ширины может не хватить, если исп. много заглавных букв типа W,B Можно игнорировать ситуацию или ввести static переменную для коэф. 0.7 или установленного в переменную
gfilatov2002 Сделал контроль выхода за пределы экрана по height
STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... LOCAL nMaxLineas := HMG_Alert_MaxLines() LOCAL nMaxWidth, nMaxHeight ... IF MSC_VER() > 0 .AND. _HMG_IsThemed nWidthDlg += 10 nHeightDlg += 10 ENDIF
IF nHeightDlg > System.ClientHeight n := 0 WHILE ( nHeightDlg - ( nChrHeight * ( ++n ) ) ) > System.ClientHeight END nMaxHeight := nChrHeight * n nMaxLineas -= n nHeightDlg -= nMaxHeight nHeightCli -= nMaxHeight ENDIF
This.Width := nWidthDlg ...
SergKis
постоянный участник
Пост N: 3195
Зарегистрирован: 17.02.12
Отправлено: 14.05.20 11:50. Заголовок: PS В примере BASIC..
PS В примере BASIC\WALERT_2 окно со списком не выходит за пределы окна при фонте SIZE 16 и больше В примере demo7 установка большего фонта или HMG_Alert_MaxLines(35) - все в пределах окна
А какие возможности эта версия дает по сравнению с 32-битными? Если не пользоваться большими числами в расчетах.
Хотел ради интереса посмотреть примеры. Как я понимаю последняя общедоступная версия была 16.10? Скачал ее, но при сборке примеров почему-то вылезает ошибка с файлом minigui.ch, хотя все есть, вроде. Если кто помнит, там все файлы есть или надо еще что-то скачивать? Или просто пути там не так прописаны?
Хочется вообще посмотреть на это, как на демо, понять нужность или не ненужность для себя. А с поддержкой увы, ранее хотел говорить с директором о развитии, а тут с этим вирусом самим бы выжить.
какие возможности эта версия дает по сравнению с 32-битными?
Благодарю за вопрос! Если коротко, то это - относительно высокая скорость выполнения и возможность адресовать больший объем памяти, поскольку приложение становится нативным для 64-битной среды. Подробнее можно почитать статьи в Интернете.
Приведу для справки список поддерживаемых Си-компиляторов: - MinGW GNU C 10.1 - самый свежий и самый быстрый из всех - BCC 64, основанный на LLVM/Clang C 3.3.1; - Visual C++ 19.24.28314; - PellesC 9.0.
Отправлено: 18.05.20 14:57. Заголовок: gfilatov2002 пишет О..
gfilatov2002 пишет
цитата:
Отдельная функция не нужна, поскольку уже есть более общая функция GetFontParam()
К сожалению, в _HMG_aControlFontName [k] := fName это имя фонта в системе, к примеру "Arial", а надо имя фонта регистрации, т.е. из _HMG_aControlNames [k] := FontName, например "Norm", "Bold", "Itog", т.к. контрол на входе не понимает handle фонта, надо имя регистрации.
SergKis
постоянный участник
Пост N: 3207
Зарегистрирован: 17.02.12
Отправлено: 18.05.20 15:01. Заголовок: PS или добавить в во..
PS или добавить в возврат GetFontParam( FontHandle ) имя регистрации и тогда можно сделать #xtranslate HMG_FontName( <hFont> )...
Добавил все предложенные правки. Благодарю за помощь
SergKis
постоянный участник
Пост N: 3211
Зарегистрирован: 17.02.12
Отправлено: 19.05.20 11:57. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет
цитата:
Добавил все предложенные правки.
Выяснил, наверно, почему не было Footers в METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse Если одновременно использовать с :LDblClick() :LButtonClick() или :RButtonClick(), то при нажатии LDblClick делая левый или правый клик "ложно" срабатывает после них LDblClick Это надо отметить для себя, что можно использовать или :LDblClick() или :LButtonClick(), :RButtonClick().
gfilatov2002
moderator
Пост N: 1711
Зарегистрирован: 11.02.10
Отправлено: 19.05.20 12:04. Заголовок: SergKis пишет: Это ..
SergKis пишет:
цитата:
Это надо отметить для себя.. почему не было Footers
Да, это известная проблема, подобное поведение происходит и при двойном клике по иконке приложения в трее Убрал предложенную правку для METHOD LDblClick
Отправлено: 20.05.20 12:23. Заголовок: SergKis пишет: Еще ..
SergKis пишет:
цитата:
Еще
OK
gfilatov2002
moderator
Пост N: 1714
Зарегистрирован: 11.02.10
Отправлено: 21.05.20 10:49. Заголовок: Всем кому это интересно :)
Завершена подготовка новой сборки 20.05, которая будет опубликована на следующей неделе, со следующим списком изменений (кратко): Скрытый текст
* Added a command for managing of the 'This' property at runtime: SET WINDOW THIS TO [<w>] where <w> may be a Form Name or a Form Index.
* Added support of the PICTURE option to format the columns value in the Browse control.
* The 'Command Link' button and 'Split Button' may be placed now in the TAB container.
* Added the lNoSound parameter to the new Alert* family functions to block an any sound effect at startup of the above functions.
* Added the auxiliary function HMG_Alert_MaxLines() for managing of the height of the EditBox control in the function HMG_Alert(). The width and height of an Alert window cannot exceed now a visible desktop area.
* Updated header file i_hmgcompat.ch for compatibility with Official HMG.
* Updated HMGS-IDE v.1.4.4.1, HBPrinter, PropGrid, TSBrowse and Sqlite3 libraries.
* Added the new interesting samples and updated the some Basic and Advanced samples.
Также выполнена адаптация текущей сборки для свежих версий Си-компиляторов:
- MinGW GNU C 10.1 32-bit и 64-bit;
- Microsoft Visual C++ 19.25.28614 32-bit и 64-bit;
- BCC64, основанный на LLVM/Clang C 3.3.1 (35759.1709ea1.58602a0) (64-bit).
Благодарю за ваше внимание
Andrey
постоянный участник
Пост N: 6707
Зарегистрирован: 12.09.06
Отправлено: 25.05.20 14:10. Заголовок: А можно в HMG_Alert(..
А можно в HMG_Alert() при выводе даже помещаемых данных, сразу выводить их в EDITBOX ? Удобно вывести данные, посмотреть и если нужно, то скопировать ЧАСТЬ или ЦЕЛИКОМ в буфер обмена. В EDITBOX это удобно делать.
SergKis
постоянный участник
Пост N: 3237
Зарегистрирован: 17.02.12
Отправлено: 25.05.20 14:37. Заголовок: Andrey А добавить п..
Andrey А добавить пустых строк AlertInfo(cMsg+repl(" ;", 20), "INFO")
Отправлено: 25.05.20 15:27. Заголовок: SergKis пишет: А до..
SergKis пишет:
цитата:
А добавить пустых строк AlertInfo(cMsg+repl(" ;", 20), "INFO")
Да не хотелось бы.
gfilatov2002 пишет:
цитата:
Да, это будет возможно в сборке 20.05, если перед вызовом функции HMG_Alert() написать HMG_Alert_MaxLines( 1 ) тогда будет вывод всех строк в EDITBOX , а на экране будет показана только одна строка.
Спасибо ! Эта настройка глобальная или только для одного вызова HMG_Alert() ?
SergKis
постоянный участник
Пост N: 3239
Зарегистрирован: 17.02.12
Отправлено: 25.05.20 15:55. Заголовок: gfilatov2002 Может ..
gfilatov2002 Может чуть поправить HMG_Alert
STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable, cFont, nMaxLen ) ... IF nLineas > 1
IF nLineas >= nMaxLineas ... Тогда проще делать, что хочет Андрей nOld := HMG_Alert_MaxLines() IF nOld > hb_TokenCount(cMsg, ";") HMG_Alert_MaxLines(hb_TokenCount(cMsg, ";")) AlertInfo(cMsg, ...) HMG_Alert_MaxLines( nOld ) ENDIF
и весь текст войдет в EditBox
SergKis
постоянный участник
Пост N: 3240
Зарегистрирован: 17.02.12
Отправлено: 25.05.20 16:07. Заголовок: PS Возможно, лучше и..
Хорошо ! Спасибо ! Только если я в коде промахнулся и строчек больше одной - то нужно показывать ВСЕ строчки ! Т.е. задал 1 строчку, значение вывожу 5 строчек, то должны показываться все 5 строчек.
SergKis
постоянный участник
Пост N: 3243
Зарегистрирован: 17.02.12
Отправлено: 25.05.20 19:39. Заголовок: Andrey пишет Т.е. за..
Andrey пишет
цитата:
Т.е. задал 1 строчку, значение вывожу 5 строчек, то должны показываться все 5 строчек.
Посмотри предыдущий пост, такой код сделает как ты хочешь, т.е. от кол-ва строк в тексте, т.е. у меня _MsgLog.lst 12 строк, что бы их всех сразу увидеть и написан код выше
- enhanced auxiliary class TSBcell for a quick export of a data. Usage: WITH OBJECT oBrw :lDrawLine := .F. :GoTop() FOR nAt := 1 TO :nLen :DrawLine() FOR nCol := 1 TO :nColCount() oCol := :aColumns[ nCol ] ? "..", nCol, oCol:cName, Valtype(oCol:oCell:uValue), oCol:oCell:uValue, oCol:oCell:cValue NEXT :GoDown() NEXT :lDrawLine := .T. :Reset() END WITH
Перенести :DrawLine(), т.к. в предыдущем варианте срабатывала последней :DrawSelect(), это другое заполнение oCol:oCell
Что бы не делать лишний вызов, наверно, надо поправить
*-----------------------------------------------------------------------------* FUNCTION HMG_Alert_MaxLines( nMaxLines ) *-----------------------------------------------------------------------------* LOCAL nLines := s_nMaxLines
FOR EACH aDim IN aScale IF nFontSize == aDim[1] nPrcW := aDim[2] nPrcH := aDim[3] EXIT ENDIF NEXT
IF lDlu2Pix ; RETURN := TDlu2Pix():New( nPrcW, nPrcH ) ENDIF
RETURN { nPrcW, nPrcH }
*-----------------------------------------------------------------------------* FUNCTION oDlu2Pixel( nPrcW, nPrcH, nFontSize ) *-----------------------------------------------------------------------------* LOCAL aPrcWH
- enhanced auxiliary class TSBcell for a quick export of a data. Usage: WITH OBJECT oBrw :lDrawLine := .F. :GoTop() FOR nAt := 1 TO :nLen :DrawLine() FOR nCol := 1 TO :nColCount() oCol := :aColumns[ nCol ] ? "..", nCol, oCol:cName, Valtype(oCol:oCell:uValue), oCol:oCell:uValue, oCol:oCell:cValue NEXT :GoDown() NEXT :lDrawLine := .T. :Reset() END WITH
Перенести :DrawLine(), т.к. в предыдущем варианте срабатывала последней :DrawSelect(), это другое заполнение oCol:oCell
Что бы не делать лишний вызов, наверно, надо поправить
*-----------------------------------------------------------------------------* FUNCTION HMG_Alert_MaxLines( nMaxLines )
Уже поправил в "тихом" обновлении этой сборки.
SergKis пишет:
цитата:
можно добавить таблицу процентов scale от размера фонта
Да, это интересное предложение, но уже для следующей сборки. Благодарю за оперативную помощь
- enhanced auxiliary class TSBcell for a quick export of a data.
А можно для суперхидера получить начало и конец объединенных ячеек ? Это нужно для экселя.
aSup := oBrw:DrawSuper( .F. ) FOR EACH oCel IN aSup hFnt := oCel:hFont aFore := oCel:nClrFore aBack := oCel:nClrBack xVal := oCel:cValue AADD( aRet, { aFore, aBack, hFnt, xVal } ) NEXT
Или это можно уже сейчас получать в этом классе ?
SergKis
постоянный участник
Пост N: 3249
Зарегистрирован: 17.02.12
Отправлено: 28.05.20 14:56. Заголовок: Andrey пишет А можно..
Andrey пишет
цитата:
А можно для суперхидера получить начало и конец объединенных ячеек ? Это нужно для экселя.
Можно получать сейчас так
aSup := oBrw:DrawSuper( .F. ) FOR EACH oCel IN aSup nFrom := oBrw:aSuperHead[ hb_enumindex( oCel ) ][1] nTo := oBrw:aSuperHead[ hb_enumindex( oCel ) ][2] hFnt := oCel:hFont aFore := oCel:nClrFore aBack := oCel:nClrBack xVal := oCel:cValue AADD( aRet, { aFore, aBack, hFnt, xVal } ) NEXT
Если поправить класс TSBcell и метод, то можно проще получать данные
CLASS TSBcell ... VAR nHeight AS NUMERIC INIT 0 VAR nFromCol AS NUMERIC INIT 0 VAR nToCol AS NUMERIC INIT 0 VAR nCell ... METHOD DrawSuper( lDrawCell ) CLASS TSBrowse ... oSupHd := TSBcell():New() ... oSupHd:lDrawLine := .F. // DrawLine() oSupHd:nFromCol := aSuperHead[ nI, 1 ] oSupHd:nToCol := aSuperHead[ nI, 2 ] ... тогда можно так делать aSup := oBrw:DrawSuper( .F. ) FOR EACH oCel IN aSup nFrom := oCel:nFromCol nTo := oCel:nToCol hFnt := oCel:hFont aFore := oCel:nClrFore aBack := oCel:nClrBack xVal := oCel:cValue AADD( aRet, { aFore, aBack, hFnt, xVal } ) NEXT
Можно получать сейчас так aSup := oBrw:DrawSuper( .F. ) FOR EACH oCel IN aSup nFrom := oBrw:aSuperHead[ hb_enumindex( oCel ) ][1] // строка 250 nTo := oBrw:aSuperHead[ hb_enumindex( oCel ) ][2]
Выдаёт ошибку: Error BASE/1132 Bound error: array access Args: [1] = A { ... } length: 7 [2] = N 8 --------------------------------- Stack Trace --------------------------------- Called from MYGETTSBSUPH(250) in module: MenuExcel7.prg Called from MYGETTSBCONTENT(166) in module: MenuExcel7.prg
SergKis
постоянный участник
Пост N: 3250
Зарегистрирован: 17.02.12
Отправлено: 28.05.20 16:30. Заголовок: Andrey пишет Выдаёт ..
Andrey пишет
цитата:
Выдаёт ошибку:
А на подумать можно о сообщении ?
aSup := :DrawSuper( .F. ) FOR EACH oCel IN aSup nCol := hb_enumindex(oCel) nFrom := -1 nTo := -1 IF nCol <= Len(:aSuperHead) nFrom := :aSuperHead[ nCol ][1] nTo := :aSuperHead[ nCol ][2] ENDIF hFnt := oCel:hFont
результат (цифры перед текстом) ==== решение только для dbf =========================== F9 "быстрый" доступ к данным тсб через объекты класса TSBcell oCol:oCellHead, oCol:oCellEnum, oCol:oCell, oCol:oCellFoot :lDrawLine = .T. Log file = _MsgLog.txt
IF ISARRAY( _HMG_aFormMiscData1[ i ] ) .and. Len( _HMG_aFormMiscData1[ i ] ) > 2 IF ISARRAY( _HMG_aFormMiscData1[ i, 3 ] ) .and. Len( _HMG_aFormMiscData1[ i, 3 ] ) > 0 FOR EACH x IN _HMG_aFormMiscData1[ i, 3 ] DeleteObject( x ) NEXT ENDIF ENDIF
// Delete Brush
DeleteObject ( _HMG_aFormBrushHandle [ i ] ) ...
h_draw.prg ... FUNCTION HMG_DrawIcon( window, icon, row, col, w, h, rgb, transparent ) LOCAL FormHandle LOCAL backcolor LOCAL i, name ... hb_default( @rgb, GetSysColor( COLOR_BTNFACE ) )
IF ISSTRING( icon ) name := icon icon := LoadIconByName( icon, w, h ) ENDIF
Григорий ! Удаление записи в методе :SetDeleteMode( .T., .T. ) - запрос идет через MsgYesNo() Поменять на AlertYesNo() - можно ? Или переключатель сделать какой то ? А то при удалении/вставки разные окна. Как то не то.
SergKis
постоянный участник
Пост N: 3258
Зарегистрирован: 17.02.12
Отправлено: 08.06.20 11:17. Заголовок: Andrey Почему не см..
Andrey Почему не смотришь исходники, примеры, когда что то применяешь и есть не ясность или вопросы. Сканируй примеры Advanced Far -> Alt_F7 -> *.prg "SetDeleteMode" и просмотри найденное. Открой h_tbrowse.prg, найди метод SetDeleteMode() и смотри параметры Если в твоем редакторе сложно, открывай hbedit от А.Кресина Alt+L и весь список ф-й, методов с поиском перед глазами
Andrey
постоянный участник
Пост N: 6722
Зарегистрирован: 12.09.06
Отправлено: 08.06.20 14:07. Заголовок: Посмотрел. Нет таког..
Посмотрел. Нет такого - поменять MsgYesNo() на AlertYesNo() ! Это нужно сделать в
Использовать, например, на индексе с FOR в котором есть Deleted() : :SetDeleteMode( .T., .F., {|| AlertYesNo(iif((oBrw:cAlias)->(OrdSetFocus()) == "DEL", ; "Восстановить", "Удалить")+" запись в таблице ?", "Подтверждение") } )
т.е. перенести этот код ниже, чтобы учитывать восстановление записи также. Сделал, конечно. Благодарю за помощь
gfilatov2002
moderator
Пост N: 1729
Зарегистрирован: 11.02.10
Отправлено: 16.06.20 12:15. Заголовок: Всем кому это интересно
Подготовил 5-ю бету для новой сборки 20.06 со следующим списком изменений: Скрытый текст
* Fixed: The back color of a TAB control was not changed at runtime. Problem was reported by Ivanil Marcelino <ivanil/at/linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\TAB) * Fixed: Pacified the C-warning "cast-function-type" in the MiniGUI core (was passed MinGW GNU C 10.1): - added the auxiliary C-function wapi_GetProcAddress(). It was a postponed modification. Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: Added the useful function HMG_SetMenuTheme( [ nType ][, cFormName ] ) for setting of the predefined menu themes, where the 1st parameter nType may have the following values: - MNUCLR_THEME_DEFAULT; - MNUCLR_THEME_XP; - MNUCLR_THEME_2000; - MNUCLR_THEME_DARK. Requested by Verchenko Andrey <verchenkoag/at/gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\MenuEx) * Updated: Synchronized Extended HMG for compatibility with Official HMG: - New: function GetFormNameByHandle( hWnd, @cFormName, ; @cFormParentName ) --> Return nFormIndex; - New: function GetControlNameByHandle ( hWnd, @cControlName, ; @cFormParentName ) --> Return nControlIndex. Based upon a contribution of Claudio Soto <srvet/at/adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\MoveResizeControl) * New: 'HbCrypto' library contains (see source in folder \Source\HbCrypto): - Harbour interface to bcrypt password hashing; - BLAKE2s function wrapper (fast secure hash); - ED25519 wrappers; - Harbour interface to PBKDF2 password hashing; - Harbour interface to scrypt password hashing; - SHA3 function wrappers (secure hash). Based upon a contribution of Viktor Szakats (borrowed from 3.4 fork). Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'Bos Taurus' Graphics Library (see source in folder \Source\BosTaurus): - fixed the MinGW C-warning "cast-function-type". Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'HMG Debugger' library: - adapted to the recent Minigui core changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see source in folder \Source\Debugger) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - minor correction of a font handling in the method AddSuperHead(); - minor correction of a refreshing in the method DeleteRow(); - minor correction of a phantom column's painting in the method DrawSelect(). Contributed by Sergej Kiselev. * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.32.2. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * Updated: 'Print Pie Graph' sample: updated the data for May 2020. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\GraphPrint) * Updated: The following samples were revised for compatibility with the recent Minigui modification: - menudemo2.prg in folder \samples\Basic\Menu; - \samples\Advanced\MenuEx; - \samples\Advanced\SetThemes; - \samples\Advanced\TransparentIcons. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'Quick Browse Generator' utility: - adapted to the recent Minigui core changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\QBGen)
Благодарю за ваше внимание
gfilatov2002
moderator
Пост N: 1730
Зарегистрирован: 11.02.10
Отправлено: 18.06.20 11:07. Заголовок: P S По просьбе Андре..
P S По просьбе Андрея расширил возможности новой функции HMG_SetMenuTheme() по определению пользовательской темы меню. Синтаксис:
Отправлено: 23.06.20 18:30. Заголовок: gfilatov2002 Можно ..
gfilatov2002 Можно в сервер примера LetoDbf внести небольшие изменения, для проверки наличия\запуска сервера в памяти на localhost из клиента ? Или обходится своей сборкой ?
Можно команду SET MULTIPLE OFF WARNING сделать через AlertStop() ?
не надо. Или стандарт или с выбором куда выводить. Дизайн AlertStop() не к любому интерфейсу по фейсу Ps.. Кому нужно будет, могут команду переопределить
Посмотри как в ch команда транслируется и замени для себя msgstop() на что хочешь.
Не, это не то... Ладно, проехали... Не особо существенно это.
Другая проблема достаёт. Под Win 8.1 нет у меня сообщения из функции WaitWindow( cMessage, lNoWait ). Под ХР, 7, 10 всё есть. Нашёл эту функцию в h_windows.prg Сделал отладку и увидел почему так:
My test program (2): Запуск второй копии программы / Starting a second copy of the program hb_osIsWin8()= .T. nWidth := GetTextWidth( , 'My test program (2): Запуск второй копии программы / Starting a second copy of the program' ) nWidth := 611 800 < 1222 .T.
Андрей, конечно можно исправить. Напиши Григорию обоснованное исправление и он точно скажет тебе спасибо. Из твоей отладки я вижу, что по условию выдаст пустую строку. Кто и зачем это условие поставил я не задумывался. В принципе исходник простой, разобраться не сложно.
Andrey
постоянный участник
Пост N: 6742
Зарегистрирован: 12.09.06
Отправлено: 06.07.20 00:16. Заголовок: А кто нибудь пользов..
А кто нибудь пользовался примером MiniGUI\SAMPLES\Advanced\Decompiler ? А то у меня Decompiler.exe вылетает с ошибкой:
Application: W:\HB_Project\PROJECT\ТЕСТ\Decompiler.exe Time from start: 0 days 0 hours 0 mins 15 secs Error BASE/1132 Bound error: array access Args: [1] = A { ... } length: 1 [2] = N 2 --------------------------------- Stack Trace --------------------------------- Called from DCP_F80(739) in module: Decompiler.prg Called from DCP_F25(674) in module: Decompiler.prg Called from DCP_SPLIT_CODE(337) in module: Decompiler.prg Called from DECODE_C2PRG(38) in module: Decompiler.prg Called from E2CHD(167) in module: Decompiler.prg Called from (b)MAIN(27) in module: Decompiler.prg Called from _DOCONTROLEVENTPROCEDURE(1901) in module: h_windows.prg Called from EVENTS(1757) in module: h_events.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1514) in module: h_windows.prg Called from MAIN(23) in module: Decompiler.prg
Vlad04
постоянный участник
Пост N: 840
Зарегистрирован: 13.10.05
Отправлено: 06.07.20 18:56. Заголовок: Тест идет, а реальна..
Тест идет, а реальная то же вываливается с ошибкой
цитата:
Error BASE/1132 Bound error: array access
, но в других местах. Я её и раньше проверял - никогда она нормально не работала.
IF ! ::lEnabled For nI := 1 TO Len( ::aColumns ) ::aColumns[ nI ]:RestColor() SetColor( , ::aColumns[ nI ]:aColors, nI ) Next If !Empty(::oPhant) ::oPhant:RestColor() EndIf ...
Правка небольшая METHOD Enabled( lEnab ) CLASS TSBrowse
А курсор активный серым цветом можно сразу сделать в этом методе ? Было бы удобней так.
Haz
администратор
Пост N: 1573
Зарегистрирован: 20.02.11
Отправлено: 14.07.20 17:34. Заголовок: Andrey пишет: А кур..
Andrey пишет:
цитата:
А курсор активный серым цветом можно сразу сделать в этом методе ? Было бы удобней так.
курсор разный бывает. Я использую только рамочный, чтоб не терять подсветку ячеек ( обязательные поля и пр). И переключение с рамки на серый лайтбар будет не эстетично 😎
SergKis
постоянный участник
Пост N: 3281
Зарегистрирован: 17.02.12
Отправлено: 14.07.20 18:04. Заголовок: Haz пишет Я использу..
Haz пишет
цитата:
Я использую только рамочный, чтоб не терять подсветку ячеек ( обязательные поля и пр). И переключение с рамки на серый лайтбар будет не эстетично
Не только не эстетично, но главное теряется фокус, с какой строкой тсб идет манипуляция (заблокировав тсб), что визуально важно. А сменить цвет для выбранной строки, поставь нужный всем колонкам (старый ты знаешь или сохрани), сделай :DrawSelect() :Enabled(.F.) потом :Enabled(.T.) Старый цвет restore :DrawSelect()
Haz
администратор
Пост N: 1574
Зарегистрирован: 20.02.11
Отправлено: 14.07.20 22:00. Заголовок: SergKis пишет: Не т..
SergKis пишет:
цитата:
Не только не эстетично,
Сергей, я о том же. В остальном привык все установки делать руками, включая управление цветом. Иметь базовое стандартное решение это хорошо, но только до тех пор, пока свое писать дольше чем исправлять базу. Мне пока проще вместо :enabled() использовать :lEnable и свои игры с цветом.
SergKis
постоянный участник
Пост N: 3282
Зарегистрирован: 17.02.12
Отправлено: 14.07.20 22:21. Заголовок: Haz пишет я о том же..
Haz пишет
цитата:
я о том же ... Мне пока проще вместо :enabled()
Полностью с тобой согласен, а :Enabled() совсем не использую, окно модал, не закрывая тсб с вертушкой\градусником достаточно в районе StatusBar. Часто надо что бы тсб "шевелилось" в это время, а :Enabled() отрубает некоторые методы.
Haz
администратор
Пост N: 1575
Зарегистрирован: 20.02.11
Отправлено: 16.07.20 14:36. Заголовок: SergKis пишет: а :E..
SergKis пишет:
цитата:
а :Enabled() совсем не использую
Сергей, подумал есть вариант быстро затенять весь бровс , не заботясь о сохранении изначального цвета. Суть в следующем: Весь объект рисуется через TSDrawCell(), цвета передаются параметрами. Можно задать флаг lGreyScale в переменных бровса , а цвета переопределять в зависимости от флага. к примеру nClrBack завернуть как if( ::lGrayScale, RgbToGray(nClrBack), nClrBack ) и так везде.
Сама RgbToGray() - простое преобразование цвета в градации серого
Static function RgbToGray(RGBColor) local nGray nGray := Round((0.30*GetRgb(RGBColor)[1])+(0.59*GetRgb(RGBColor)[2])+(0.11*GetRgb(RGBColor)[3]),0) Return RGB(nGray, nGray, nGray)
Static Function GetRGB(nColor) LOCAL nR := 0 LOCAL nG := 0 LOCAL nB := 0 LOCAL cColor := NTOC(nColor, 16) nR := CTON(SUBSTR( cColor, 5, 2 ), 16) nG := CTON(SUBSTR( cColor, 3, 2 ), 16) nB := CTON(SUBSTR( cColor, 1, 2 ), 16) RETURN {nR, nG, nB }
В теории должно работать , вырубил флаг и бровс опять цветной. PS возможны нюансы с отрицательным знечением цвета, но уверен легко устранимые . Зато нет нужды сохранять и восстанавливать , а для скорости и простоты все делать через обертку для TSDrawCell() , которая и заменяет цвет перед подачей в оригинальную TSDrawCell()
ЗЗЫ проверил - криво работает преобразование в грей, нужен алгоритм другой
Отправлено: 16.07.20 15:45. Заголовок: Haz пишет есть вариа..
Haz пишет
цитата:
есть вариант быстро затенять весь бровс , не заботясь о сохранении изначального цвета.
Может не врубаюсь, вариантов покрасить тсб много, от ф-й в блоках кода на колонку, "Enabled(.T.\.F.) и то что предлагаешь, а еще можно переменные иметь (вдруг не серый свет надо, а зеленый и .т.д.) и от них плясать. В чем смысл и цель ? То что есть, хватает, а усложнять ... и так приходится, то в кусок кода лезть, то в сам h_tbrowse.prg, что бы вспомнить детали. Есть еще oCol:Cargo, доп. к oBrw:Cargo можно для каждой колонки определить все что хочешь и отрабатывать. На мой взгляд, то что есть достаточно, а красить в серый, зеленый, синий, ... это уже как кому хочется, варианты есть.
цитата:
Все работает , цвета в серый преобразовываются поменял в базовом примере ColorsTable функцию GetColumnBackColor() на это
Что то не нашел такую ф-ю в примерах. О каком примере речь ?
Haz
администратор
Пост N: 1577
Зарегистрирован: 20.02.11
Отправлено: 16.07.20 16:27. Заголовок: SergKis пишет: На ..
SergKis пишет:
цитата:
На мой взгляд, то что есть достаточно, а красить в серый, зеленый, синий, ... это уже как кому хочется, варианты есть.
Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. Попробовал функцию конвертации цвета в серый- работает. Тренировался тут MiniGUI\SAMPLES\BASIC\ColorsTable\demo.prg
цитата:
GetColumnBackColor()
живет там.
SergKis
постоянный участник
Пост N: 3284
Зарегистрирован: 17.02.12
Отправлено: 16.07.20 16:48. Заголовок: Haz пишет Просто инт..
Haz пишет
цитата:
Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов.
Большой разницы не вижу, делать как в :Enabled() с сохранением и восстановлением или через переменную предложенную, т.к. это надо проделывать в :DrawSuper(), :DrawHeader() (внутри нее :lDarawSpcHd, :lDrawFooter), :DrawLine(), DrawSelect() и учесть в последнем отрицательные цвета
цитата:
Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов. Попробовал функцию конвертации цвета в серый- работает.
Сергей, подумал есть вариант быстро затенять весь бровс , не заботясь о сохранении изначального цвета.
Я уже давно использую свою функцию ОТДЕЛЬНУЮ для этого. Выкладывал уже исходник. Эта функция интересна ещё тем, что блокирует автоматом все дальнейшие нажатия на форме. И картинки на форме четко затеняет. Т.е. из Си вызывается окно с размерами формы и затеняет своё окно заданным цветом. После того как нужно убрать затенение вызываем другую функцию. Параметр - хендл затеняющего окна. Вот примерно так:
:aColumns[nI]:bPrevEdit := {|| Darken2Open(hWin) ,; // Затенение на форме myColorEditTsb(oBrw) ,; Darken2Close(hWin) ,; // Убрать затенение на форме oBrw:Setfocus(), FALSE }
Речь не об этом. Андрей , то что ты предлагаешь, это поверх окна бровса открывать полупрозрачное в размер, как делают скринлокеры. Несколько лет назад с Димой попробовали это делать. Я делал тень окна, открывал полупрозрачное под окном и со смещением. Минусов больше чем плюсов. Во первых не на всех операционках корректно работало ( на каком-то вин сервере не сработала). Во вторых , по кнопкам альт-тав и пр идёт переключение . Или твой пример не об этом этом?
SergKis
постоянный участник
Пост N: 3288
Зарегистрирован: 17.02.12
Отправлено: 19.07.20 15:15. Заголовок: Andrey пишет Выклады..
Andrey пишет
цитата:
Выкладывал уже исходник.
Может выложишь, т.к. в примерах hmg ее нет. Будет понятнее.
Haz пишет
цитата:
Просто интересно стало можно ли цветной бровс показать в градациях серого без переопределения всех цветов.
Если вынести вызов TSDrawCell() в метод :TSDrawCell(), заменив локальные переменные на переменные объекта TSBcell и вызывать метод после заполнения объекта oColumn:oCell во всех местах, заменив вызов ф-ии, то можно проделывать разное в блоке кода :bTSDrawCell, примерно так new method
METHOD TSDrawCell( oColumn, nColumn ) LOCAL lDraw := .F. LOCAL oCell := oColumn:oCell
не надо. 😎 это была так скажем идея интересующимся. Не стоит перегружать объект редко используемым функционалом. Tsb и так скоро будет перегружен тем, что используется редко. Главная беда tsb это не отсутствие функционала, его можно дописать. Главная беда это тормозной вывод на экран, отсутствие буферизации и пр. Если вверх/вниз еще можно скролл окна использовать, вправо/влево все в прорисовке по ячейкам. Раз сто смотрел код , из мыслей как сделать оптимальнее только скролл окна и прорисовка появившейся колонки . но пока или руки не дошли или текучка так давит, что уже не до рук
gfilatov2002
moderator
Пост N: 1740
Зарегистрирован: 11.02.10
Отправлено: 20.07.20 09:50. Заголовок: Всем кому это интересно
Выложил обновление для сборки 20.06 (Update 3) с учетом последних исправлений
Базовый дистрибутив для BCC 5.8.2 находится по адресу
Важно: в этом обновлении переработана поддержка графических файлов в форматах BMP, GIF, TIF, JPG и PNG для всех элементов управления (в т.ч. Tab Pages)
в этом обновлении переработана поддержка графических файлов
А в чём это заключается ?
Dima
администратор
Пост N: 7220
Зарегистрирован: 17.05.05
Отправлено: 27.07.20 10:40. Заголовок: Andrey пишет: А в ч..
Andrey пишет:
цитата:
А в чём это заключается ?
ChangeLog.txt
gfilatov2002
moderator
Пост N: 1742
Зарегистрирован: 11.02.10
Отправлено: 27.07.20 11:41. Заголовок: Andrey пишет: в чём..
Andrey пишет:
цитата:
в чём это заключается ?
Для пользователей библиотеки добавлена возможность использовать популярный формат PNG практически для всех элементов управления, при этом Си-код ядра был упрощен и стал универсальным (я только адаптировал наработки Клаудио Сото для HMG, которые он сделал еще в 2014 году).
Andrey
постоянный участник
Пост N: 6773
Зарегистрирован: 12.09.06
Отправлено: 27.07.20 12:36. Заголовок: Что то PNG в ТСБ оче..
Что то PNG в ТСБ очень фигово выглядит !!! Если ставишь PNG в суперхидер и шапку (подвал наверное тоже), то картинка фиговая становиться... Цвета заливки берутся из цвета и вся красота накрывается. Может я и неправильно что то делаю.
Функция LOADIMAGE(), которая используется в TBROWSE для загрузки картинок, имеет всего 2 параметра и заточена для загрузки BMP файлов в целях совместимости. Если добавить в нее дополнительные параметры, то можно попробовать подстроить ее для формата PNG. Или можно использовать для загрузки картинок другую (уже готовую) функцию C_SETPICTURE(), которая имеет все эти дополнительные параметры
Отправлено: 28.07.20 15:28. Заголовок: gfilatov2002 пишет п..
gfilatov2002 пишет
цитата:
проверьте работу переработанной функции LoadImage()
Старые варианты (картинок немного) с новой LoadImage() отработали нормально Картинок много у Андрея, с доп. параметрами LoadImage() надо у него проверять
Картинок много у Андрея, с доп. параметрами LoadImage() надо у него проверять
Вот сравнение до и после:
Картинки могу выслать...
SergKis
постоянный участник
Пост N: 3294
Зарегистрирован: 17.02.12
Отправлено: 28.07.20 16:41. Заголовок: Andrey пишет Картинк..
Andrey пишет
цитата:
Картинки могу выслать...
Ты ф-ю заменил, либу пересобрал и старые примеры с bmp получил ? И картинка по этой ситуации
Andrey
постоянный участник
Пост N: 6777
Зарегистрирован: 12.09.06
Отправлено: 28.07.20 18:38. Заголовок: SergKis пишет: Ты ф..
SergKis пишет:
цитата:
Ты ф-ю заменил, либу пересобрал и старые примеры с bmp получил ?
Скачал новую версию. Поставил вместо bmp новые png в ресурсы. Пере собрал проект. А зачем либу пере собирать ? Старые примеры на bmp такие же. Я думал можно будет png использовать вместо bmp в ТСБ.
gfilatov2002
moderator
Пост N: 1747
Зарегистрирован: 11.02.10
Отправлено: 30.07.20 09:33. Заголовок: Всем кому это интересно
Выложил обновление для сборки 20.06 (Update 5) с учетом последних исправлений
Базовый дистрибутив для BCC 5.8.2 находится по адресу
* Fixed: Possible corruption after a memory allocation in the C-function ListViewGetItem() (introduced in the build 19.04). Reported and contributed by Fernando Yurisich. * Fixed: When loads a Grid control and 'ColumnControls' property is NIL then converts automatically any data type in a text type. Problem was reported by Fernando Yurisich. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - minor correction at adding of a Selector in the method Paint(). Contributed by Sergej Kiselev. - the function LoadImage() supports the additional parameters. Syntax: LoadImage( cFilename [, hWnd ][, nWidth ][, nHeight ] ; [, nScale ][, nTransparent ][, nBackColor ][, Adjust ] ; [, lAlpha ][, nAlphaConstant ] ) Requested by Verchenko Andrey. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.33.0dev. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * Updated: 'Data-Bound Controls' sample: - updated function DrawRR() for the round rectangled edit controls. Syntax: DrawRR( nRow, nCol, nHeight, nWidth ; [, lFocus][, cWindowName][, nCurve] ) Requested by Paul Schlicher. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\DATA_BOUND)
Желаю доброго дня
SergKis
постоянный участник
Пост N: 3295
Зарегистрирован: 17.02.12
Отправлено: 30.07.20 13:33. Заголовок: gfilatov2002 пишет ..
DEFAULT t := This.Row, l := This.Col, b := This.Height, r := This.Width DEFAULT focus := .F., cWindowName := ThisWindow.Name, nCurve := 10
DRAW ROUNDRECTANGLE IN WINDOW (cWindowName) ; AT t - 2, l - 2 TO t + b + 2, l + r + 2 ; ROUNDWIDTH nCurve ; ROUNDHEIGHT nCurve ; PENCOLOR iif( focus, { 0, 120, 215 }, { 100, 100, 100 } )
RETURN
и может ее включить как HMG_DrawRR(...) в lib ?
SergKis
постоянный участник
Пост N: 3296
Зарегистрирован: 17.02.12
Отправлено: 30.07.20 13:34. Заголовок: PS Применение @ y..
PS Применение
@ y,x LABEL Lbl_1 WIDTH w HEIGHT h FONT cFont ; VALUE 'Lbl Value 1' VCENTERALIGN x += This.Lbl_1.Width + oDlu:GapsWidth @ y,x GETBOX Get_1 WIDTH This.ClientWidth - x - oDlu:Left HEIGHT h ; VALUE "Get Value 1"+space(20) FONT cFont ; PICTURE "@K" ; ON GOTFOCUS DrawRR( .T. ) ; ON LOSTFOCUS DrawRR( .F. )
y += This.Lbl_1.Height + oDlu:GapsHeight x := oDlu:Left @ y,x LABEL Lbl_2 WIDTH w HEIGHT h FONT cFont ; VALUE 'Lbl Value 2' VCENTERALIGN x += This.Lbl_2.Width + oDlu:GapsWidth @ y,x GETBOX Get_2 WIDTH This.ClientWidth - x - oDlu:Left HEIGHT h ; VALUE "Get Value 2"+space(20) FONT cFont ; PICTURE "@K" ; ON GOTFOCUS DrawRR( .T. ) ; ON LOSTFOCUS DrawRR( .F. )
gfilatov2002 Отступ сверху до иконки Label Say_01 в HMG_Alert() большой и не управляемый. Может вынести в static переменную и добавить параметр в HMG_Alert_MaxLines() или новую ф-ю HMG_Alert_RowStart( nRow ) сделать установку и использовать ? Примеры (видно не пропорциональный отступ, меняя фонты и их размеры) Тут https://TransFiles.ru/aul7y
Бяку поправил - благодарю за помощь А это не перебор - явно указывать цвета внутри исходника h_tbrowse.prg
SergKis
постоянный участник
Пост N: 3308
Зарегистрирован: 17.02.12
Отправлено: 02.08.20 20:45. Заголовок: gfilatov2002 пишет А..
gfilatov2002 пишет
цитата:
А это не перебор - явно указывать цвета внутри исходника h_tbrowse.prg
Можно не указывать, возможно, это перебор. Есть в DEFINE ... назначение. и там можно указать. У себя спрячу умолчания во внутрь, что бы меньше писать. Согласен, что это лишнее
SergKis
постоянный участник
Пост N: 3309
Зарегистрирован: 17.02.12
Отправлено: 02.08.20 20:54. Заголовок: PS Можно так Loca..
PS Можно так
Local aClr := {} ... AAdd(aClr, { 6, {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB(128,225,225) ) } } ) AAdd(aClr, {12, {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB(128,225,225) ) } } )
DEFINE TBROWSE &cBrw OBJ oBrw AT y,x WIDTH w HEIGHT h CELL ; ALIAS ALIAS() ; FONT {"Normal", "Bold", "Bold"} ; COLORS aClr ; FOOTER .T. ; FIXED COLSEMPTY ; LOADFIELDS GOTFOCUSSELECT ; COLNUMBER { 1, 50 } ; ENUMERATOR ...
Отправлено: 04.08.20 14:33. Заголовок: gfilatov2002 пишет Б..
gfilatov2002 пишет
цитата:
Благодарю за значительно расширенный пример
Расширение на любителя , не исп. ранее в тсб on gotfocus, on lostfocus и получил ошибку _wSend(), _wPost(), по инерции добавил карточку, опять же, на AlertOkCancel(). Я не специально, так получилось
SergKis
постоянный участник
Пост N: 3314
Зарегистрирован: 17.02.12
Отправлено: 05.08.20 16:00. Заголовок: gfilatov2002 Для пр..
gfilatov2002 Для пробы (с Игорем обсуждали такую схему) - добавил блок кода DATA bTSDrawCell // In ::TSDrawCell(...) execute - вынес вызов TSDrawCell() в метод :TSDrawCell(), заменив локальные переменные на переменные объекта TSBcel и поправил вызовы ф-ии на метод (кроме SuperHeader). Это позволило в карточке примера получить логическую переменную в виде image и по Enter менять значение, т.е. можно налету подменять данные для ф-ии TSDrawCell() Мне показалось это интересным. Пример и h_tbrowse.prg тут https://TransFiles.ru/me4mq
- вынес вызов TSDrawCell() в метод :TSDrawCell(), заменив локальные переменные на переменные объекта TSBcel и поправил вызовы ф-ии на метод (кроме SuperHeader). Это позволило в карточке примера получить логическую переменную в виде image и по Enter менять значение, т.е. можно налету подменять данные для ф-ии TSDrawCell() Мне показалось это интересным.
Это интересно уже тем, что повторяющийся код вынесен в один метод. Проверил - пример отработал нормально. Благодарю за помощь
Haz
администратор
Пост N: 1590
Зарегистрирован: 20.02.11
Отправлено: 05.08.20 17:13. Заголовок: SergKis пишет: Мне ..
SergKis пишет:
цитата:
Мне показалось это интересным.
Интересным и перспективным. Спасибо, отличная идея
gfilatov2002 Поправил пример, при работе с карточкой данные в колонке "Value" не меняют тип (ранее был "C") и режим Edit учитывает это в блоках кода :bPrevEdt, :bPostEdit. Тут https://TransFiles.ru/ppqsg
Разобрался. Забываю, что в этом Compile.bat есть строка @if "%MG_ROOT%"=="" set MG_ROOT=c:\minigui которую надо править каждый раз на @if "%MG_ROOT%"=="" set MG_ROOT=c:\miniguiBcc58 в др. Compile.bat берется из minigui.cfg. там правлю всегда
# Basic configuration for Compile.bat MG_CMP=harbour MG_BCC=c:\borland\bcc58 MG_ROOT=c:\miniguiBcc58
SergKis
постоянный участник
Пост N: 3320
Зарегистрирован: 17.02.12
Отправлено: 08.08.20 12:29. Заголовок: PS Сделал Compile.ba..
Отправлено: 08.08.20 15:33. Заголовок: Haz пишет Решил про ..
Haz пишет
цитата:
Решил про DBU вспомнить ?
На vwt и hb 2.0 своя утилита уже устарела (тексты еще с clipper брались без больших изменений), вроде надо новую собрать, руки никак не дойдут, но иногда поглядываю в эту сторону. Мне нужна unicode версия (hmg такая есть) для LV866. Изменения с тек. версией hmg и своей согласовал, проверил. Думаю, почему бы не глянуть mgDbu ?
SergKis
постоянный участник
Пост N: 3322
Зарегистрирован: 17.02.12
Отправлено: 13.08.20 16:42. Заголовок: gfilatov2002 При ра..
gfilatov2002 При работе с HOTKEY не логично получается ситуация, когда задаем
ON KEY F2 OF This.Name ACTION MsgBox("Press F2 Info MdiChild ! "+ThisWindow.Name+" <"+This.Name+">", Procname()) и при нажатии получаем Called from MSGMINIGUIERROR(100) in module: h_error.prg Called from VERIFYCONTROLDEFINED(5997) in module: h_controlmisc.prg Called from GETPROPERTY(4815) in module: h_controlmisc.prg Called from (b)MDICHILDOPEN(296) in module: demo.prg Called from _DOCONTROLEVENTPROCEDURE(1901) in module: h_windows.prg Called from EVENTS(695) in module: h_events.prg Called from MDIEVENTS(291) in module: h_windowsmdi.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1514) in module: h_windows.prg Called from DOMETHOD(5451) in module: h_controlmisc.prg Called from MAIN(182) in module: demo.prg т.е. в h_events.prg контрол нашелся, что соответствует запуску блока для контрола IF _HMG_BeginWindowMDIActive
IF _HMG_aControlParentHandles [ i ] == GetActiveMdiHandle() .OR. _HMG_InplaceParentHandle <> 0
IF _DoControlEventProcedure ( _HMG_aControlProcedures [ i ] , i ) RETURN 0 ENDIF
... и валится в GETPROPERTY(4815) на проверке *-----------------------------------------------------------------------------* STATIC PROCEDURE VerifyControlDefined ( cParentName , cControlName ) *-----------------------------------------------------------------------------*
IF _IsControlDefined ( cControlName , cParentName ) == .F. MsgMiniGuiError ( "Control: " + cControlName + " Of " + cParentName + " Not defined." ) ENDIF
RETURN ... Для типа HOTKEY не должна валится проверка, т.к. контрол есть но с пустым именем _HMG_aControlType [k] := "HOTKEY" _HMG_aControlNames [k] := '' _HMG_aControlHandles [k] := 0 ...
Возможно, надо не делать VerifyControlDefined() для HOTKEY ?
gfilatov2002
moderator
Пост N: 1764
Зарегистрирован: 11.02.10
Отправлено: 13.08.20 17:33. Заголовок: SergKis пишет: Для ..
SergKis пишет:
цитата:
Для типа HOTKEY не должна валится проверка
Сделал, конечно
gfilatov2002
moderator
Пост N: 1765
Зарегистрирован: 11.02.10
Отправлено: 14.08.20 14:47. Заголовок: Всем кому это интересно
Подготовил 2-ю бету для новой сборки 20.08. Что нового Скрытый текст
* Fixed: Program crash at editing of a first column with the defined IMAGE clause in the Grid control. Bug was reported by Pete D. <pete_westg/at/yahoo.gr>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\Grid_ImageIndex) * Fixed: Small correction in the internal function VerifyControlDefined() for protection of the HOTKEY controls which have not an internal name. Problem was reported by Sergej Kiselev. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * Enhanced: Added the auxiliary function HMG_Alert_RowStart() for managing of a start row of a first line in the function HMG_Alert(). Suggested and contributed by Sergej Kiselev (see demo8.prg in folder \samples\Advanced\Tsb_Basic_3) * Enhanced: The internal OOP class TKeyData was improved for Json support: - added the new method Json( cJson ). Usage: a := hb_hash() // create a hash a['dat'] := date() ; a['0'] := 222 ; a['TYP'] := "text" a['1'] := "text2" ; a['kod'] := 7777 o := oKeyData() // create object o:Set( a ) hb_MemoWrit( ".\_o_.json", o:Json( .F. ) ) ... J := hb_MemoRead( ".\_o_.json" ) a := oKeyData() ? "a = ", a:Json( J ) // a = 'O' ?v a:GetAll( .F. ) Suggested and contributed by Sergej Kiselev. * Modified: The default <versioninfo> section may be removed from the application resources with a specify of __VERSION_INFO constant and launch the batch file \Resources\CompileRes.bat. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see minigui.rc in folder \Resources) * Modified: The batch file buildapp.bat from Mingw-based distribution supports the projects with many RC files similar to BCC compiler. You can define the __VERSION_INFO constant in your local RC file for using an user-defined <versioninfo> section. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see Modest.rc in folder \Samples\Modest) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added the new variable :bTSDrawCell and method TSDrawCell(); - improved usage of LOADFIELDS clause for a database. Sample code: DEFINE TBROWSE &cBrw OBJ oBrw AT y,x WIDTH w HEIGHT h CELL ; ALIAS Alias() ; FONT {"Normal", "Bold", "Bold"} ; FOOTER .T. ; FIXED COLSEMPTY ; LOADFIELDS GOTFOCUSSELECT ; COLNUMBER { 1, 50 } ; ENUMERATOR Contributed by Sergej Kiselev (see demo9.prg in folder \samples\Advanced\Tsb_Basic_3) * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.33.0dev. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * New: 'RichText Class Test' sample. Related Commands are: - DEFINE RTF / CLOSE RTF - DEFINE PAGESETUP - BEGIN HEADER / END HEADER - BEGIN FOOTER / END FOOTER - WRITE TEXT - NEW PARAGRAPH - DEFINE TABLE / CLOSE TABLE - BEGIN ROW / END ROW - WRITE CELL - NEW SECTION - INSERT PAGENUMBER Based upon a contribution of Tom Marchione for FiveWin library. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\RichText) * New: 'TBrowse control placed into Alert messagebox' sample. Contributed by Sergej Kiselev (see demo9.prg in folder \samples\Advanced\Tsb_Basic_3) * New: 'Source Code Formatter' utility. Based upon a code borrowed from OOHG. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\ofmt) * Updated: 'Data-Bound Controls' sample: - updated function DrawRR() for the round rectangled edit controls. Syntax: DrawRR( [ lFocus ][, nRow ][, nCol ][, nHeight ][, nWidth ] ; [, cWindowName ][, nCurve ] ) Suggested and contributed by Sergej Kiselev (see demo2.prg in folder \samples\Basic\DATA_BOUND)
Огромная благодарность Сергею Киселеву за помощь в подготовке этой сборки
SergKis
постоянный участник
Пост N: 3323
Зарегистрирован: 17.02.12
Отправлено: 14.08.20 16:10. Заголовок: gfilatov2002 пишет S..
DRAW ROUNDRECTANGLE IN WINDOW (cWindowName) ; AT t - 2, l - 2 TO t + b + 2, l + r + 2 ; ROUNDWIDTH nCurve ROUNDHEIGHT nCurve ; PENCOLOR aColor PENWIDTH nPen
Отправлено: 20.08.20 14:47. Заголовок: gfilatov2002 А можн..
gfilatov2002 А можно ещё поправить показ типов полей "=@T" ? Приходиться таскать функцию всегда при использовании таких полей, иначе обрезает эти поля.
STATIC FUNCTION myPartWidthTsb( oBrw ) // поправить ширину колонок LOCAL oCol, hFont := oBrw:hFont // 1-cells font
WITH OBJECT oBrw FOR EACH oCol IN :aColumns IF oCol:cFieldTyp $ "=@T" oCol:nWidth := GetTextWidth( Nil, REPL("9",24), hFont ) // 24 знака ENDIF NEXT END WITH
RETURN Nil
SergKis
постоянный участник
Пост N: 3330
Зарегистрирован: 17.02.12
Отправлено: 20.08.20 16:33. Заголовок: Andrey пишет Подтве..
Andrey пишет [quote]` Подтверждаю, что так лучше, особенно, если исп. :nCellMarginLR := 1
Отправлено: 27.08.20 18:16. Заголовок: Если поле "N"..
Если поле "N" или "C" имеет короткое название ( типа N1 , C12 ), то значения в колонках обрезаются. Вот как на картинке:
У себя приходиться делать всегда так:
STATIC FUNCTION myPartWidthTsb( oBrw ) // поправить ширину колонок LOCAL oCol, cType, hFont := oBrw:hFont // 1-cells font
WITH OBJECT oBrw FOR EACH oCol IN :aColumns cType := oCol:cFieldTyp IF cType $ "=@T" oCol:nWidth := GetTextWidth( Nil, REPL("9",24), hFont ) // 24 знака ELSEIF cType == "D" oCol:nWidth := GetTextWidth( Nil, REPL("9",11), hFont ) ELSEIF cType == "N" .OR. cType == "C" // увеличим ширину колонки для коротких названий полей IF LEN(oCol:cName) < 5 oCol:nWidth := GetTextWidth( Nil, REPL("H", oCol:nFieldLen), hFont ) * 0.8 ENDIF ENDIF NEXT END WITH
RETURN Nil
Можно добавить это в класс Tsbrowse ? Или ещё как то по другому. И куда это добавить, я не знаю.
SergKis
постоянный участник
Пост N: 3341
Зарегистрирован: 17.02.12
Отправлено: 27.08.20 19:03. Заголовок: Andrey Попробуй у с..
Andrey Попробуй у себя поправить
METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse ... If nSize == Nil ... If cType == "C" cData := PadR( Trim( cData ), nSize+1 /* или 2 */, "B" ) nSize := GetTextWidth( 0, cData, hFont ) ElseIf cType == "N" ... У себя, к примеру я для "C" правку делаю, не разбираясь, если поле длина > 50 беру 50, т.е. писать все равно приходится IF o:cFieldTyp == "D" o:cPicture := "@D" ELSEIF o:cFieldTyp == "N" .and. o:nFieldLen < 10 o:nWidth += GetFontWidth("Normal", 2) ELSEIF o:cFieldTyp == "C" IF o:nFieldLen > 50 ; o:nWidth := o:ToWidth( 50 ) ELSE ; o:nWidth += GetFontWidth("Normal", 1) ENDIF ENDIF ...
Да у себя я сам добавлю к ширине колонок нужное ко-во. Хотелось бы что-бы ТСБ это умел делать автоматом.
SergKis
постоянный участник
Пост N: 3342
Зарегистрирован: 17.02.12
Отправлено: 27.08.20 20:11. Заголовок: Andrey Так поправь,..
Andrey Так поправь, что написал (это же тсб текст), если поможет, можно править на постоянно. Пример то у тебя, на нем и проверь
Andrey
постоянный участник
Пост N: 6800
Зарегистрирован: 12.09.06
Отправлено: 27.08.20 20:31. Заголовок: SergKis пишет: Так ..
SergKis пишет:
цитата:
Так поправь, что написал (это же тсб текст), если поможет, можно править на постоянно.
Не фига не работает... Попробовал исправить. Колонка в середине S9 (текстовая) - нормальная, а самый последний столбец в таблице F2 (текстовая) - срезается. Пример отправил тебе.
SergKis
постоянный участник
Пост N: 3343
Зарегистрирован: 17.02.12
Отправлено: 27.08.20 22:12. Заголовок: Andrey пишет Пример ..
Andrey пишет
цитата:
Пример отправил тебе.
Убрал виртуальные колонки и все колонки нормальные в размерах С вирт. колонками надо самому ставить размеры, как и было у тебя !
Убрал виртуальные колонки и все колонки нормальные в размерах
Я тоже убрал. Но у меня режутся колонки с "=@T" и последняя текстовая колонка тоже режется. Числовые колонки нормально стали показываться. Может у меня старый h_tbrowse.prg ?
Вот картинка:
Колонки 23 и 25 (зеленые стрелочки) с типом [+] [^] может расширить до 6-8 знаков ?
SergKis
постоянный участник
Пост N: 3344
Зарегистрирован: 17.02.12
Отправлено: 28.08.20 09:07. Заголовок: Andrey пишет Может у..
Andrey пишет
цитата:
Может у меня старый h_tbrowse.prg ?
Делал с твоим и сейчас положил в пример свой -> результат одинаковый, колонки не режутся. Твой пример тут https://TransFiles.ru/al858
PS h_tbrowse.prg немного отличается от того, который у Григория (method LoadFields с изменениями ранее), наверно, т.к. у меня добавлены еще к "N" "+" и "^". Но большого значения это не имеет
');etFontWidth(aFont[1], 20) :GetColumn("IM"):nWidth := GetFontWidth(aFont[1], 20) :GetColumn("DT"):nWidth := GetFontWidth(aFont[1], 20) :GetColumn("TT"):nWidth := GetFontWidth(aFont[1], 20) mySet2Tsb( oBrw1 ) // настройки таблицы дополнительные ... STATIC FUNCTION myBrw2( nY, nX, nW, nH, aDatos, aFont, nBrw ) ... mySupHdTsb( oBrw2, aSupHd ) // SuperHeader //myEnumTsb( oBrw2 , 6+1) // ENUMERATOR по порядку :GetColumn("ID"):nWidth := (App.Object):W1 :GetColumn("VM"):nWidth := (App.Object):W1 :GetColumn("F1"):nWidth := (App.Object):W2 :GetColumn("F2"):nWidth := (App.Object):W2 :GetColumn("TS"):nWidth := GetFontWidth(aFont[1], 20) :GetColumn("IM"):nWidth := GetFontWidth(aFont[1], 20) :GetColumn("DT"):nWidth := GetFontWidth(aFont[1], 20) :GetColumn("TT"):nWidth := GetFontWidth(aFont[1], 20) mySet2Tsb( oBrw2 ) // настройки таблицы дополнительные ... ` Для Timestamp колонок это как в h_tbrowse.prg, можешь подобрать длину в символах не 20, а сколько надо у тебя Для ID,VM,F1,F2 ширина колонки от dlu задана для фонта SET FONT TO ...
SergKis
постоянный участник
Пост N: 3347
Зарегистрирован: 17.02.12
Отправлено: 28.08.20 10:51. Заголовок: Упс, сломалось что т..
Упс, сломалось что то для myBrw1. Исправить просто строки красным из myBrw2 перенести в myBrw1 они одинаковые
gfilatov2002
moderator
Пост N: 1772
Зарегистрирован: 11.02.10
Отправлено: 28.08.20 12:05. Заголовок: Всем кому это интересно
Завершена подготовка новой сборки 20.08, которая будет опубликована на следующей неделе. Рассматриваю ее как финальную по причинам материального характера (что не удивительно в наше время ).
Огромная благодарность Сергею Киселеву за все предложения и идеи по развитию библиотеки
Благодарю за ваше внимание
SergKis
постоянный участник
Пост N: 3348
Зарегистрирован: 17.02.12
Отправлено: 28.08.20 13:54. Заголовок: Возможно, будет инте..
Возможно, будет интересно. Пример MDI интерфейса. В целом работает. Не пошел контрол TEXTBOX, возможно еще какие контролы, надо смотреть. Но работая ТОЛЬКО в окнах ChildMdi, без модальных можно многое делать. Пример тут https://TransFiles.ru/cnyt8 Собран с последними изменениями h_tbrowse.prg
gfilatov2002
moderator
Пост N: 1773
Зарегистрирован: 11.02.10
Отправлено: 31.08.20 11:44. Заголовок: Всем кому это интересно
Опубликована новая сборка 20.08 для BCC 5.8.2 и компиляторов Harbour и xHarbour.
* Updated: Synchronized Extended HMG for compatibility with Official HMG: - New: added commands FINDTEXTDIALOG and REPLACETEXTDIALOG; - New: added in-line feature to the miniprint commands; - New: added RegistryRead() and RegistryWrite() pseudo-functions. Based upon a contribution of Claudio Soto <srvet/at/adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Applications\WordWriter) * New: 'Word Writer' sample. Borrowed from Official HMG distribution. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Applications\WordWriter) * Updated: 'RichEditBox' sample: - adapted RTF print feature. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\RichEditBox)
Благодарю всех, кто поддерживал и поддерживает этот проект "на плаву"
Andrey
постоянный участник
Пост N: 6809
Зарегистрирован: 12.09.06
Отправлено: 02.09.20 17:58. Заголовок: В новой версии для Т..
В новой версии для ТСБ пропадает суперхидер, т.е. пустой суперхидер.
Все даты в формате GMT
3 час. Хитов сегодня: 110
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет