Форум » 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: SergKis пишет: Что конкретно (какое место) трудно читается ? Хочется знать, что бы пояснить. Не могу использовать его для своего случая. Свой код привел выше. Как его модифицировать ?

SergKis: Andrey пишет Не могу использовать его для своего случая Ты даже не попробовал разобраться. Как его модифицировать ? Сделай 2а массива 1-ый используй при создании тсб 2-ой на замену (без изм. nWidth колонок), у меня он aArray в AgeReport

Andrey: Правлю свои таблицы. До этого сделал временно и оставил. Как сделать авторасширение всех столбцов таблицы чтобы справа фантомного столбца не было видно ? Что-то ранее видел, но не успел попробовать. Читал про oBrw:lAdjColumn := .T. и oBrw:AdjColumns() Не совсем понял как их применять ?


SergKis: Andrey С тек. версии hmg стало 2а алгоритма по растягиванию колонок - :AdjColumns() // если ширина всех колонок < ширины тсб, - :lAdjColumn := .F.\.T. // если есть горизонтальный скролинг колонок, при .T. предпоследняя колонка растягивается до конца ширины тсб, если последняя не вмещается

Andrey: Спасибо ! :AdjColumns() - отработал очень хорошо. :lAdjColumn := .F.\.T. - никак не отработал, хотя версия 19.08 (Update 1)

Andrey: Всем привет ! Что то опять бровс чудит. Вот такая ошибка: [pre2]Error BASE/1004 Message not found: NIL:GOTO --------------------------------- Stack Trace --------------------------------- Called from __ERRRT_SBASE(0) Called from NIL:ERROR(0) Called from (b)HBOBJECT(0) Called from NIL:MSGNOTFOUND(0) Called from NIL:GOTO(0) Called from LOADSITEPASSDIM(236) in module: Source\form_transferM1pass.prg Called from MYINITM1SITEPASS(129) in module: Source\form_transferM1pass.prg [/pre2] Куда копать ?

SergKis: Andrey пишет Error BASE/1004 Message not found: NIL:GOTO Ты потерял объект oBrw в переменной NIL:GOTO

Andrey: Всем привет ! А можно сделать выгрузку всего объекта бровса на диск в файл, а потом в другой программе просто загрузить этот файл ? Именно весь, с цветами, полями, значениями и т.д. Это нужно для небольших таблиц. Типа такого:[pre2] TsbrowseSave( M->oBrw3, "fileBrw3.obrw" ) TsbrowseRestore( "fileBrw3.obrw", M->oBrw3 )[/pre2] P.S. Можно и без цветов для начала.

