Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение) » Ответить

Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)

gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

krutoff: SergKis Спасибо за код, но у меня Define window CHILD ... Define Window ... Virtual PANEL ... EDITBOX И мне надо дать фокус внутри 2-й формы

SergKis: krutoff пишет И мне надо дать фокус внутри 2-й формы И в чем разница ? Контролы на окне имеют уникальные имена. Вопрос, какую среду This надо в блоке кода ? Для среды This окна ON INIT {|| _wPost(10) } Для среды This контрола ON INIT {|| _wPost(10, This.<контрол>.Index) } Суть этих действий, завершить работу обработчика окна on init и организовать через очередь другое событие (обработчик) по _wPost(...), т.е. отработает [pre2] IF _SetFocusedSplitChild( i ) == .F. _SetActivationFocus( i ) ENDIF [/pre2] потом сработает, через очередь, событие\блок кода 10, зарегистрированный на окне

krutoff: SergKis пишет: потом сработает, через очередь, событие\блок кода 10, зарегистрированный на окне Спасибо! Отработало как часы!


Andrey: krutoff Посмотрите доку Сергея Events_in_MiniGui.RU.txt на русском в \MiniGUI\SAMPLES\Advanced\Tsb_5Win Ну и использование событий по тексту программы.

SergKis: gfilatov2002 Небольшая правка [pre2] METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse ... IF ::lDrawSpecHd ... nClrFore := ::GetValProp( nClrFore, nClrFore, nJ ) IF nI == nBegin .AND. ::lSelector nClrBacks := ::nClrSpcHdBack ELSE nClrBacks := iif( ::nPhantom == -1, ATail( ::aColumns ):nClrSpcHdBack, nClrPane ) ENDIF nClrBackS := ::GetValProp( nClrBackS, nClrBackS, nJ ) ... [/pre2] Сейчас SpecHeader имеет цвет SELECTOR-а nClrPane по Default, а все остальные цвета ячейки SELECTOR по вертикали ::nClrSpcHdBack (как у Header) PS Если возможно, включите в сборку последнюю версию LetoDbf, клиента и сервер

gfilatov2002: SergKis пишет: Небольшая правка Поправил

gfilatov2002: Выложил 1-й апдейт сборки 21.11 Обновил также Unicode архив. Благодарю за помощь Сергея Киселева Желаю всем участникам форума мира и добра

SergKis: gfilatov2002 надо[pre2] #translate <p:System,Sys>.ClientWidth => GetDesktopRealWidth () #translate <p:System,Sys>.ClientHeight => GetDesktopRealHeight() [/pre2] так, как сейчас, дает отступы справа, внизу ~15 pixel, в исправленном везде зазор ~2-3 pixel

gfilatov2002: SergKis пишет: надо #translate <p:System,Sys>.ClientWidth => GetDesktopRealWidth () #translate <p:System,Sys>.ClientHeight => GetDesktopRealHeight() Понял, поправлю

