Форум » GUI » TsBrowse в Минигуи » Ответить

TsBrowse в Минигуи

Vlad04: TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру [quote] DEFINE TBROWSE oBrw2 ; AT 60,450 ; ALIAS cAlias ; OF Form1 ; WIDTH 330 ; HEIGHT 340 ; FONT "Verdana" ; SIZE 9 ; ON DBLCLICK CopyRec(); ON GOTFOCUS fModelo_Hab(2) ; AUTOFILTER ; CELLED EDIT; VALUE nRec; GRID [/quote] Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....

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

Haz: Практически все , посмотри в исходнике класс TSBrowse. Почти все из DATA может быть определено через oBrw: ... или oBrw:aColumns[x]: ... Что конкретно - то интересует ?

Vlad04: посмотри в исходнике класс TSBrowse. Смотрел . Там столько Основные , относящиеся в целом к Бровз ALIAS OF Form1 WIDTH HEIGHT FONT SIZE ON DBLCLICK ON GOTFOCUS AUTOFILTER CELLED EDIT VALUE nRec GRID и другие, которыми сами пользуетесь. С колонками, там вроде, понятнее. В примерах они отдельно обрабатываются.

Haz: ALIAS - можно заменить через oBrw:cAlis := ... , после этого oBrw:Reset() и только при условии совпадения полей в старом и новом алиасе (иначе нужно переопределять колонки). OF FORM - не приходилось , но вроде и не меняется, задается при инициализации WIDTH, HEIGHT - меняется через oBrw:Resize( .... ) FONT, SIZE - меняется через oBrw:ChangeFont() ON DblClick - напрямую через oBrw: не задать , но можно определить через переменные MiniGui _HMG_aControlProcedures , и _HMG_aControlDblClick ON GOTFOCUS - через oBrw:bGotFocus AUTOFILTER - только через инициализацию EDIT - через oBrw:oCol :lEdit GRID - через через oBrw:lCellBrw Владимир, какая цель стоит за этой заменой ? От этого зависит что и когда менять. К примеру задача - интеррактивно менять шрифт в бровсе решается так; 1) Получить список установленных шрифтов 2) Выбрать нужный шрифт из списка, задать свойства шрифта ( размер, наклон и прочее ) 3) Определить шрифт через F1 := _DefineFont ( ...... ) 4) получить хендл через H1 := GetFontHandle( F1 ) 5) Изменить шрифт в бровсе oBrw:ChangeFont( H1, , 1 ) 6) Изменить высоту строк бровса под новую высоту шрифта через oBrw:nHeightCell 7) Перерисовсть бровс oBrw:Refresh(.T.) вот такой простой алгоритм :)


Andrey: А как поменять цвет: скролинга и левого бока Tbrowsa ?

Haz: Andrey пишет: А как поменять цвет: скролинга и левого бока Tbrowsa ? цвет скрола определен в :WinNew() как локальные переменные которым назначаются системные значения nClrText := GetSysColor( COLOR_WINDOW ),; nClrBack := GetSysColor( COLOR_SCROLLBAR ),; следовательно без изменения системных значений или изменения метода WinNew() - никак ( с левым краем (Selector) все оч просто - перед END TBROWSE определить нужный цвет oBrw:nClrHeadBack := RGB(255, 0, 0) // Пусть будет красный END TBROWSE

Andrey: Haz пишет: изменения метода WinNew() - никак ( Как тогда изменить метод WinNew() ?

Haz: Andrey пишет: Как тогда изменить метод WinNew() примерно так добавить в TSBRowse DATA nScrollBackColor и перед END TBROWSE назначать цвет oBrw:nScrollBackColor := RGB(...) и в вызов WinNew в h_tbrowse добавить переменную в нужной позиции oBrw:nScrollBackColor ЗЫ Сам не пробовал , но есть же все исходники и они на харбуре писаны, меняй не хочу ) выше про левый край дописал )

Vlad04: Haz какая цель стоит за этой заменой ? Попытка создать один TSBRows для всех справочников. С формой все получилось и с BRows то же. Но у BRows возможности скромнее. Определение BRows позволяет условие накладывать,а у TSBRows только некоторые DEFINE BROWSE Browse_1 COL 10 ROW 30 WIDTH 400 HEIGHT 390 WIDTHS mWIDTHS HEADERS mHEADERS WORKAREA EkspeD FIELDS mFIELDS VALUE nRec if nRegim <> 0 ON DBLCLICK (ThisWindow.Release ,Result:=.t.) ALLOWEDIT .f. else ALLOWEDIT .t. endif ... END BROWSE

Vlad04: И мне надо не заменять значения , а определить при инициализации

