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

Dima: Andrey Ну видать в Минигуи такие шаблоны не реализованы

Haz: Dima пишет: Ну видать в Минигуи такие шаблоны не реализованы Дима , вопрос про TsBrowse и там ( и в MiniGui ) все реализовано более того там шаблоны можно задавать не только символьной строкой , но и блоком кода ( который оценивается во время выполнения и возвращает нужную строку) Andrey Задача решается как два пальца ... ... Если нужен шаблон на просмотр и редактирование то oBrw:aColumns[x]:cPicture := "какой то шаблон" ( или := { || какой-то блок который вернет нужный шаблон } ) Если нужен особый шаблон только редактирование то перед тем как это редактирование начнется (создастся Get и получит фокус ввода ) в Классе предусмотрен блок DATA bPrevEdit // Action to be performed before editing cell. в котором можно переопределять шаблон на нужный ( не забывая его потом восстанавливать на общий для показа в блоке bPostEdit или bEditEnd ). Короче выше тут описал алгоритм , и он займет всего две строки кода :bPrevEdit := {|| :cPicture := ....} :bPostEdit := {|| :cPicture := ....} Второй вопрос (тоже bPrevEdit) уже раз сто в ветке обсуждался

Andrey: Haz пишет: Задача решается как два пальца ... Это для тебя как два пальца... А я еще не въеду в это (часть понял, часть не понял)... Из-за этого и маленький пример сделал, чтобы понять можно было бы. Если есть возможность, то большая просьба показать на этом примере как это делается. Заранее БОЛЬШОЕ СПАСИБО !


Haz: Andrey пишет: Если есть возможность, то большая просьба показать на этом примере как это делается. подмена шаблона для редактирования ( примерно так ) oBrw_2:aColumns[3]:cPicture := Replicate("X", 80) oBrw_2:aColumns[3]:bPrevEdit := { || oBrw_2:aColumns[3]:cPicture := Alltrim((Alias())->PICTURE ), .T.} oBrw_2:aColumns[3]:bPostEdit := { || oBrw_2:aColumns[3]:cPicture := Replicate("X", 80))} и что тут такого невероятного Есть правда одно НО .. нужно определиться что храним в поле PICTURE - или шаблон в виде строки ? или вызываемую функцию соответственно будет или oBrw_2:aColumns[3]:bPrevEdit := { || oBrw_2:aColumns[3]:cPicture := Alltrim((Alias())->PICTURE ), .T.} или oBrw_2:aColumns[3]:bPrevEdit := { || oBrw_2:aColumns[3]:cPicture := Alltrim(Eval((Alias())->PICTURE )), .T.}

Andrey: Haz пишет: Есть правда одно НО .. Вот и я о том же. Можно выкрутиться тогда с помощью функции без параметров - типа: MyFunc() и анализировать тогда строку на "()": oBrw_2:aColumns[3]:bPrevEdit := { || oBrw_2:aColumns[3]:cPicture := IIF(AT("()",(Alias())->PICTURE)>0, ; Alltrim(Eval((Alias())->PICTURE )),; Alltrim((Alias())->PICTURE ), .T.} Haz пишет: и что тут такого невероятного Для тебя просто, а я пока туплю, опыта нет... Спасибо БОЛЬШОЕ ! А можно скрыть показ в таблице aColumns[4] ? Т.е. типа виртуальный 4-столбец.

Andrey: Труба ! Не работает.... Опять не работает... Исправленный файл программы 2DBF.7z здесь - https://cloud.mail.ru/public/5d315f972a72/MiniGui-Error

Haz: Andrey пишет: А можно скрыть показ в таблице aColumns[4] ? Т.е. типа виртуальный 4-столбец. Что имеешь ввиду ? Есть же метод obrw:HideColumns()

Haz: Haz пишет: Труба ! Не работает.... Опять не работает... Работает oBrw_2:aColumns[3]:cPicture := Replicate("X", 80) oBrw_2:aColumns[3]:bPrevEdit := { || oBrw_2:aColumns[4]:cPicture := Alltrim((Alias())->PICTURE ), .T.} oBrw_2:aColumns[3]:bPostEdit := { || oBrw_2:aColumns[4]:cPicture := Replicate("X", 80))} 1) в момент инициализации бровса это была колонка 3 , после появилась колонка SELECTOR и твое поле стало колонкой 4 2) Выше же писал что Replicate("X", 30) это НЕ шаблон. а ФУНКЦИЯ которую надо еще и вызвать. Правильный шаблон "XXXXXXXXXXXXXXXXXXXXXXXXXXXX" ЗЫ Вообще там этот селектор и обращение к массиву aColumns по номеру не очень дружат У себя определяю в классе TSCOLUMN новое поле данных DATA cName и присваиваю ему имя поля потом индекс колонки получаю косвенно через это имя . Криво ... зато таких сюрпризов нет

