Форум » 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: Понял... Спасибо ! Кстати насчёт Tsb_config. Можно исправить ( класс oBrw:Excel2(...) h_tbrowse.prg) вывод чисел ? Если использовать для вывода в таблице формат "999" или "@Z 999", то в Экселе колонка с числами - пустая. В Tsb_config пришлось ставить: IF aPole[nI,6] <> "N" // не использовать шаблон для числовых полей, т.к. // при печати в Excel поле будет пустое !!! oBrw:aColumns[nJ]:cPicture := aPole[nI,4] // шаблон колонки ENDIF Сейчас такая же беда в рабочих программах....

Andrey: Ещё вопрос созрел по Tsbrowse. Как можно запретить юзеру смену колонок местами, но оставить возможность юзеру изменить размеры колонок ? Нашёл флаги: oBrw:lNoMoveCols := TRUE oBrw:lMChange := .F. Но они запрещают и изменение размеров колонок...

Haz: Andrey пишет: Как можно запретить юзеру смену колонок местами Простого способа похоже нет -или менять исходник , вводя и контролируя новые флаги -или на ON DRAW повесить процедуру, которая будет проверять нужный порядок колонок и приводить его в норму если юзер там чего поменял Посмотрел исходник и нашел один костыль ... Если у колонки есть суперхидер то размеры менять можно , а двигать нельзя. Сделай один суперхидер на все колонки с высотой 0 и будет тебе счастье ( правда супрхид будет не нулевой высоты )


Andrey: Haz пишет: Если у колонки есть суперхидер У меня есть он в программе. Haz пишет: нашел один костыль Какой он и как его использовать ?

Haz: Andrey пишет: Какой он и как его использовать ? читай по слогам Если у колонки есть суперхидер то размеры менять можно , а двигать нельзя. Сделай один суперхидер на все колонки с высотой 0 и будет тебе счастье

Andrey: Суперхидер в таблице есть с 1 по 13 колонки высотой 38. Колонки местами меняются. Ставлю запрет на обмен колонками oBrw:lNoMoveCols := TRUE или oBrw:lMChange := .F. Колонки местами не меняются и нельзя уже изменить размер колонок !

Haz: Andrey пишет: Суперхидер в таблице есть. Убери его , и добавь только такой ( для колонки 1 ) oBrw:AddSuperHead( 1 , 1 , '' ) После этого все колонки перестанут меняться местами PS. Говорю же , это "костыль" На счет всех, я не прав, не проверял а на одну работает! Советую лучше сюда смотреть -или менять исходник , вводя и контролируя новые флаги -или на ON DRAW повесить процедуру, которая будет проверять нужный порядок колонок и приводить его в норму если юзер там чего поменял

Andrey: Понял ! Спасибо БОЛЬШОЕ ! Haz пишет: Советую лучше сюда смотреть -или менять исходник , вводя и контролируя новые флаги -или на ON DRAW повесить процедуру, которая будет проверять нужный порядок колонок и приводить его в норму если юзер там чего поменял Боюсь пока не осилить данное предложение. Опыта пока маловато...

Haz: Andrey пишет: Боюсь пока не осилить данное предложение. Опыта пока маловато. какой тут опыт нужен ? Используется имя колонки, если оно не присвоено - работать не будет [pre2] // Сохранения порядка колонок по их именам Func SaveColPos( oBrw ) Local aSave := {} aEval( oBrw:aColumns, { |oCol| AADD( aSave, oCol:cName ) } ) Return aSave // Восстановление порядка колонок по их именам Func RestColPos( oBrw, aSave ) aEval( aSave, { |cName| oBrw:MoveColumn( oBrw:nColumn(cName), Ascan( aSave, cName)) } ) Return nil [/pre2] При первой прорисовке бровса запоминаешь порядок в массив Проверку на соответствие текущего порядка и сохраненного в массиве уверен сделаешь. И если порядок нарушен по ON DRAW восстанавливаешь как oBrw:bOnDraw := {|| IF( ЕслиНарушен(), RestColPos( oBrw, aSave), NIL ) } Пользователь после этого может таскать колонки куда хочет, но при этом быстро устает т.к. они сразу возвращаются на место. PS. НЕ ПРОВЕРЯЛ , просто описал идею. Должна работать PPS проверку нужно в том же он драу поводить )))

Andrey: Всем привет. Как заменить ОДНУ картинку в уже созданной таблице ? Допустим есть LOCAL ahBmpPlus := { LoadImage( "bFolder48.bmp" ) } LOCAL ahBmpMinus:= { LoadImage( "bFolder48x2.bmp" ) } ..... // создать первую колонку с картинкой ADD COLUMN TO oBrwP HEADER "" ; DATA { || ahBmpPlus } ; SIZE 50 BITMAP ; ..... EDITABLE oBrwP:aColumns[1]:bPrevEdit := {|| MenuPlusMinus(ahBmpPlus,ahBmpMinus), FALSE } ............... Function MenuPlusMinus(ahBmpPlus,ahBmpMinus) ..... // вот здесь заменить одну картинку на другую. Как написать ?

