Форум » 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: Haz пишет Может обработку bEditLog поднять перед этой подготовкой? По мне, не стоит. Это в If ... else ... min 2 раза вставлять. Не пробовал, но если :nEditMove := 0, то :nCell и nCol должны быть равными. Достаточно, по мне, сохранить, установить и восстановить :nCell, как показал выше

SergKis: PS Но если :nEditMode будет с перескоком на другую строку тсб, то RecNo(), (:cAlias)->ID, ... будут неверными. И поэтому, Игорь, твое предложение будет, наверно, правильнее.

SergKis: Haz пишет Может обработку bEditLog поднять перед этой подготовкой? Поднял [pre2] METHOD PostEdit( uTemp, nCol, bValid ) CLASS TSBrowse ... ( cAlias )->( DbSkip( 0 ) ) // refresh relations just in case that a relation field changes xNewEditValue := ::bDataEval( ::aColumns[ nCol ], , nCol ) //Igor Nazarov If hb_isBlock( ::bEditLog ) .and. ::aColumns[ nCol ]:xOldEditValue != xNewEditValue Eval( ::bEditLog, ::aColumns[ nCol ]:xOldEditValue, xNewEditValue, Self ) EndIf ::SetFocus() If nLastKey == VK_UP .and. ::lPostEditGo ... If lAppend .and. ::bChange != Nil Eval( ::bChange, Self, ::oWnd:nLastKey ) EndIf xNewEditValue := ::bDataEval( ::aColumns[ nCol ], , nCol ) //Igor Nazarov If hb_isBlock( ::bEditLog ) .and. ::aColumns[ nCol ]:xOldEditValue != xNewEditValue Eval( ::bEditLog, ::aColumns[ nCol ]:xOldEditValue, xNewEditValue, Self ) EndIf ::SetFocus() If nLastKey == VK_UP .and. ::lPostEditGo ... // xNewEditValue := ::bDataEval( ::aColumns[ nCol ], , nCol ) //Igor Nazarov // If hb_isBlock( ::bEditLog ) .and. ::aColumns[ nCol ]:xOldEditValue != xNewEditValue // Eval( ::bEditLog, ::aColumns[ nCol ]:xOldEditValue, xNewEditValue, Self ) // EndIf Return Nil ... [/pre2] Пример отработал нормально


Haz: SergKis пишет: Пример отработал нормально Сергей, спасибо за помощь.

Andrey: Наверное всё таки журнал правки лучше держать в виде базы ? А то за несколько лет текстовый лог разрастётся непомерно и поиск в нем будет идти долго.

Vlad04: А то за несколько лет текстовый лог разрастётся Веди в разрезе года. Новый год, новый файл

Andrey: Искал, искал и не нашёл. Как убрать в таблице в колонках дата пустые даты - ". ." ?

SergKis: Andrey пишет Как убрать в таблице в колонках дата пустые даты - ". ." ? oCol:lEmptyValToChar := .T. нули тоже убирает

Andrey: SergKis пишет: oCol:lEmptyValToChar := .T. нули тоже убирает Не совсем понял... Это по колонкам нужно пробежаться ? А сразу на всю таблицу нет команды ? Как например oBrw:lPickerMode := .F. P.S. Да проверил, нужно самому пробежаться по колонкам. [pre2] For nI := 1 To :nColCount() oCol := :aColumns[ nI ] // центровка подвала таблицы oCol:nFAlign := DT_CENTER If oCol:cName == 'Name_1' oCol:nAlign := DT_CENTER // центровка колонки 'Name_1' EndIf // фонты для строк таблицы oCol:hFont := {|nr,nc,ob| TsbFont(nr, nc, ob)} // убрать пустую дату и 0 в колонках oCol:lEmptyValToChar := .T. Next[/pre2] СПАСИБО БОЛЬШОЕ !

SergKis: Andrey пишет Это по колонкам нужно пробежаться ? Да. А сразу на всю таблицу нет команды ? AEval(oBrw:aColumns, {|oc| oc:lEmptyValToChar := .T. }) У меня в tscolumns.prg стоит DATA lEmptyValToChar AS LOGICAL INIT .T. // .F. True if show of empty string for empty values of D,N,T,L types