SergKis: Andrey пишет Именно весь, с цветами, полями, значениями и т.д. Поиграйся ф-ями объкта ( А.Кресин http://www.kresin.ru/hrbfaq_3.html#Doc3 ) Далее следует список функций для манипуляции классами и объектами: смотрим и пробуем + ф-ии сохранения\восстановления блоков кода (забыл названия в ночи, но тема была где то) или организовывать их строковое представление для сохранения\восстановления

Andrey: SergKis пишет: смотрим и пробуем Я до сих пор так и не пользуюсь классами... Раньше считал что не особо нужно, потом уже мозги не те, не понимаю как ими пользоваться. Начинал с твоей помощью, так и забросил.

SergKis: PS При исп. :SetArrayTo(...) сохраняй\восстанавливай массивы - уже практичечки все готово, делай В примере о курсах валют от ЦБ РФ (во флайме) у меня сделано [pre2] DEFINE TBROWSE oBrw AT nY, nX ALIAS cAlias WIDTH nW HEIGHT nH GRID ; FONT { "Normal", "Header", "Footer" } ; COLORS { CLR_BLACK, CLR_BLUE } ; HEADERS { "Char;Code", "Num;Code", "Name" , "Nominal", "Value" } ; COLSIZES { 40 , 40 , 250 , 50 , 50 } ; PICTURE { , , "@R "+Repl('X',50), , } ; JUSTIFY { DT_CENTER , DT_CENTER , DT_LEFT , DT_CENTER, DT_CENTER } ; COLUMNS { "CHARCODE" , "NUMCODE" , "NAME" , "NOMINAL", "VALUE" } ; COLNAMES { "CHAR" , "NUM" , "NAME" , "NOM" , "VAL" } ; FOOTERS { "Char;Code", "Num;Code", "Name" , "Nominal", "Value" } ; BRUSH { 255, 255, 240 } ; LOADFIELDS FIXED :InsColumn( 1, oColsData( cAlias ):Get('OrdKeyNo') ) // колонку # добавили :GetColumn( 1 ):nWidth := 30 :nCell := 2 :nFreeze := 1 :lLockFreeze := .T. :nHeightFoot := :nHeightCell :nHeightCell += 4 :nClrLine := RGB(180,180,180) // COLOR_GRID // :SetColor( { 11 }, { { || RGB( 255, 255, 255 ) } } ) :SetColor( { 11 }, { { || RGB(0,0,0) } } ) :SetColor( { 2 }, { { || RGB(255,255,240) } } ) :SetColor( { 5 }, { { || RGB(0,0,0) } } ) :SetColor( { 6 }, { { |a,b,c| iif( c:nCell == b, -CLR_HRED , -RGB(128,225,225) ) } } ) :SetColor( { 12 }, { { |a,b,c| iif( c:nCell == b, -RGB(128,225,225), -RGB(128,225,225) ) } } ) :AdjColumns() END TBROWSE [/pre2] Тоже практически все готово для save\restore (кроме блоков кода цветов) Цветом выделена строка (как пример), которая есть в ch файле, но нет в программе из флайма

Andrey: Дали задачку, создать таблицу и экспортировать его в Эксель. Вопрос возник, как делать ? Писать в Dbf-файл, а потом показывать в бровсе или сразу делать через массив с помощью SetArrayTo(). Что будет быстрей по скорости для Экспорта ? База небольшая, 2500-3000 записей, кол-во столбцов примерно 50 штук.

Haz: Andrey пишет: Что будет быстрей по скорости Само собой чтение массива быстрее чем чтение файла dbf. Но это ничтожная разница по сравнению с самим экспортом.

Andrey: Спасибо ! А какая разница будет по времени по экспорту из DBF и SetArrayTo() ? Всё равно данные уже в бровсе. Я думаю что в SetArrayTo() быстрей будет строится (так всегда делаю). Но интересно знать бы насколько быстрей...

Andrey: А как отсортировать SetArrayTo() по колонке дата только в обратном порядке ? В обычном знаю:[pre2] // --------- функции сортировки колонок --------- oBrw:nColOrder := oBrw:nColumn("FDATE")[/pre2]

SergKis: Andrey Добавь или поправь (Advanced\Tsb_array_2\demo.prg)[pre2] ... oBrw:lNoChangeOrd := .F. END TBROWSE [/pre2] Делай двойной click на заголовке колонки, сортировка будет тудой-сюдой

Andrey: SergKis пишет: Делай двойной click на заголовке колонки, сортировка будет тудой-сюдой Нельзя, нужно сразу юзеру таблицу предоставить отсортированной по дате в обратном порядке. Спасибо !

Andrey: А как в SetArrayTo() удалять строки в таблице. На отдельную кнопку повесил функцию удаления TsbDeleteMemo() , не работает. [pre2] IF MG_YesNo( cMsg, , "Удаление записи" ) oStatBrw:DeleteRow( ) // Delete selected row oStatBrw:Reset() oStatBrw:SetOrder(3, , .T. ) // сортировка по столбцу ItogoNN(oStatBrw) // GetColumn("NN") oStatBrw:Refresh(.T.) ENDIF[/pre2] Если подключить следующий код: [pre2] // --------- блок удаления записи --------- bDelete := { | nAt, oBrw | nAt:=nil, ItogoNN(oBrw) } // отрабатыват после DEL !!! oBrw:SetDeleteMode( .T., .F., bDelete ) // так включаем клавишу DEL !!![/pre2] То удаление работает, но у меня отдельные проверки в TsbDeleteMemo(), при некоторых условиях удалять запись НЕЛЬЗЯ ! Как запретить удаление по клавише DEL и оставить отдельную кнопку удаления ?

SergKis: Andrey пишет Как запретить удаление по клавише DEL и оставить отдельную кнопку удаления ? Делай массив (строка) на несколько элементов больше (по потребности). К примеру 2 доп. элемента 1 .T.\.F. - можно ли удалять 2 RecNo() в таблице dbf из которой создавался массив (для внесения изменений из массива в dbf) Тогда в массиве Head пишешь только нужные колонки без 2х последних На кнопку и в bDelete пишешь ф-ю, которая контролирует можно ли удалять (предпоследний элемент строки\записи массива) и далее удаляешь или нет

Andrey: SergKis пишет: 2 RecNo() в таблице dbf из которой создавался массив (для внесения изменений из массива в dbf) Тогда в массиве Head пишешь только нужные колонки без 2х последних На кнопку и в bDelete пишешь ф-ю, которая контролирует можно ли удалять (предпоследний элемент строки\записи массива) и далее удаляешь или нет Нет вообще DBF, чистый массив из мемо-поля. Допустим написал отдельную функцию проверки - CheckDel(), возвращает T.\.F. - можно ли удалять Как её использовать в коде ? [pre2] // --------- блок удаления записи --------- bDelete := { | nAt, oBrw | nAt:=nil, ItogoNN(oBrw) } // отрабатыват после DEL !!! oBrw:SetDeleteMode( .T., .F., bDelete ) // так включаем клавишу DEL !!![/pre2]



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