Andrey: Всем привет ! Пытаюсь для отладки добавить в свой проект h_tbrowse.prg Не собирается проект: Error: Unresolved external '_HB_FUN_GETSYSMETRICS' referenced from W:\HB_PROJECT\ Откуда взять эту функцию GETSYSMETRICS ? Раньше собиралось всё нормально.

Dima: Andrey пишет: Откуда взять эту функцию GETSYSMETRICS ? в TSBROWSE.CH он заявлен

Andrey: Dima пишет: в TSBROWSE.CH он заявлен Положил этот файл в свой проект. Всё равно пишет, нет такой функции... P.S. Удалил все obj - проект собрался !

Andrey: Отлавливаю ошибку для SetArrayTo(). Вот такая ошибка: Error BASE/1122 Неверный аргумент: TRANSFORM Called from TRANSFORM(0) Called from TSBROWSE:DRAWLINE(2925) Called from TSBROWSE:PAINT(8713) Called from TSBROWSE:DISPLAY(2306) Called from _ENDTBROWSE(367) Called from CREATEBROWSEUSE(430) Лезу в исходник и хочу там установить просмотр. Как это сделать, чтобы ручками не считать какую строку ProcName(5) смотреть ? IF UPPER(ProcName( 5 )) == "CREATEBROWSEUSE" MsgDebug(uData, VALTYPE(uData), cPicture) ENDIF uData := If( uData == NIL, "", Transform( uData, cPicture ) )

Andrey: Странно, отладка работает ОДНУ строку из массива, а потом прога сваливается: Called from TRANSFORM(0) Called from TSBROWSE:DRAWLINE(2928) Called from TSBROWSE:PAINT(8701) Called from TSBROWSE:DISPLAY(2306) Called from _ENDTBROWSE(367) Called from CREATEBROWSEUSE(430) Called from FORM_USEDBF(220) ..... Else IF UPPER(ProcName( 5 )) == "CREATEBROWSEUSE" MsgDebug(uData, VALTYPE(uData), cPicture) ENDIF uData := If( uData == NIL, "", Transform( uData, cPicture ) ) // строка 2928 EndIf Как поймать ошибку ?

Dima: Andrey Сунь массив в MsgDebug и позырь что в нем живет.

Andrey: Dima пишет: Сунь массив в MsgDebug и позырь что в нем живет. Позырил... До этого смотрел, не увидел. Один элемент вместо строки - массив.... И как такие ошибки в будущем отлавливать ? Может проверку какую сделать в самом исходнике ? Function SetArrayTo( ControlName, ParentForm, Arr, uFontHF, aHead, aSizes, uFooter, aPicture, aAlign, aName ) Local ix, oBrw ix := GetControlIndex (ControlName,ParentForm) oBrw:= _HMG_aControlIds [ix] oBrw:SetArrayTo(Arr, uFontHF, aHead, aSizes, uFooter, aPicture, aAlign, aName) Return oBrw

Dima: Andrey пишет: И как такие ошибки в будущем отлавливать ? Чрезмерно не косячить при написании

Andrey: Привет всем... Делаю новую таблицу на Tsbrowse. Ширину таблицы меняю в зависимости от окна, как Tsb_config. DEFINE WINDOW Form_0 AT 0,0 WIDTH nDesktopWidth HEIGHT nDesktopHeight ; MINWIDTH 780 MINHEIGHT 500 ; .......... WINDOWTYPE STANDARD TOPMOST ; ........ ON SIZE { || ResizeTable() } ; ON MAXIMIZE { || ResizeTable() } ; ////////////////////////////////////////////////////////////////// FUNCTION ResizeTable() LOCAL cForm := _HMG_ThisFormName LOCAL hWnd := GetFormHandle(cForm) // По методу Move() запускается ReSize() - описание параметров см. ???, // который запускает в конце работы кодовый блок bResized - в нем можно что-то еще подвигать oBrw:Move( oBrw:nLeft ,oBrw:nTop , GetClientWidth(hWnd), ; GetClientHeight(hWnd) - oBrw:nTop, .t.) //oBrw:Display() oBrw:Paint() // Иначе не перерисовываются вертикальные разделители MyToolBarTable(,,.T.) // перепостроить кнопки на форме Return Nil При изменения размера окна мышкой, какие то артефакты вылазят: Как исправить ?

Andrey: Добился такого же эффекта (расползания подвала таблицы) в примере MiniGUI\SAMPLES\Advanced\Tsb_config Разница небольшая: 1) Окно WINDOWTYPE STANDARD TOPMOST ; При первом запуске "расползание подвала" нет. Если мышкой перейти в ячейки, а потом попробовать изменить размер экрана, то начинается "расползание подвала" : Вот исправленный проект с демонстрацией - https://cloud.mail.ru/public/FBzx/BzqAUUxZz Вопрос остается таким же: как исправить (убрать расползание подвала таблицы ) ?



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