Andrey: Haz пишет: Работает СПАСИБО ! 1) Понял, где пролетел. 2) Я в новой базе подправил (убрал эту функцию и поставил шаблон). Haz пишет: Вообще там этот селектор и обращение к массиву aColumns по номеру не очень дружат У себя определяю в классе TSCOLUMN новое поле данных DATA cName и присваиваю ему имя поля потом индекс колонки получаю косвенно через это имя . Криво ... зато таких сюрпризов нет А код для этого примера можешь привести ?

Haz: Andrey пишет: А код для этого примера можешь привести ? сначала FOR n := 1 TO Len(oBrw:aColumns) oCol := oBrw:aColumns[n] IF ! __objHasData(oCol, 'cName') __objAddData (oCol, 'cName' ) oCol:cName:= (oBrw:cAlias)->(Field(n)) END END потом вместо oBrw:aColumns[n] примерно так ... oBrw:aColumns[ aScan( oBrw:aColumns, {|e| е:cName == Field(n)} )) ]:cPicture := "XXX" PS писал по памяти , не проверял но смысл понятен

Andrey: Haz пишет: PS писал по памяти , не проверял но смысл понятен Спасибо !

Andrey: Haz пишет: Задача решается как два пальца ... Опять Вроде сделал, работает... Только после вызова внешней функции - вылет: Error BASE/1122 Неверный аргумент: TRANSFORM Called from TRANSFORM(0) Called from TSBROWSE:DRAWLINE(2862) Called from TSBROWSE:GOUP(6049) Called from TSBROWSE:KEYDOWN(6377) Called from TSBROWSE:HANDLEEVENT(7084) Called from EVENTS(75) Called from _DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1374) Called from HANDBOOKS(80) Called from (b)MAIN(43) С такой ошибкой точно не справлюсь ! Исправленный исходник 2DBF-2.7z здесь - https://cloud.mail.ru/public/5d315f972a72/MiniGui-Error Может вообще обработку сделать в отдельной функции ? Типа - oBrw_2:aColumns[3]:bPrevEdit := { || MyEditCol3() } Только как в этой функции задавать форматы на обработку - не представляю.... Вообще то задачка становиться не совсем простой....

Haz: Andrey пишет: Вообще то задачка становиться не совсем простой.... задачка была и осталась примитивной : 1 перед редактированием присвоить переменной новое значение 2 после редактирования восстановить старое 3 при этом эти значения должны быть в ФОРМАТЕ ПРАВИЛЬНОГО ШАБЛОНА PICTURE ВСЕ! ошибка в программе связана с невыполнением п.3

Andrey: Haz пишет: ошибка в программе связана с невыполнением п.3 Понял. Спасибо !

Andrey: Сделал так - Работает ! oBrw_2:aColumns[3]:cPicture := Replicate("X", 180) oBrw_2:aColumns[3]:bPrevEdit := { || MyEditCol3() } oBrw_2:aColumns[3]:bPostEdit := { || oBrw_2:aColumns[4]:cPicture := Replicate("X", 180) } .......... //////////////////////////////////////////////////////////// FUNCTION MyEditCol3() LOCAL lRet := .T. , cPicture IF (Alias())->KRUN == 1 EVAL( hb_macroBlock( Alltrim( (Alias())->PICTURE ) ) ) cPicture := Replicate("X", 180) lRet := .F. ELSE cPicture := Alltrim( (Alias())->PICTURE ) ENDIF oBrw_2:aColumns[4]:cPicture := cPicture RETURN lRet Спасибо БОЛЬШОЕ Haz !

Andrey: А как сделать в этом примере, чтобы формат сразу отображался ?

Andrey: А, просто оказывается. oBrw_2:aColumns[3]:cPicture := { || Alltrim( (Alias())->PICTURE ) }

Andrey: Andrey пишет: А, просто оказывается. Не фига, не просто. После первой правки - форматы ВСЕ слетают... Как быть ?

Haz: Andrey пишет: Как быть Писать Григорию чтоб в TGetBox METHOD New вставил код if ValType( cPict ) == "B" cPict := Eval( cPict ) end ну или самому ручками т.к. TGetBox:New не понимает если пикча задана блоком, в то время как TsBrows при показе блоки глотает на ура

gfilatov2002: Haz пишет: TGetBox:New не понимает если пикча задана блоком Благодарю за наводку Поправил для следующей сборки...



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