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

SergKis: MMK пишет Правый клик по шапке и в меню. Убрал птичку -нет столбца. Поставил птичку - есть столбец ... избегаю такие режимы давать пользователю, предпочитаю дать ему возможность поставить галочки в вертикальном списке шапок и отметить нужные шапки, расположив в нужной последовательности, при необходимости сохранить как отчет с названиями и ... В дальнейшем работа это выбор отчета из списка. SergKis пишет т.е. достаточно сменить шапку и остальное не трогать, где то смысл есть в этом. Имел ввиду, что поля не вошедшие в таблицу отображаются рядом в вертикальной развертке (режим "карточка") и кликами можно переключать с табличного на "карточный" режим

Andrey: Хрень получается при очистке таблицы. Один раз чистит от записей, второй нет. Или я опять что то не то делаю. Команда oBrw1:DeleteRow( .T. ) делает полную очистку таблицы для SetArrayTo() ? Ещё что-то нужно делать для очистки таблицы ? Вывожу таблицу (функция допустим TsbView(aDim,.F.) ) первый раз с условиями (допустим код колонки 7 < 11) . На чекбокс делаю показ этой же самой функции в зависимости от чекбокса TsbView(aDim,lFilter). Если чекбокс равет .T. то показываю записи - код колонки 7 == 11. При повторном показе записей в таблице остаются записи от первого показа + новые. Если ещё раз кликнуть чекбоксом, записи в таблице прибавляются... Почему ? Я же делаю для SetArrayTo() : [pre2] oBrw1:DeleteRow( .T. ) // Delete All oBrw1:Reset()[/pre2] и только потом делаю добавление построчно: [pre2]oBrw1:AddItem( aRows[1] ) [/pre2] ---- P.S. И первый раз не чистит. Кажись если колонки удалили - оператор oBrw1:DeleteRow( .T. ) перестаёт работать ...

gfilatov2002: Andrey пишет: что-то нужно делать для очистки таблицы ? Посмотри рабочий пример ниже [pre2] #include "minigui.ch" #include "tsbrowse.ch" Procedure Main () Public oBrw1 Public aDatos_origen DEFINE WINDOW Form1 ; AT 0,0 ; WIDTH 640 ; HEIGHT 480 ; TITLE "TsBrowse Array Test" ; MAIN ; FONT 'Tahoma' SIZE 9; ON INIT Sample1() END WINDOW ACTIVATE WINDOW Form1 RETURN *-------------------------------------------------------------- Function Sample1() Local bColor := { || If( Val(oBrw1:aArray[oBrw1:nAt,4]) < 200, CLR_RED, CLR_WHITE ) } aDatos_origen := {} AADD( aDatos_origen, {"Ena ", "Art01", "Mod01", "200"} ) AADD( aDatos_origen, {"Dyo ", "Art02", "Mod01", "200"} ) AADD( aDatos_origen, {"Tria ", "Art03", "Mod01", "200"} ) AADD( aDatos_origen, {"Tessera ", "Art04", "Mod01", "200"} ) AADD( aDatos_origen, {"Pente ", "Art05", "Mod01", "200"} ) AADD( aDatos_origen, {"Exi ", "Art06", "Mod01", "200"} ) AADD( aDatos_origen, {"Epta ", "Art07", "Mod01", "200"} ) AADD( aDatos_origen, {"Okto ", "Art08", "Mod01", "200"} ) AADD( aDatos_origen, {"Ennea ", "Art09", "Mod01", "100"} ) AADD( aDatos_origen, {"Deka ", "Art10", "Mod02", "200"} ) AADD( aDatos_origen, {"Enteka ", "Art11", "Mod02", "200"} ) AADD( aDatos_origen, {"Dodeka ", "Art12", "Mod02", "200"} ) AADD( aDatos_origen, {"Dekatria ", "Art13", "Mod02", "200"} ) AADD( aDatos_origen, {"Dekatessera ", "Art14", "Mod02", "200"} ) AADD( aDatos_origen, {"Dekapente ", "Art15", "Mod02", "200"} ) AADD( aDatos_origen, {"Dekaexi ", "Art16", "Mod02", "200"} ) AADD( aDatos_origen, {"Dekaepta ", "Art17", "Mod02", "200"} ) AADD( aDatos_origen, {"Dekaokto ", "Art18", "Mod02", "200"} ) DEFINE TBROWSE oBrw1 ; AT 60,10 ; OF Form1 ; WIDTH 330 ; HEIGHT 340 ; FONT "Verdana" ; SIZE 9 ; GRID oBrw1:SetArray( aDatos_origen ) ADD COLUMN TO TBROWSE oBrw1 ; DATA ARRAY ELEMENT 1; TITLE "Rubro" SIZE 120 ADD COLUMN TO TBROWSE oBrw1 ; DATA ARRAY ELEMENT 2; TITLE "Articulo" SIZE 80 ADD COLUMN TO TBROWSE oBrw1 ; DATA ARRAY ELEMENT 3; TITLE "Marca" SIZE 80 ADD COLUMN TO TBROWSE oBrw1 ; DATA ARRAY ELEMENT 4; TITLE "M" SIZE 30 ; COLORS CLR_BLACK, bColor oBrw1:lNoVScroll := .t. End TBROWSE oBrw1:Refresh(.T.) @ 110,355 BUTTON Button_1 OF Form1; CAPTION "Change"; ACTION Change() ; WIDTH 80; HEIGHT 28 ; FONT "Arial" SIZE 9 RETURN Nil Function Change() Local aArray := {}, n AADD( aArray, {"Ena ", "Art01", "Mod01", "200"} ) AADD( aArray, {"Dyo ", "Art02", "Mod01", "200"} ) AADD( aArray, {"Tria ", "Art03", "Mod01", "200"} ) AADD( aArray, {"Tessera ", "Art04", "Mod01", "200"} ) AADD( aArray, {"Pente ", "Art05", "Mod01", "200"} ) AADD( aArray, {"Exi ", "Art06", "Mod01", "200"} ) AADD( aArray, {"Epta ", "Art07", "Mod01", "200"} ) AADD( aArray, {"Okto ", "Art08", "Mod01", "200"} ) AADD( aArray, {"Ennea ", "Art09", "Mod01", "100"} ) AADD( aArray, {"Deka ", "Art10", "Mod02", "200"} ) oBrw1:aArray:={} for n:=1 to len(aArray) ADD ITEM aArray[n] TO oBrw1 OF Form1 next oBrw1:Refresh(.T.) Return Nil [/pre2] Надеюсь, что вопросы по очистке массива отпадут


