Форум » 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: Andrey смотри METHOD DeleteRow( lAll ) CLASS TSBrowse там для dbf, array удаление, как работает :bDelete Нет вообще DBF, чистый массив из мемо-поля. 2е колонки я давал для примера, добавляй одну для .T.\.F. и читай ее в bDelete, если .T., к примеру, удалять можно, если .F., то нельзя. Т.е. возвращай это значение из блока bDelete

Andrey: SergKis пишет: если .F., то нельзя. Т.е. возвращай это значение из блока bDelete Спасибо ! Получилось методом тыка ! [pre2] // --------- блок удаления записи --------- bDelete := { | nAt, oBrw, lDel | nAt:=nil, lDel := TsbDostupMemo(oBrw), ItogoNN(oBrw), lDel } oBrw:SetDeleteMode( .T., .F., bDelete ) // так включаем клавишу DEL !!! [/pre2]

Andrey: Всем доброго утра ! Сделал рабочий код для SetArrayTo(): [pre2] oBrw:aColumns[2]:bPostEdit := {|xVal | xVal := oBrw:aArray[oBrw:nAt][oBrw:nCell] ,; xVal := CharRepl( "|\", xVal, " " ) ,; oBrw:aArray[oBrw:nAt][oBrw:nCell] := xVal } [/pre2] А по другому написать можно это действие ? И как сделать такое же действие для Dbf


SergKis: Andrey пишет А по другому написать можно это действие ? oBrw:aColumns[2]:bPostEdit := {|xv,ob,ncol| xv := CharRepl("|\", xv, " "), ob:SetValue(ncol,xv) } И как сделать такое же действие для Dbf Есть методы и ты их использовал в своих примерах, но подзабыл xVal := oBrw:GetValue(nCol) oBrw:SetValue(nCol, xVal)

SergKis: PS В качестве nCol (номера колонки) могут быть и имена колонок, т.е. xVal := oBrw:GetValue("FDATE") oBrw:SetValue("FDATE", xVal)

Andrey: Фонты не работаю в SetArrayTo() Нашёл по хелпу типов таблицы: [ CELL | CELLED | GRID ] - а разница в чём между ними... Как тогда для SetArrayTo() использовать фонты чтобы всегда работало ? Фонты использую так:[pre2] cTbrName := "oBrwTxt" DEFINE TBROWSE &cTbrName ; AT nY, nX ; WIDTH nW ; HEIGHT nH ; GRID ; // это oBrw:lCellBrw := TRUE EDIT // все колонки с lEdit := .T. END TBROWSE // cell, head, foot aFont := { GetFontHandle("Italic"), GetFontHandle("Bold"), GetFontHandle("Norm") } // создаём таблицу из массива oBrw := SetArrayTo( cTbrName, "test", aArray, aFont, aHead,; aSize, aFoot, aPict, aAlign, aName )[/pre2] Можно на лету изменять типы таблицы ?

SergKis: Andrey Может повнимательнее посмотришь на исп. SetArrayTo() с фонтами Tsb_array_2\demo.prg[pre2] // hFontHead := aFont[1] // normal Header // hFontFoot := aFont[2] // bold Footer // aFontHF := { hFontHead, hFontFoot } // aFontHF := aFont[1] // normal Header, Footer aFontHF := aFont[2] // bold Header, Footer oBrw := SetArrayTo( "oBrw", "test", aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName ) [/pre2] в aFontHF мах 2а элемента, если задан не массивом, то это один handle font для Header и Footer 1 handle font Header 2 habdle font Footer Для строк в DEFINE TBROWSE ... есть FONT cFontName SIZE nFontSize Если вместо имени хочешь исп. handle font, то это переносится после DEFINE TBROWSE ... в уст. свойства объекта oBrw:hFont := GetFontHandle(cFontName)

SergKis: PS Твой вариант должен выглядеть, к примеру так[pre2] DEFINE FONT Italic FONTNAME "DejaVu Sans Mono" SIZE 11 BOLD ITALIC DEFINE FONT Norm FONTNAME _HMG_DefaultFontName SIZE _HMG_DefaultFontSize DEFINE FONT Bold FONTNAME _HMG_DefaultFontName SIZE _HMG_DefaultFontSize BOLD ... aFont := { GetFontHandle("Bold"), GetFontHandle("Norm") } ... cTbrName := "oBrwTxt" DEFINE TBROWSE &cTbrName OBJ oBrw ; AT nY, nX ; WIDTH nW ; HEIGHT nH ; FONT "Italic" ; CELL /*GRID*/ ; // это oBrw:lCellBrw := TRUE EDIT // все колонки с lEdit := .T. mySetTsb(oBrw) :SetArrayTo( aArray, aFont, aHead, aSize, aFoot, aPict, aAlign, aName ) :AdjColumns() END TBROWSE ON END {|obr| obr:SetNoHoles(), obr:SetFocus() } ... [/pre2]

Andrey: SergKis пишет: Твой вариант должен выглядеть, к примеру так Спасибо ! Дошло наконец то до меня... Может в примере demo3.prg показать под комментариями:[pre2] /* 1 вариант написания aFont := { "Italic", "Bold", "Norm" } // cell, head, foot DEFINE TBROWSE oBrw ; AT nY, nX ALIAS aArray WIDTH nW HEIGHT nH CELL ; FONT aFont ; BRUSH { 255, 255, 240 } ; HEADERS aHead ; COLSIZES aSize ; PICTURE aPict ; JUSTIFY aAlign ; COLNAMES aName ; COLNUMBER { 1, 40 } ; COLUMNS aField ; FOOTERS aFoot ; FIXED ADJUST COLEMPTY ; ENUMERATOR ; EDIT GOTFOCUSSELECT mySetTsb( oBrw ) myColorTsb( oBrw ) END TBROWSE ON END {|ob| ob:SetNoHoles(), ob:SetFocus() } */ // 2 вариант написания aFont := { GetFontHandle("Bold"), GetFontHandle("Norm") } // head, foot cTbrName := "oBrwTxt" DEFINE TBROWSE &cTbrName OBJ oBrw ; AT nY, nX ; WIDTH nW ; HEIGHT nH ; FONT "Italic" ; // cell CELL /*GRID CELLED */ ; EDIT // все колонки с lEdit := .T. mySetTsb(oBrw) :SetArrayTo( aArray, aFont, aHead, aSize, aFoot, aPict, aAlign, aName ) :AdjColumns() END TBROWSE ON END {|obr| obr:SetNoHoles(), obr:SetFocus() } [/pre2] Попробовал компилировать пример demo3.prg с CELL /*GRID CELLED */ ; Не увидел разницы. На внешний вид таблицы одинаковые. Зачем такое разнообразие ?

Haz: Andrey пишет: А какая разница будет по времени по экспорту из DBF и SetArrayTo() ? Всё равно данные уже в бровсе. Не хотел отвечать, но надо для всех. Что значит данные в бровсе? Если это бровс по массиву, то да, массив передаётся в бровс. Если по базе, то рабочая область передаётся в бровс. Следует изучить наконеец исходники бровса, чтобы понять - бровс только рисует на экране окно данных и все. И сам бровс через свои методы может читать только текущую запись или строку массива, при этом выполняя очень много технических операций ( прорисовка, скрытые столбцы, блоки выборки данных и пр.) Если говорить о том., что данные получаем средствами бровса, то это значит что тратиться время на все эти операции и это в разы дольше прямой выборки из источника. Всё примеры типа tsb_export показавают только возможность работы с источником данных методами бровса, но ценой производительности. Разница в скорости между массивом и дбф в разнице доступа к элементу массива и полю базы, дальше математика, сколько запросов во столько раз умножение. И на закуску, SetArrayTo это всего лишь метод, позволяющий удобно инициализировать бровс по МАССИВУ. Это как что быстрее работает с дбф МиниГуи или харбур? Андрей, Вами проделана огромная работа по подготовке примеров новичкам, но такие речевые обороты сносят мозг тем же новичкам напрочь. Будьте внимательнее, хотя-бы на правах ветерана этого форума

Andrey: Спасибо за пояснения. Я это и хотел услышать и для других тоже !

Andrey: видишь суслика нет и я не вижу а он есть Использую последнюю версию МиниГуи 20.04 Сделал отдельный модуль .prg - работает отлично. Таблица просто загляденье, столбики цветом подсвечены, шапка и подвал есть. Добавляю его к себе в большой проект, просто его копирую в папку проекта и добавляю его в МуПроект.hbp После сборки тестирую эту менюшку. Таблица есть, шапка есть, а подвала НЕТ !!! Вместо него дырка и всё... Кто шаманский бубен продаст ?

Andrey: Andrey пишет: Таблица есть, шапка есть, а подвала НЕТ !!! Разобрался я с этой загадкой. Как сделать это научился, а как исправить нет ! По коду это происходит так: [pre2] .... aRet := myMenu(...) // отдельный prg, в нём 2 тсб, где указываю :nHeightFoot := 0 // высота подвала таблицы .... // работа с базой .... myTsb(...) // отдельный prg, в нём тсб, где указываю :nHeightFoot := 30 ...[/pre2] Вот так подвал в myTsb(...) не показывается. Если в myMenu(...) поставить :nHeightFoot := 10, то и в myTsb(...) будет 10 и больше не делается. Почему ?

Dima: Andrey пишет: Почему ? Объект тсб по разному хоть называется ?

SergKis: Andrey пишет:Почему ? Видимость переменной тсб Public ?

Andrey: Dima пишет: Объект тсб по разному хоть называется ? SergKis пишет: Видимость переменной тсб Public ? [pre2] Для myMenu(...) LOCAL oBrw1, oBrw2, cTbrName1, cTbrName2 ... ///////////////////// первая таблица //////////////////////////////// aDatos := CreateDatosAdres() aArray := aDatos[ 1 ] ..... cTbrName1 := "oBrwTxt1" DEFINE TBROWSE &cTbrName1 OBJ oBrw1 ; ... :SetArrayTo( aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName ) :AddSuperHead(1, 2, "Выбор адреса" ) // суперхидер :aColumns[2]:lEdit := .F. // НЕ редактировать mySetTsb( oBrw1 ) TsbColor( oBrw1, , , , , ) ... ///////////////////// вторая таблица //////////////////////////////// aDatos := CreateMonthYears() aArray := aDatos[ 1 ] ..... cTbrName2 := "oBrwTxt2" DEFINE TBROWSE &cTbrName2 OBJ oBrw2 ; .... :SetArrayTo( aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName ) :AddSuperHead(1, 3, "Выбор месяца/года" ) // суперхидер mySetTsb( oBrw2 ) TsbColor( oBrw2, , , , , ) .... Для myTsb(...) LOCAL oBrw, .... DEFINE TBROWSE oBrw ; ... mySetTsb( oBrw ) // настройки таблицы myColorTsb( oBrw ) // цвета на таблицу mySumTsb( oBrw ) // суммирование колонок таблицы myColorTsbElect( oBrw ) // цвета избранные [/pre2]

SergKis: Andrey Поставь значения в myMenu() oBrw1:lFooting := .F. и oBrw1:lDrawFooters := .F. oBrw2:lFooting := .F. и oBrw2:lDrawFooters := .F. в myTsb() oBrw:lFooting := .T. и oBrw:lDrawFooters := .T. oBrw:nHeightFoot := 30 Что получишь ?

Andrey: SergKis пишет: Что получишь ? Нет подвала ! Наверное нужно отдельный пример делать...

Andrey: Разобрался я с этой загадкой !!! Опять моя ошибка. [pre2] aRet := myMenu(...) // отдельный prg, в нём 2 тсб, где указываю :nHeightFoot := 0 // высота подвала таблицы myTsb(...) // отдельный prg, в нём тсб, где указываю :nHeightFoot := 30 [/pre2] В обоих отдельных prg есть одинаковая функция. [pre2]FUNCTION mySetTsb() .......[/pre2] Забыл сделать в обоих случаях STATIC FUNCTION mySetTsb() А при сборке проекта линковщик-зараза, ошибку не выдавал ! Сейчас заработало !

SergKis: Andrey пишет В обоих отдельных prg есть одинаковая функция. FUNCTION mySetTsb() Эта функция + myColorTsb() были специально оставлены FUNCTION, чтобы применять во всех тсб. mySetTsb() - задание общих переменных для всех тсб myColorTsb() - задание общих цветов тсб, что бы выглядели одинаково на всех окнах Все частные установки для тсб конкретного окна, делаешь в STATIC FUNCTION своего prg файла К примеру mySet_Tsb() - задание значений переменных для конкретного тсб myColor_Tsb() - задание значений цветов для конкретного тсб



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