Haz: понятно,в понедельник отпишусь с работы . если сейчас и коротко , то обработку условий лучше задавать не в инициализации бровса а при исполнении. я инициализирую тбровсе из своей функции - упрощенный мой пример в samples\advanced\tsb_filter но для всех процедур по ON ... задаю одну определенную функцию пример ON CHANGE {|| TBRWChange( cBrw ) в самой TbrwChange организую CASE по имени объекта cBrw , где и проверяю все условие в понедельник нарисую пример ))))

Andrey: Haz пишет: с левым краем (Selector) все оч просто - перед END TBROWSE определить нужный цвет oBrw:nClrHeadBack := RGB(255, 0, 0) // Пусть будет красный

Haz: как вариант сунуть свою bmp с нужным фоном )

Andrey: Haz пишет: сунуть свою bmp с нужным фоном ) А как ? И куда ? Допустим, сделал я свою bmp. Разместил в ресурс проекта. А дальше как ?

Haz: а дальше просто читать мануал по этому классу и синтаксису команды DEFINE TBROWSE ========================================================== SELECTOR clause to show an automatic first column with a record selector. SELECTOR <.T.> means default black arrow selector. SELECTOR <.F.> means just add the column with no graphic selector but the cursor's back color. SELECTOR <oBmp> means to use your own (oBmp) graphic selector. oBrw:nSelWidth data can be used to asign selector column's width.

Haz: To Vlad04 Владимир, продолжим ) Я делаю примерно так , 1) Описание oBrw вынес в функцию CreateBrowse() 2) Обработку событий типа DblClick, onChange и пр - тоже вынес в отдельные функции , которые как параметр принимают имя бровс объекта FUNC CreateBrowse( cBrw, cParent, nRow, nCol, nWidth, nHeight, cAlias ) LOCAL i := 0 LOCAL n := 0 LOCAL cHeading := "" LOCAL cStr := "" PUBLIC &cBrw cAlias := IF( cAlias == NIL, cBrw, cAlias ) DEFINE TBROWSE &cBrw At nRow, nCol ALIAS cAlias ; OF &cParent ; WIDTH nWidth ; HEIGHT nHeight ; COLORS { CLR_BLACK, CLR_BLUE } ; FONT "MS Sans Serif" ; SIZE 9 ; CELL; ON DBLCLICK TbrwDblClick(cBrw); SELECTOR TRUE END TBROWSE &cBrw:LoadFields( TRUE ) &cBrw:lCellBrw := TRUE &cBrw:nSelWidth := 16 &cBrw:bChange := { || TBrwChange( cBrw )} &cBrw:bGotFocus := { || TBrwGotFocus( cBrw )} &cBrw:bLostFocus := { || TBrwLostFocus( cBrw )} &cBrw:bDelete := { || TBrwDelete( cBrw )} DoMethod(cParent,cBrw,"SetFocus") RETURN &cBrw Далее в функциях обработки событий проверяю их какого бровса вызвано событие и в зависимости от этого выполняю то или иное действие Вот пример обработчика по CHANGE - при перемещении по базе документов - ставлю фильтр по пользователям в соседнем бровсе FUNC TBrwChange( cBrw ) LOCAL cAlias := &cBrw:cAlias cBrw := UPPER( cBrw ) DO CASE CASE cBrw == "DOC" cFilter := "ID_DOC = " + NTOC((cAlias)->ID) USER->(DbSetFilter(cFilter)) USER->(DbGoTop()) TbRwReset('USER', TRUE) END IF &cBrw:nRowCount() == &cBrw:nRowPos() &cBrw:Refresh( .F. ) ENDIF IF &cBrw:nLogicPos() > 0 .and. &cBrw:nRowPos() == 1 &cBrw:Refresh( .F. ) ENDIF RETURN NIL Func TBrwReset( cBrw, lAll) lAll := IF( lAll == NIL, FALSE, lAll ) &cBrw:Reset() IF &cBrw:nLen>0 &cBrw:GoTop() END &cBrw:Refresh( lAll ) RETURN NIL

SergKis: Vlad04 чтобы несколько упростить вид предлагаю писать так: ... END TBROWSE nInd := GetControlIndex(cForm, cBrw) // index oBrw := _HMG_aControlIds [ nInd ] // object и далее по тексту вместо &cBrw:.... использовать oBrw:...

Haz: согласен, чтоб не пестрило от макроподстановок можно и еще упростить ) oBrw := &cBrw и далее по тексту ...

Vlad04: Ок Понятно, буду пробовать Спасибо

Andrey: Подскажите пожалуйста, как сделать обработку по клавишам в TBROWSE ?

gfilatov2002: Andrey пишет: как сделать обработку по клавишам в TBROWSE ? По-видимому, как то так oBrw:bKeyDown := { | nKey | If( nKey == VK_RETURN .or. nKey == VK_ESCAPE, ; MyAction(), Nil ), lOk := nKey != VK_ESCAPE }



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