SergKis: gfilatov2002 пишет поправлю еще _TBrowse()[pre2] DEFAULT aColor := { ; { CLR_FOCUSB, {|c,n,b| c := n, iif( b:nCell == n, -CLR_HRED, -RGB( 128, 225, 225 ) ) } }, ; [/pre2] получше вид будет PS в примере Tsb_2tsb того же эффекта можно достичь кодом без AEval(...). По умолчанию oCol:lFixLite := .T., oCol:lOnGotFocusSelect := .T., oCol:lEmptyValToChar := .T. [pre2] LOCAL oTsb1, oTsb2 ... nH := Int( This.ClientHeight / 2 ) oTsb1 := oHmgData() oTsb1:aEdit := .T. oBrw1 := _TBrowse( oTsb1, "CUST1", "Brw_1", nY, nX, nW, nH ) //AEval( oBrw1:aColumns, {| oCol | oCol:lFixLite := .T., ; // oCol:lEdit := .T., ; // oCol:lOnGotFocusSelect := .T., ; // oCol:lEmptyValToChar := .T. } ) nY += nH + 1 nH -= 1 oTsb2 := oHmgData() oTsb2:aEdit := .T. oBrw2 := _TBrowse( oTsb2, "CUST2", "Brw_2", nY, nX, nW, nH ) //AEval( oBrw2:aColumns, {| oCol | oCol:lFixLite := .T., ; // oCol:lEdit := .T., ; // oCol:lOnGotFocusSelect := .T., ; // oCol:lEmptyValToChar := .T. } ) oBrw1:SetFocus() [/pre2]

gfilatov2002: SergKis пишет: еще _TBrowse() ... в примере Tsb_2tsb Понял, уже поправил и выложил новый инсталлятор Благодарю за помощь

SergKis: gfilatov2002 лучше так [pre2] STATIC FUNCTION RecordBrowse( oBrw ) LOCAL oCol, ; aArr := {} FOR EACH oCol IN oBrw:aColumns //AAdd( aArr, { oCol:cHeading, Eval( oCol:bData ) } ) AAdd( aArr, { oCol:cHeading, oBrw:GetValue( oCol ) } ) NEXT SBrowse( aArr, "Record View", {|| .T. }, { "Key", "Value" } ) RETURN NIL [/pre2]

gfilatov2002: SergKis пишет: лучше так OK

SergKis: gfilatov2002 Предлагаю правку SBrowse(), что бы можно было управлять тсб и окном + иметь общую ф-ю для работы с записью из тсб, т.е. [pre2] FUNCTION SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql ) // idea from xBrowse LOCAL cFormName, oBrw, nSaveSelect, cDbf, cAlias, lEdit, cTable LOCAL lbSetUp := HB_ISBLOCK( bSetUp ) DEFAULT uAlias := Alias(), ; cTitle := iif( ValType( uAlias ) == "C", uAlias, "SBrowse" ), ; bSetUp := {|| .F. }, ; aCols := {}, ; nWidth := GetSysMetrics( 0 ) * .75, ; nHeight := GetSysMetrics( 1 ) / 2, ; lSql := .F. IF ValType( uAlias ) == 'C' .AND. Select( uAlias ) == 0 nSaveSelect := Select() IF lSql cTable := GetUniqueName( "SqlTable" ) dbUseArea( .T.,, "SELECT * FROM " + uAlias, cTable,,, "UTF8" ) SELECT &cTable cAlias := cTable uAlias := cAlias ELSE cDbf := uAlias cAlias := uAlias TRY dbUseArea( .T., NIL, cDbf, cAlias, .T. ) uAlias := cAlias CATCH uAlias := { { uAlias } } END ENDIF ELSEIF ValType( uAlias ) == 'N' If ! Empty( Alias( uAlias ) ) uAlias := Alias( uAlias ) ELSE uAlias := { { uAlias } } ENDIF ELSEIF ValType( uAlias ) $ 'BDLP' uAlias := { { uAlias } } #ifdef __XHARBOUR__ ELSEIF ValType( uAlias ) == "H" uAlias := aHash2Array( uAlias ) #endif ENDIF cFormName := GetUniqueName( "SBrowse" ) DEFINE WINDOW &cFormName AT 0, 0 WIDTH nWidth HEIGHT nHeight TITLE cTitle CHILD BACKCOLOR RGB( 191, 219, 255 ) nWidth -= 20 nHeight -= 50 DEFINE TBROWSE oBrw AT 10, 10 Alias ( uAlias ) WIDTH nWidth - 16 HEIGHT nHeight - 30 HEADER aCols ; AUTOCOLS SELECTOR 20 lEdit := Eval( bSetUp, oBrw ) lEdit := iif( ValType( lEdit ) == "L", lEdit, .F. ) WITH OBJECT oBrw :nTop := 10 :nLeft := 10 :nBottom := :nTop + nHeight - 30 :nRight := :nLeft + nWidth - 16 :lEditable := lEdit :lCellBrw := lEdit :nClrLine := COLOR_GRID :nClrHeadBack := { CLR_WHITE, COLOR_GRID } :lUpdate := .T. :bRClicked := {|| Record_SBrowse( oBrw ) } IF lEdit AEval( :aColumns, {| o | o:lEdit := .T. } ) ENDIF END WITH END TBROWSE @ nHEIGHT - 12 - iif( _HMG_IsXPorLater, 3, 0 ), 10 BUTTON Btn_1 CAPTION oBrw:aMsg[ 44 ] WIDTH 70 HEIGHT 24 ; ACTION {|| oBrw:Report( cTitle,,,, .T. ), oBrw:GoTop() } @ nHEIGHT - 12 - iif( _HMG_IsXPorLater, 3, 0 ), 90 BUTTON Btn_2 CAPTION "Excel" WIDTH 70 HEIGHT 24 ; ACTION oBrw:ExcelOle() @ nHEIGHT - 12 - iif( _HMG_IsXPorLater, 3, 0 ), nWidth - 76 BUTTON Btn_3 CAPTION oBrw:aMsg[ 45 ] WIDTH 70 HEIGHT 24 ; ACTION ThisWindow.RELEASE If ! lEdit ON KEY ESCAPE ACTION ThisWindow.RELEASE ENDIF IF lbSetUp //!!! Eval( bSetUp, oBrw, .T. ) ENDIF END WINDOW CENTER WINDOW &cFormName ACTIVATE WINDOW &cFormName If ! Empty( cAlias ) ( cAlias )->( dbCloseArea() ) ENDIF If ! Empty( nSaveSelect ) Select( nSaveSelect ) ENDIF RETURN NIL // --------------------------------------------------------------------------------------------------------------------// FUNCTION Record_SBrowse( oBrw, cTitle, bSetUp, aHead, lNoCrLf ) LOCAL oCol, aArr := {}, cHdr DEFAULT cTitle := "Record View", bSetUp := {|| .T. }, aHead := { "Key", "Value" }, lNoCrLf := .T. FOR EACH oCol IN oBrw:aColumns cHdr := oCol:cHeading IF lNoCrLf .and. CRLF $ cHdr cHdr := StrTran( cHdr, CRLF, " " ) ENDIF AAdd( aArr, { cHdr, Eval( oCol:bData ) } ) NEXT SBrowse( aArr, cTitle, bSetUp, aHead ) RETURN NIL [/pre2] Задавая в FUNCTION SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql ) // idea from xBrowse в таком виде bSetUp := {|ob,xp| Local lRet := .T. IF !Empty(xp) // второй вход в блок. Можно менять размеры окна + параметры тсб по переменной ob и This. среды окна ... ENDIF Return lRet } и исп. Record_SBrowse( oBrw, cTitle, bSetUp, aHead ) как самостоятельный вызов к любому тсб. PS Назвать ф-ю можно по традиции FUNCTION _Record_SBrowse( oBrw, cTitle, bSetUp, aHead, lNoCrLf ) или FUNCTION _SBrowse_Record( oBrw, cTitle, bSetUp, aHead, lNoCrLf )

