Форум » 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:....

Ответов - 148, стр: 1 2 3 4 5 6 7 8 All

Andrey: gfilatov2002 пишет: Поправил для следующей сборки... Большое СПАСИБО ! А ПОКА - какой исходник можно самому подправить и к себе в проект поставить ?

gfilatov2002: Andrey пишет: какой исходник можно самому подправить Вот этот: click here

Andrey: Спасибо БОЛЬШОЕ !!! Работает.... 2DBF-3.7z - https://cloud.mail.ru/public/5d315f972a72/MiniGui-Error


Andrey: У меня в задаче есть меню с ДВУМЯ вкладками Можно ли объект TBROWSE (созданный на 1-ой вкладке) скопировать на вторую вкладку ? PAGE ' 1-я вкладка ' DEFINE TBROWSE oBrw8 ; AT nHTabW,2 ; WIDTH 510 HEIGHT GetClientHeight(hWnd)-(nHButt-1*2) - nHTabW -3 ; ON CHANGE { || MyChangeBrowse8("oBrw8") } ; ON GOTFOCUS MyChangeBrowse8("oBrw8") ; BACKCOLOR aBackColor ; SELECTOR .T. ; CELL END TBROWSE END PAGE PAGE ' 2-я вкладка ' .............. END PAGE

Andrey: Есть ли возможность в МиниГуи копировать объект и располагать на другой форме ? Может мой вопрос неправильный, так скажите пожалуйста...

Dima: Drag and Drop что ли ?

Andrey: Dima пишет: Drag and Drop что ли ? Нет в коде. Чтобы не писать дублирующий код - типа так: PAGE ' 1-я вкладка ' DEFINE TBROWSE oBrw8 ; AT nHTabW,2 ; WIDTH 510 HEIGHT GetClientHeight(hWnd)-(nHButt-1*2) - nHTabW -3 ; ON CHANGE { || MyChangeBrowse8("oBrw8") } ; ON GOTFOCUS MyChangeBrowse8("oBrw8") ; BACKCOLOR aBackColor ; SELECTOR .T. ; CELL END TBROWSE END PAGE PAGE ' 2-я вкладка ' DEFINE TBROWSE oBrw7 ; AT nHTabW,2 ; WIDTH 510 HEIGHT GetClientHeight(hWnd)-(nHButt-1*2) - nHTabW -3 ; ON CHANGE { || MyChangeBrowse8("oBrw7") } ; ON GOTFOCUS MyChangeBrowse8("oBrw7") ; BACKCOLOR aBackColor ; SELECTOR .T. ; CELL END TBROWSE END PAGE Есть ли команды - скопировать объект и разместить на форме ?

Haz: Andrey пишет: Чтобы не писать дублирующий код оформляй его в виде функции или процедуры один раз и вызывай сколько и где хош

Andrey: А как привязать этот объект из функции на 1-ю и 2-у вкладку.

