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

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

Andrey: Dima пишет: Уверен что cDataType возвращается тот что надо ? Даже не задумывался... Блин опять исходники Tsbrowse не то возвращают... Или не они виноваты ? Точно, проверил не работает, вернее возвращает U oBrw1:aColumns[nJ]:cDataType -> "U"

Dima: Из сырца ::cDataType = ValType( Eval( ::bData ) ) , может наведет на какие мысли

Andrey: Да какие тут мысли... Править надо исходник бровса и всё тут !

Dima: Andrey пишет: Да какие тут мысли... Править надо исходник бровса и всё тут ! Ну вообще то нет Считывать и проверять нужно не тип а ФЛАГ (тип поля). Примерно так ? dbFieldInfo( DBS_TYPE, FieldPos( "t" ) ) ? dbFieldInfo( DBS_TYPE, FieldPos( "t2" ) ) ЗЫ По ходу Петр разжевал для тебя этот вопрос в теме , Новые типы переменных , но ты снова фСё забыл

SergKis: Dima пишет Уверен что cDataType возвращается тот что надо ? Вот формирование cDataType ::cDataType = ValType( Eval( ::bData ) ) Привязываться надо к именам колонок aEval( oBrw:aColumns, {|oCol| oCol:lEdit := ! ','+oCol:cName+ ',' $ ",ID,DTM,DTM2," } )

Andrey: SergKis пишет: Привязываться надо к именам колонок aEval( oBrw:aColumns, {|oCol| oCol:lEdit := ! ','+oCol:cName+ ',' $ ",ID,DTM,DTM2," } ) Не согласен. Берём чужую базу и тупо её открываем. Я откуда знаю какие имена колонок типа: "+", "=", "^", "@" ?

SergKis: Andrey пишет Не согласен. повторяю Выход - взять метод METHOD LoadFields( lEditable ) CLASS TSBrowse преобразовать в функцию, подправить под свое понимание ситуации и предложть в использование, если будет хорошо, можно поправить старый или сделать новый метод LoadField2(...) в TsBrowse

SergKis: PS У себя так и сделал, по аналогии с ::SetArrayTo(...), написал ::SetFieldTo(...)

SergKis: Andrey пишет Берём чужую базу и тупо её открываем. Я откуда знаю какие имена колонок типа: "+", "=", "^","@ Для этого надо исп. утилиту DbEdit TsBrowse предполагает программируемую работу над таблицей. А следить за всеми новыми полями и как их обрабатывать, не уверен что надо, к примеру поле @ - TimeStamp корректировать можно, его, вроде самому заполнять надо (често подзабыл уже)

Andrey: SergKis пишет: @ - TimeStamp корректировать можно, его, вроде самому заполнять надо (често подзабыл уже) Да, это поле нормально редактируется. Из-за этого и не включил его в запрет редактирования. SergKis пишет: Выход - взять метод METHOD LoadFields( lEditable ) CLASS TSBrowse преобразовать в функцию, подправить под свое понимание ситуации и предложть в использование, если будет хорошо, можно поправить старый или сделать новый метод LoadField2(...) в TsBrowse Ну не согласен с этим. Есть нормальная функция, которая сделана для Харбора !!! Это же типы уже есть в Харборе. Чуток отредактировать и будет служить 100 лет ещё...

Dima: Andrey если по всей базе то вполне сработает такой код дарю [pre2] #include "dbstruct.ch" ..... Local Hfldtype:=hb_hash("=",nil,"+",nil,"^",nil) for i := 1 To oBrw:nColCount() if hb_hhaskey(Hfldtype,dbFieldInfo( DBS_TYPE, i )) oBrw:aColumns[ i ]:lEdit := FALSE endif next [/pre2] Или можно в AEVAL все сделать PS Не проверял :) Andrey пишет: // запрет редактирования полей типа: "+", "=", "^" aEval( oBrw1:aColumns, {|oCol| If( oCol:cDataType == "+", oCol:lEdit := .F., NIL) } ) aEval( oBrw1:aColumns, {|oCol| If( oCol:cDataType == "=", oCol:lEdit := .F., NIL) } ) aEval( oBrw1:aColumns, {|oCol| If( oCol:cDataType == "^", oCol:lEdit := .F., NIL) } ) Это по ходу бредосный подход :) Все надо делать за один подход в одном AEVAL , потому как следующий AEVAL похерит результат предыдущего

Andrey: Dima пишет: дарю Спасибо ! Хотел без цикла обойтись, но наверное лучше с ним.

SergKis: Andrey пишет Ну не согласен с этим. Взял бы текст h_tbrowse.prg и просканировал на cDataType, думаю многие вопросы отпали. В основе лежит bData отображения, как задал, так и будет работать. Если надо тебе спец. обработки, надо писать и спец. блок, т.е. TimeStamp превращать как надо для конкретного отображения, то же и по lEdit, ну или перелопатить весь TsBrowse.

Haz: SergKis пишет: TsBrowse предполагает программируемую работу над таблицей. А следить за всеми новыми полями и как их обрабатывать, я за, проще самому определить как ТСБровс будет работать с базой в каждом конкретном, чем каждый раз переопределять то что почему то сделано стандартом.

SergKis: PS Метод SetFields (совместро с заданым\нет списком указанных полей) служит для первоначального заполнения\формирования колонок (вместо исп. ADD COLUMN ...), а дальше все ручками, меняешь bData, lEdit, Size, Color, ....

Andrey: SergKis пишет: а дальше все ручками, меняешь bData, lEdit, Size, Color, .... Нет в мире совершенства ... Понял ! Спасибо !

SergKis: Andrey пишет Нет в мире совершенства ... Правильнее "Лучшее - враг хорошего"

Dima: Что то я снова в виду того что долго не юзал Tsbrowse , торможу. Есть бровс и в нем стоит фильтр по полю WB , строка фильтра WB==1. На одной из записей меняю значение WB. Эта запись из фильтра должна уйти. Что нужно корректно сказать бровсу что бы правильно его обновить ? Было показано скажем 5 записей и после того как я сменил на одной из них значение WB , осталось 4 записи. Reset() юзать не хочется.

Haz: Dima пишет: reset не хочется Дима, пишу с мобилки и поэтому коротко и по пямяти ). Глянь код в методе ::Delete (). Последовательность должна быть такой же как после dbDelete () в этом методе.

Dima: Haz пишет: Глянь код в методе ::Delete () Ты в смысле про DeleteRow() ? Покопаю завтра , спасибо.



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