gfilatov2002: SergKis пишет: Предлагаю правку SBrowse() Принято

SergKis: gfilatov2002 пишет Принято Я в тексте небольшую правку сделал, перенес вызов блока 2-ой раз еще ниже (строки //!!!) Пример сейчас делаю. Ф-ю для работы с записью назвал FUNCTION SBrowse_Record( oBrw, cTitle, bSetUp, aHead, lNoCrLf ) как приложение к основной SBrowse(), если надо пере назвать, скажите

SergKis: SergKis пишет Пример сейчас делаю. Пример тут https://TransFiles.ru/jg78m PS Еще вариант вызова в примере [pre2] bSetUp := {|ob,xp| IF !Empty(xp) ob:SetNoHoles() ob:SetFocus() ENDIF Return .T. } sBrowse( Alias(), "DEMO. Test new SBrowse", bSetUp, , Sys.ClientWidth, Sys.ClientHeight ) [/pre2]

SergKis: gfilatov2002 Сделал др. вариант SBrowse, привязал размеры к размеру фонта Пример тут https://TransFiles.ru/7xea7 PS не оч. нравится место (может др. предложите) [pre2] lRec := HB_ISARRAY( uAlias ) .and. Len( uAlias[1] ) == 2 .and. Len( aCols ) == 2 .and. ; aCols[1] == "Key" .and. aCols[2] == "Value" [/pre2] возможно, надо добавить MODAL окно через параметр FUNCTION SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql, lModal ) // idea from xBrowse PS2 Забыл убрать опыт, надо поправить SBrowse [pre2] DEFAULT uAlias := Alias(), ; ... lSql := .F., ; bAfter := {|ob| ob:SetNoHoles(), ob:SetFocus() } ... и FUNCTION SBrowse_Record( oBrw, cTitle, bSetUp, aHead, nWidth, nHeight, lNoCrLf ) ... SBrowse( aArr, "Record View", bSetUp, { "Key", "Value" }, nWidth, nHeight ) ... [/pre2]

PSP: SergKis пишет: Сделал др. вариант SBrowse, привязал размеры к размеру фонта Пример тут https://TransFiles.ru/7xea7 Разрешите встрять) Если в примере нажать кнопку Excel, но экселя нет на компе, появляется окно с ошибкой, после закрытия которого бровс ломается.

SergKis: PSP пишет Если в примере нажать кнопку Excel, но экселя нет на компе, появляется окно с ошибкой, после закрытия которого бровс ломается Еще раз проверил, работает у меня и таблица и запись => все в Excel уходит, но если нет excel, надо в методе тсб добавлять проверку, но это другое , пока эти места идут, как есть.



полная версия страницы