SergKis: gfilatov2002 пишет По итогу обсуждения добавил такие строки наверно надо добавить в :DelColumn и удаление элементов из ::aJustify и ::aDefValue

gfilatov2002: SergKis пишет: надо добавить в :DelColumn Благодарю за помощь Добавил эти массивы и убрал лишние проверки, как предложил ранее Петр...

Andrey: gfilatov2002 пишет: Надеюсь, что вопросы по очистке массива отпадут Точно, не хватало oBrw1:aArray:={} !!! Это называется - нужно учить матчасть...

ММК: Haz пишет: Так это я к тому, если бы я прятал колонки, то сколько мне их нужно было заранее держать в бровсе Извините , виноват . Мне надо было сразу написать, что это пример на FW. А там это просто опция бровса ( встроенная ), как поиск, фильтр, экспорт в эксель.... ну и много еще что :)) Выложил просто в виде подсказки ( как вариант) , как в будущем можно будет доработать ( или переписать ) бровс Думаю Сергей прав - удобнее работать с столбцами на уровне шапки.

Andrey: Осталась мелочёвка по SetArrayTo(): 1) Пропадает нижняя стрелка в строке скролинга: 2) Отключаю показ горизонтального скролинга, а он всё равно отображается: 3) Не убирается дырка внизу таблицы (один раз срабатывает, второй нет). Может быть из за показа горизонтального скролинга ? 4) В конце функции делаю фокус на таблицу. Не срабатывает ! Вот код в конце функции, которая выводит SetArrayTo(): [pre2] oBrw1:HideColumns( {6,7,8} ,.t.) // скрыть колонки oBrw1:Reset() oBrw1:SetNoHoles(2) oBrw1:lNoHScroll := .T. // нет показа горизонтального скролинга oBrw1:Display() oBrw1:Refresh(.T.) // перечитывает данные в таблице oBrw1:GoPos(1,4) // передвинуть МАРКЕР на Х строку и Х колонку ItogoNN(oBrw1) oBrw1:SetFocus() [/pre2] Что не так делаю ?

Dima: Andrey пишет: Что не так делаю ? Спишь мало Проспись и все получится !