gfilatov2002: Andrey пишет: как привязать этот объект из функции на 1-ю и 2-у вкладку Посмотри рабочий пример ниже [pre]/* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "minigui.ch" #include "TSBrowse.ch" #translate dbcreate(<file>, <struct>) => hb_dbcreatetemp(<file>, <struct>) Function Main dbcreate('test',{{'nazwa','C',30,0},; {'ilosc','N',12,2},; {'cena','N',14,2}}) if select('test') == 0 dbusearea(.t.,,'test') endif for i := 1 to 100 test->(dbappend()) test->nazwa := "Item " + hb_ntos(i) test->ilosc := test->(recno()) test->cena := (test->ilosc * HB_Random(100)) next test->(dbgotop()) define window tabsample at 0,0 width 400 height 300 title 'Add control test' main DEFINE TBROWSE Brw_1 AT 10, 10 OF o_dlu ALIAS "test" WIDTH 330 HEIGHT 120 ADD COLUMN TO Brw_1 DATA {|| test->nazwa } ALIGN DT_LEFT, DT_CENTER, DT_CENTER ; TITLE 'Nazwa' SIZE 100 ADD COLUMN TO Brw_1 DATA {|| test->ilosc } ALIGN DT_RIGHT, DT_CENTER,DT_CENTER TITLE 'Ilosc' SIZE 70 ADD COLUMN TO Brw_1 DATA {|| test->cena } ALIGN DT_RIGHT, DT_CENTER, DT_CENTER TITLE 'Cena' SIZE 70 Brw_1:SetColor( { 2 }, { { | | IIf( test->(OrdKeyNo()) % 2 == 0, RGB(255,255,255), RGB(230, 230, 230) ) }}) Brw_1:nHeightCell += 6 Brw_1:nHeightFoot += 4 Brw_1:nWheelLines := 1 Brw_1:nHeightHead := 14 END TBROWSE tabsample.Brw_1.Hide define tab tab1 at 10,10 width 370 height 220 define page 'Page1' define button b1 row 30 col 10 caption 'Press here to add a control' width 180 action addnewcontrols({'lbl1','text1'}) end button end page define page 'Page2' define button b2 row 30 col 10 caption 'Press here to add a control' width 180 action addnewcontrol2('Brw_1') end button end page end tab on key escape action thiswindow.release() end window tabsample.center tabsample.activate Return nil function addnewcontrols(actrl) local c1, c2 c1 := actrl[1] c2 := actrl[2] if iscontroldefined(&c1,tabsample) tabsample.&(c1).release endif define label &c1 parent tabsample row 50 col 10 width 40 value 'label' end label if iscontroldefined(&c2,tabsample) tabsample.&(c2).release endif define textbox &c2 parent tabsample row 50 col 50 width 100 end textbox tabsample.tab1.addcontrol(c1,1,84,10) tabsample.tab1.addcontrol(c2,1,80,50) return nil function addnewcontrol2(ctrl) if iscontroldefined(&ctrl,tabsample) tabsample.&(ctrl).Show endif tabsample.tab1.addcontrol(ctrl,2,80,10) return nil[/pre]

Andrey: gfilatov2002 пишет: Посмотри рабочий пример ниже А сразу объект TBROWSE на 1-ю и вторую вкладку можно разместить ? Без кнопочек открыть ?

gfilatov2002: Andrey пишет: А сразу объект TBROWSE на 1-ю и вторую вкладку Да, по команде ниже <Имя формы>.<Имя TAB>.addcontrol(<Имя TBROWSE>,<Номер вкладки TAB>,<Номер ряда>,<Номер колонки>)

Andrey: gfilatov2002 пишет: Да, по команде ниже Спасибо БОЛЬШОЕ ! Буду разбираться...

Andrey: Andrey пишет: Только до редактирования же НЕ ДОХОДИТ !!! Я колёсиком вверх-вниз и алиас уже слетает !!! Т.е. стоя на 5-7 записях в справочнике уже видно что база отвалилась !!! Andrey пишет: цитата: Сделал новый тест в функции MyFieldEdit() до начала редактирования при слёте базы: MsgDebug(oBrw_1:nLen, ALIAS(), oBrw_1:cAlias ) MsgDebug( "RLock()=", (oBrw_1:cAlias)->(RLock()) ) Т.е. колёсиком подергал вверх-вниз на 5 записях, функция MyChangeBrowse(cAlias) показывает 0/0 начинаю редактировать: 1. MsgDebug показывает 5, "", "STREET" 2. MsgDebug показывает "RLock()=" .T. Т.е. АЛИАС по всей задачи ALIAS() = "" - убит !!! Кем ? На экране таблица есть (в объекте) а все связи разорваны ! А вот еще облом, если записей много колёсиком-мышки нужно подергать вверх-вниз (просто на экране, не на всю длину) и то же вылетает .... 0/0 записей.... Возвращаюсь опять к предыдущей теме. Теперь прога стала "сваливаться" на редактирование базы, то нормально редактирует, то нет. Закономерностей нет. После некоторого анализа, дошло до меня.... После запуска программы, на главной форме я повесил таймер для перечитывания(открытие/закрытие) базы-журнала работающих в программе... Может дело в этом ?

Andrey: Haz пишет: не убит, где-то сработал Select(0) вот и стал текущим пустой алиас. На 99% уверен что если твой RecLock() вызывать из алиасного выражения STREET->(RecLock()) то ошибка уйдет. Но это костыль, а не исправление ошибки. По уму надо найти "виновника" Виновник найден ! Совсем мало прошло, чуть больше месяца....

SergKis: Простая конструкция TsBrowse не включает корректировку (удаление работает) : [pre2] @ 10,10 TBROWSE oBrw5 ALIAS "Test" OF Form_1 ; WIDTH 350 HEIGHT 380 CELLED; HEADERS "Code","First","Last","Birth","Bio" ; WIDTHS 50,150,150,100,200 ; FIELDS Test->Code,Test->First,Test->Last,Test->Birth,Test->Bio ; VALUE 1 ; BACKCOLOR YELLOW ; FONTCOLOR BLUE ; LOCK ; DELETE ; EDITABLE добавление доп. манипуляции исправляет ситуацию корректировки: k := len(oBrw5:aColumns) FOR i := 1 TO k oBrw5:aColumns[ i ]:lEdit := ( i < k ) NEXT но это лишние телодвижения ... Отключение корректировки - результат не передачи в методе Default() параметра ::lEditable h_tsbrowse.prg (line 1779) ::AddColumn( TSColumn():New( ::aHeaders[ nI ], bBlock, ::aFormatPic[nI], { ::nClrText, ::nClrPane, ; ::nClrHeadFore, ::nClrHeadBack, ::nClrFocuFore, ::nClrFocuBack }, ; {aJustify[ nI ], 1}, ::aColSizes[ nI ],::lEditable, ; // здесь не задан параметр ValType( Eval( ::bLine )[ nI ] ) == "B",,,,,,, ; 5,, {.F., .T.},, Self, cBlock ) ) [/pre2] это неточность или задумано специально ?

SergKis: SergKis пишет:{aJustify[ nI ], 1}, ::aColSizes[ nI ],::lEditable, ; // здесь не задан параметр немного промахнулся в запятых, надо так:[pre2] ::AddColumn( TSColumn():New( ::aHeaders[ nI ], bBlock, ::aFormatPic[nI], { ::nClrText, ::nClrPane, ; ::nClrHeadFore, ::nClrHeadBack, ::nClrFocuFore, ::nClrFocuBack }, ; {aJustify[ nI ], 1}, ::aColSizes[ nI ],, ; (::lEditable .or. ValType( Eval( ::bLine )[ nI ] ) == "B"),,,,,,, ; 5,, {.F., .T.},, Self, cBlock ) ) [/pre2] так работает

SergKis: Продолжаю мучить простой вариант TsBrowse, добавил [pre2] @ 10,10 TBROWSE oBrw5 ALIAS "Test" OF Form_1 ; WIDTH 350 HEIGHT 380 CELLED; HEADERS "Code","First","Last","Birth","Bio" ; WIDTHS 50,150,150,100,200 ; FIELDS Test->Code,Test->First,Test->Last,Test->Birth,Test->Bio ; VALUE 1 ; BACKCOLOR YELLOW ; FONTCOLOR BLUE ; READONLY {.T.,.T.,.T.,.T.,.F.} ; LOCK ; DELETE ; EDITABLE [/pre2] и ... упс ... READONLY подвешен в воздухе, упоминается в Function _DefineTBrowse (...) как HB_SYMBOL_UNUSED( readonly ) и все, т.е. вынесено из define ... "как трудно жить" (c), перевести простой browse, на простой TBrowse

gfilatov2002: SergKis пишет: Простая конструкция TsBrowse не включает корректировку Благодарю за помощь. Уже включил это исправление в следующую сборку

SergKis: SergKis пишет:перевести простой browse, на простой TBrowse победил так ( h_tsbrowse.prg):[pre2] Function _DefineTBrowse ( ... ) ... LOCAL i, j, k, n // BK 18.05.2015 ... if ValType(aColSel) != 'U' .and. ValType(aColSel) =='A' IF ValType(aColSel[1]) =='A' aColSel := aColSel[1] endif endif IF valtype(uWhen) == 'B' // BK 18.05.2015 IF valtype(readonly) != 'A' // readonly := eval(uWhen) // ENDIF // uWhen := Nil // иначе снятие ENDIF // IF valtype(valid) == 'B' // valid := eval(valid) // ENDIF // BK if ( FontHandle := GetFontHandle( FontName ) ) != 0 ... oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight,; bFields, aHeaders, aWidths, ParentFormName,; change , bDblClick, bRClick, fontname, fontsize, ; hCursor, aTmpColor , aBmp, cMsg, update, uAlias, uWhen, value, cell,; nStyle, bLClick, aFlds, aHeadClick, nLineStyle, lRePaint,; Delete, aJust, lock, appendable, lEnum,; lAutoSearch, uUserSearch, lAutoFilter, uUserFilter, aPicture, ; lTransparent, uSelector, lEditable, lAutoCol, aColSel, tooltip) IF ( k := len(oBrw:aColumns) ) > 0 // BK 18.05.2015 IF valtype(readonly) == 'A' // sets oCol:bWhen n := Min(len(readonly), k) // FOR i := 1 TO n // j := readonly[ i ] // IF valtype(j) == 'B' // oBrw:aColumns[ i ]:bWhen := j // ELSEIF j == NIL .or. ! empty(j) // oBrw:aColumns[ i ]:bWhen := {||.T.} // oBrw:aColumns[ i ]:cWhen := '{||.T.}' // ELSE // oBrw:aColumns[ i ]:bWhen := {||.F.} // oBrw:aColumns[ i ]:cWhen := '{||.F.}' // ENDIF // NEXT // ENDIF // IF valtype(valid) == 'A' // sets oCol:bValid n := Min(len(valid), k) // FOR i := 1 TO n // IF valtype(valid[ i ]) == 'B' // oBrw:aColumns[ i ]:bValid := valid[ i ] // ENDIF // NEXT // ENDIF // ENDIF // BK ... ControlHandle := oBrw:hWnd IF ValType(gotfocus) != "U" ... Работает: @ 10,10 TBROWSE oBrw5 ALIAS "Test" OF Form_1 ; WIDTH 350 HEIGHT 380 CELLED; HEADERS "Code","First","Last","Birth","Bio" ; WIDTHS 50,150,150,100,200 ; FIELDS Test->Code,Test->First,Test->Last,Test->Birth,Test->Bio ; VALUE 1 ; BACKCOLOR YELLOW ; FONTCOLOR BLUE ; VALID {{|v,o| myValid(1, v, o)}, {|v,o| myValid(2, v, o)} } ; READONLY {{|o| myROnly(1, o)},.T.,.T.,.T.,.F.} ; LOCK ; DELETE ; EDITABLE @ 10,10 TBROWSE oBrw5 ALIAS "Test" OF Form_1 ; WIDTH 350 HEIGHT 380 CELLED; HEADERS "Code","First","Last","Birth","Bio" ; WIDTHS 50,150,150,100,200 ; FIELDS Test->Code,Test->First,Test->Last,Test->Birth,Test->Bio ; VALUE 1 ; BACKCOLOR YELLOW ; FONTCOLOR BLUE ; WHEN {{|o| myWhen(1, o)}, {|o| myWhen(2, o)}, {|o| myWhen(3, o)}, {|o| myWhen(4, o)}, .F.} ; VALID {{|v,o| myValid(1, v, o)}, {|v,o| myValid(2, v, o)}, , , } ; LOCK ; DELETE ; EDITABLE [/pre2]



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