Andrey: Очередная непонятка с SetArrayTo() Создаю массив для него, создается 9 элементов. Когда считываю его размер oBrw:nLen, пишет что 8. Как такое может быть ? Что неправильно делаю ? Вот код: [pre2]? "-----------------", cBrw , cForm ?v aArray aMassiv := aArray // переопределяем массив на сокращённый ? "LEN(aMassiv)=",LEN(aMassiv) oBrw:DeleteRow( .T. ) // Delete All oBrw:aArray := {} // очистить массив oBrw:reset() FOR nI := 1 TO LEN(aMassiv) // нужно сделать массив на +1 больше aRows := Array(1, 13) aRows[1][1] := 0 aRows[1][2] := 0 aRows[1][3] := CTOD("") aRows[1][4] := 0 aRows[1][5] := CTOD("") aRows[1][6] := SPACE(20) aRows[1][7] := 0 aRows[1][8] := 0 aRows[1][9] := CTOD("") aRows[1][10] := 0 aRows[1][11] := "" aRows[1][12] := "" aRows[1][13] := "" oBrw:AddItem( aRows[1] ) ? "-AddItem-", nI, HB_ValToExp(aRows[1]) NEXT oBrw:Reset() oBrw:Refresh(.T.) ? " oBrw:nLen=", oBrw:nLen, " LEN(aMassiv)=", LEN(LEN(aMassiv)) [/pre2] Вот лог-файл: [pre2]----------------- Set_Columns1 Form_AYC 1 {40.00, 0d20190331, 120.00, 0d20190130, ... } 2 {40.00, 0d20190331, 0.00, 0d20190131, ... } 3 {40.00, 0d20190331, 0.00, 0d20190228, ... } 4 {40.00, 0d20190331, 40.00, 0d20190322, ... } 5 {40.00, 0d20190331, 0.00, 0d20190331, ... } 6 {40.00, 0d20190831, 40.00, 0d20190416, ... } 7 {40.00, 0d20190831, 0.00, 0d20190430, ... } 8 {40.00, 0d20190831, 0.00, 0d20190531, ... } 9 {40.00, 0d20190831, 0.00, 0d20190630, ... } LEN(aMassiv)= 9 -AddItem-1 {0, 0, 0d00000000, 0, 0d00000000, "", ...} -AddItem-2 {0, 0, 0d00000000, 0, 0d00000000, "", ...} -AddItem-3 {0, 0, 0d00000000, 0, 0d00000000, "", ...} -AddItem-4 {0, 0, 0d00000000, 0, 0d00000000, "", ...} -AddItem-5 {0, 0, 0d00000000, 0, 0d00000000, "", ...} -AddItem-6 {0, 0, 0d00000000, 0, 0d00000000, "", ...} -AddItem-7 {0, 0, 0d00000000, 0, 0d00000000, "", ...} -AddItem-8 {0, 0, 0d00000000, 0, 0d00000000, "", ...} -AddItem-9 {0, 0, 0d00000000, 0, 0d00000000, "", ...} oBrw:nLen= 8 LEN(aMassiv)= 9 [/pre2]

SergKis: Andrey пишет Очередная непонятка с SetArrayTo() Что то ты мутишь с массивами. Вот пример https://TransFiles.ru/bq2op Работает

Andrey: SergKis пишет: Что то ты мутишь с массивами. Вот пример Работает Что то в коде у тебя не наблюдаю: [pre2] oBrw:DeleteRow( .T. ) // Delete All [/pre2] И нет конструкции создания массива... У меня не пойдёт - oBrw:AddItem(aDim), нужно увеличить на 1 элемент массив.

SergKis: Andrey пишет Что то в коде у тебя не наблюдаю: oBrw:DeleteRow( .T. ) // Delete All Как бы и не надо, заново массив создаем У меня не пойдёт - oBrw:AddItem(aDim), нужно увеличить на 1 элемент массив. 1. Можно иметь больше колонок и не нужным сделать oCol:Visible := .F. или :nWidth := 1 или 2 пикселя 2. Можно попробовать использовать вместо :AddItem(...) метод:SetArray( aArray, lAutoCols, aHead, aSizes )