SergKis: Dima пишет Проспись и все получится ! Возможно ты уже поборол такую ситуевину ? У меня получилось так [pre2] DEFINE TBROWSE &cBrw ; AT 1 + iif( IsVistaOrLater(), GetBorderWidth()/2, 0 ), ; 1 + iif( IsVistaOrLater(), GetBorderHeight()/2, 0 ) ; OF &cForm ; WIDTH ThisWindow.WIDTH - 2 * GetBorderWidth() ; HEIGHT ThisWindow.HEIGHT - GetTitleHeight() - ; This.StatusBar.Height - 2 * GetBorderHeight() ; // ENUMERATOR ; FONT cFontName SIZE nFontSize ; GRID // EDIT oBrw := _HMG_aControlIds [ GetControlIndex(cBrw, cForm) ] oBrw:Hide() aFontHF := aFont[2] // bold Header, Footer oBrw := SetArrayTo( cBrw, cForm, aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName ) WITH OBJECT oBrw :aColumns[1]:nAlign := DT_CENTER :aColumns[2]:nAlign := DT_CENTER :aColumns[3]:nWidth += 20 // колонку даты расширили :aColumns[4]:nAlign := DT_RIGHT AEval(:aColumns, {|oc| oc:lEmptyValToChar := .T. }) :lNoHScroll := .T. :nWheelLines := 1 :nClrLine := COLOR_GRID :nHeightCell += 5 :nHeightHead += 5 IF ! Empty( aFoot ) :nHeightFoot += 5 ENDIF IF :lEnum :nHeightSpecHd := :nHeightCell ENDIF END WITH MyTsbColor( oBrw ) END TBROWSE oBrw:SetNoHoles() oBrw:Show() oBrw:SetFocus() _PushKey(VK_PRIOR) [/pre2] или отказаться от :lNoHScroll := .T.

SergKis: Andrey пишет Отключаю показ горизонтального скролинга, а он всё равно отображается: При первом отображении тсб, у него нет HScroll, после переформирования array, он проявляется и не убирается, потому получается дырка. Т.к. колонок больше экрана, то смысла убирать HScroll нет. Если поставить oBrw1:lNoVScroll := .F. // TRUE oBrw1:lNoHScroll := .F. // нет показа горизонтального скролинга то дырки не будет. В данном случае логично работать с HScroll.

SergKis: PS oBrw1:oHScroll := Nil не помогает, HScroll проявляется

Andrey: Всем привет ! Сделал менюшку показа адреса через COMBOBOX. Выбор города, улицы, номер дома - отлично показывается. А список квартир бывает большой, листать юзеру неудобно будет. Решил переделать через SetArrayTo() Можно ли убрать показ заголовка таблицы и как ?

SergKis: Andrey пишет Можно ли убрать показ заголовка таблицы и как ? 1. DATA lDrawHeaders AS LOGICAL INIT .T. // condition for headers drawing DATA lDrawFooters // condition for footers drawing 2. сделать высоту header, footer в пару пикселей, если они цветные , будут полоски.

Andrey: Сделал менюшку показа списка квартир через SetArrayTo(). Вроде красивенько получилось. А как можно закрасить Tsbrowse в "шашечку" ? Ну чтобы была как шахматная доска. Это не для показа юзеру, просто для себя. У себя раскраску делаю так: [pre2] // ---- cтавим по всем колонкам ----( oCol:nClrBack = oBrw:SetColor( {2} ...) ---- AEval(oBrw1:aColumns, {|oCol| oCol:nClrBack := { |a,b,o| a:=b, MyColorTsb( o:nAt ) } } ) ........... //////////////////////////////////////////////////////////// STATIC FUNCTION MyColorTsb(nAt) LOCAL nColor IF nAt % 2 == 0 nColor := CLR_HGRAY ELSE nColor := CLR_WHITE ENDIF RETURN nColor[/pre2]Вот что получается:

SergKis: Andrey пишет А как можно закрасить Tsbrowse в "шашечку" ? Ну чтобы была как шахматная доска 1. переведи на русский (словами) из функции[pre2] IF nAt % 2 == 0 nColor := CLR_HGRAY ELSE nColor := CLR_WHITE ENDIF [/pre2] 2. также словами напиши\расшифруй "шахматная доска" Получишь ответ, как сделать

Andrey: SergKis пишет: 2. также словами напиши\расшифруй "шахматная доска" Выбор по ячейки - четная/не четная. Не знаю как вместо nAt указать ячейку. Пробовал ставить oBrw1:nCell - не получается.

Haz: Andrey пишет: У себя раскраску делаю так: // ---- cтавим по всем колонкам ----( oCol:nClrBack = oBrw:SetColor( {2} ...) ---- AEval(oBrw1:aColumns, {|oCol| oCol:nClrBack := { |a,b,o| a:=b, MyColorTsb( o:nAt ) } } ) Андрей, а сможешь объяснить выделенное красным в твоем коде ? Возможно когда сможешь ,то и шахматка получится

Andrey: Haz пишет: Андрей, а сможешь объяснить выделенное красным в твоем коде ? Это делалось для того, чтобы компиляция проходила. Без этого ехе-ник не собирается. Я использую ключи при компиляции: -prgflag=-w2 -es2 Сделал ранее так и забыл... Понял в какую сторону нужно глядеть. Спасибо !

Haz: Andrey пишет: Это делалось для того, чтобы компиляция проходила. Тогда тебе повезло, что бровс не реагирует на присвоение значения в ::nAt, кстати ты не так давно огорчался по этому поводу



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