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

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

Dima: Andrey Попробуй поиграть с nfreeze и lLockFreeze

Andrey: Dima пишет: Попробуй поиграть с nfreeze и lLockFreeze У меня уже стоит : [pre2] oBrw1:nFreeze := 1 // Заморозить столбец oBrw1:lLockFreeze := .T. // Избегать прорисовки курсора на замороженных столбцах[/pre2] А если убрать, то всё равно пустой столбец появляется, последним и вся таблица с пустым столбцом становиться.

Петр: Andrey пишет: У меня уже стоит : oBrw1:nFreeze := 1 Ну так все 8 или сколько там есть попробуйте заморозить.

Andrey: Петр пишет: Ну так все 8 или сколько там есть попробуйте заморозить. Сразу не понял что нужно заморозить ВСЕ столбцы. Сделал ! Получилось !!! Таблица вправо перестала сдвигаться. Спасибо БОЛЬШОЕ !

Andrey: Рано радовался. Таблица заморозилась и выбора в колонках теперь НЕТ !!! Значит заморозку использовать НЕЛЬЗЯ для этих целей...

Петр: Andrey пишет: выбора в колонках теперь НЕТ И при oBrw1:lLockFreeze := .F. ?

Dima: oBrw1:lLockFreeze := .F. PS Хэх одновременно написали

Andrey: Dima пишет: oBrw1:lLockFreeze := .F. Enter заработал, двойной клик мышки нет ! Ерунда опять получается... Писать отдельную функцию на срабатывание мышки - не есть хорошо, когда уже стандартная подключена по умолчанию. Дело в том что хочется обойтись стандартным кодом. У меня везде на нужных колонках стоит только: [pre2] // обработка до ввода oBrw1:aColumns[2]:bPrevEdit := {|| FieldEditFile(1), FALSE } oBrw1:aColumns[5]:bPrevEdit := {|| FieldImageEdit(), FALSE } oBrw1:aColumns[6]:bPrevEdit := {|| FieldEditFile(2), FALSE } [/pre2]

SergKis: SergKis пишет STATIC FUNC On_DrawLine( oBr ) ... Правильно так [pre2] STATIC FUNC On_DrawLine( oBr ) LOCAL nRow If oBr:lPainted nRow := oBr:nPaintRow If nRow == 1 AFill(oBr:aRowPosRec, 0) EndIf oBr:aRowPosRec[ nRow ] := (oBr:cAlias)->( RecNo() ) EndIf RETURN Nil [/pre2]

Vlad04: oBrw1:aColumns[2]:bPrevEdit := ... А можно сделать вызов общий для всех колонок, без указания № колонки ? Т.е. при выходе с редактирования из любой колонки вызывается одна функция или блок.

SergKis: Vlad04 1.[pre2] AEval(oBrw1:aColumns, {|oCol| oCol:bPrevEdit := {|val, brw | Prev( val, brw ) }, ; oCol:bPostEdit := {|val, brw, add| Post( val, brw, add ) } ) [/pre2] 2. или FOR ... применить

Vlad04: Ниже неправильно (выдает ошибку) AEval(Brw_3:aColumns, {|oCol| oCol:bPostEdit := {|val, brw, add| brw_3:Upstable() } ) Но как-то так хочется, т.е. для всех колонок Brw_3 при выходе с редактирования выполнять стабилизацию Бровса

SergKis: Vlad04 в блок кода передаются параметры val, brw, add, используйте их {|val, brw| brw:Upstable() }

SergKis: PS Vlad04 пишет Но как-то так хочется, т.е. для всех колонок Brw_3 при выходе с редактирования выполнять стабилизацию Бровса усложните блок кода, если надо после 2-ой колонки, то AEval(Brw_3:aColumns, {|oCol,nCol| oCol:bPostEdit := iif( nCol == 2, {|val, brw, add| brw:Upstable() }, NIL ) )

Vlad04: Скобка одна } пропущена, а так нормально AEval(Brw_3:aColumns, {|oCol| oCol:bPostEdit := {|val, brw | brw:Upstable() }} )

Andrey: Пробежаться для чтения по колонке для oBrw := SetArrayTo(...) можно так: [pre2]// Итог по колонке FUNCTION ItogoColumn( oBrw, cNameColumn ) LOCAL nCol := oBrw:nColumn(cNameColumn) LOCAL oCol, nItg := 0 aEval(oBrw:aArray, { |aVal,nElm| nItg += aVal[ nCol ] }) oCol:GetColumn(cNameColumn):cFooting := hb_ntos(nItg) oBrw:DrawFooters() // или // oCol := oBrw:GetColumn(nCol) // oCol:cFooting := hb_ntos(nItg) RETURN NIL[/pre2] или так [pre2] LOCAL nCol := oBrw:nColumn(cNameColumn) LOCAL nItg := 0 FOR nI := 1 TO LEN(oBrw:aArray) // или oBrw:nLen nItg += oBrw:aArray[ nI, nCol ] NEXT[/pre2] Пробежаться для записи по всей таблице для oBrw := SetArrayTo(...) можно так: ( Запись осуществляется средствами таблицы !) [pre2] // допустим колонка LMETKA nCol := oBrw:nColumn("LMETKA") FOR nI := 1 TO LEN(oBrw:aArray) // или oBrw:nLen lMark := oBrw:aArray[nI,nCol] oBrw:aArray[nI,nCol] := !lMark NEXT[/pre2] А как такую же операцию сделать для обычного TBROWSE, средствами таблицы ? И не средствами драйвера базы - (oBrw:cAlias)->LMETKA := !lMark

Haz: Andrey пишет: А как такую же операцию сделать для обычного TBROWSE, средствами таблицы ? Примерно так [pre2] FOR nI := 1 TO oBrw:nLen AEval( oBrw:aColumns, {|oCol| Eval(oCol:bData, !Eval(oCol:bData)) }) NEXT [/pre2]

Andrey: Haz пишет: Примерно так А позиционирование по строке таблицы - разве не нужно ? По массиву же стоит - oBrw:aArray[nI,nCol] = Или я просто не понял... Можешь написать без Eval() ...

Haz: Andrey пишет: А позиционирование по строке таблицы - разве не нужно нужно добавить oBrw:GoTop() а в цикле oBrw:Skip(1) и указать по какой колонке . в моем примере - по всем ( да и пример этот только показывает как использовать ::bData ) Без Eval() только через драйвер базы, да и Eval тоже неявно использует драйвер. Зачем такой изврат , если драйвер самое быстрое и надежное решение ?

Haz: Haz пишет: пример этот только показывает как использовать ::bData bData - это блок выборки / записи , такой же как и в Clipper , он же возвращается функцией FieldWBlock(). при предаче в блок парамера как Eval( ::bData, x ) -этот параметр присваивается в поле. При вызове без параметра - как Eval(::bdata ) возвращает значение поля. в классическом виде это примерно так {|x| if(pCount() == 0, FieldGet(nCol), FieldPut(nCol, x))}. Замечу - блок не заботится о блокировке записи. PS впрочем именно этот блок мы с тобой уже неоднократно обсуждали на форуме. PPS Оно тебе надо ? чем драйвер не угодил то if (oBrw:cAlias)->(Rlock()) (oBrw:cAlias)->&(oBrw:aColumns[oBrw:nCell]:cName) := 'новое значение' (oBrw:cAlias)->(dbUnlock()) end



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