SergKis: Andrey пишет У меня не пойдёт - oBrw:AddItem(aDim), нужно увеличить на 1 элемент массив Немного модифицировал пример https://TransFiles.ru/5zbz9 На кнопке All на 1 колонку больше, чем на др. кнопках Вместо :AddItem использовал :SetArray

SergKis: Andrey Забыл про :HideColumns(...). С ним еще проще и можно на несколько колонок распространить [pre2] *-----------------------------------------------------------------------------* STATIC FUNC Report( oWnd, nEvent, aSelect ) *-----------------------------------------------------------------------------* LOCAL aDatos, aArray, aHead, aSize, oCol, nCol, nLen LOCAL cCapt := 'All' oWnd:Action := .F. oWnd:StatusBar:Say('W A I T') If aSelect[1] != Nil cCapt := hb_ntos(aSelect[1])+'-'+hb_ntos(aSelect[2]) EndIf This.E0.Caption := cCapt DO EVENTS aDatos := AgeSelect( aSelect[1], aSelect[2] ) aArray := aDatos[1] aHead := aDatos[2] aSize := aDatos[3] WITH OBJECT oWnd:GetObj('Report'):Tsb // oBrw :Hide() ; nCol := :nColumn('STREET') ; oCol := :GetColumn(nCol) AEval(:aColumns, {|oc,nc| oc:nWidth := aSize[ nc ], ; oc:cHeading := aHead[ nc ] }) :HideColumns( nCol, ! 'All' $ cCapt ) :Display() ; :AdjColumns() ; DO EVENTS :SetArray(aArray, .T.) :Reset() ; :GetColumn('AGE'):cFooting := hb_ntos(:nLen) :ResetVScroll( .T. ) ; :oHScroll:SetRange( 0, 0 ) :Show() ; DO EVENTS ; :SetFocus() END WITH oWnd:StatusBar:Say('') oWnd:Action := .T. RETURN Nil [/pre2]

Andrey: SergKis пишет: 2. Можно попробовать использовать вместо :AddItem(...) метод:SetArray( aArray, lAutoCols, aHead, aSizes ) Дошли руки разбираться дальше. Не понял как в моём случае это поможет. Куда в мой код это вставить, что заменить и т.д. Код примера Tsb_ReportAge.7z трудно читаемый для меня. Пока у себя сделал просто (работает однако): [pre2]FOR nI := 1 TO LEN(aMassiv) + 1 // нужно сделать массив на +1 больше aRows := Array(1, 13) [/pre2]

Andrey: Всем привет ! Делаю новый пример на базе примера MiniGUI\SAMPLES\Advanced\Tsb_Basic\demo2.prg Поймал вот такой косяк с таймером (2 окна одной и той же программы): Т.е. таймер не пашет и Refresh по таймеру не происходит. Перезапустил, пропало. А частенько так таймер работает в МиниГуи ?

SergKis: Andrey пишет Код примера Tsb_ReportAge.7z трудно читаемый для меня. Что конкретно (какое место) трудно читается ? Хочется знать, что бы пояснить. Куда в мой код это вставить, что заменить и т.д. Формируй тсб с max кол-вом колонок (чтобы не делать Insert\Add\Delete columns) и массивы в мах кол-ве колонок (нужны надписи Header, Footer для колонок) и лишние колонки делай :HideColumns(...) в примере см. AgeReport() ф-ю, там[pre2] ... :SetArray(aArray, .T.) // замена предыдущего массива в тсб массивом aArray :Reset() :GetColumn('AGE'):cFooting := hb_ntos(:nLen) // последнюю колонку убираем :ResetVScroll( .T. ) :oHScroll:SetRange(0,0) ... [/pre2]

SergKis: PS Извини с HidColumns др. кусок кода[pre2] nCol := :nCell AEval(:aColumns, {|oc,nc| oc:nWidth := aSize[ nc ] }) // восстанавливаем размеры колонок базовые :HideColumns( 'STREET', ! 'All' $ cCapt ) // убираем колонку не нужную // :cTextSupHdSet( 1, This.ToolBar_1.Caption + ' ' + cCapt ) :aSuperHead[1][3] := This.ToolBar_1.Caption + ' ' + cCapt // навание в superheader :Display() :AdjColumns() // растягиваем колонки до размеров тсб [/pre2]



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