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

Dima: Порча с бровсом , это из примера SAMPLES\Advanced\Tsb_seek_2\ Едем вниз или колесом или стрелкой вниз и бац записи стали дублироваться. Тоже самое происходит и у меня в программе на компе заказчика (у меня норм) В примере правда происходит расчет HOLE и дальнейшие действия , у меня в коде ни чего подобного нет. Куда копать ?

Dima: Видео заказчика http://files.icq.net/get/8uYhqlxRMUWAVpabMnphKX5785d4af1ad Его лучше скачать так как в ONLINE показывает его перевернутым.

gfilatov2002: Dima пишет: Куда копать ? Это лечится в примере добавлением всего одной строки в функцию TBrw_Show() [pre2]*----------------------------------- Function TBrw_Show( oBrw, nDelta ) *----------------------------------- _EndTBrowse() If hb_IsObject(oBrw) TBrw_NoHoles( oBrw, nDelta ) oBrw:nHeightHead -= 1 EndIf [/pre2]Идея лечения состоит в том, чтобы уйти от точного соответствия высоты строк в гриде и общей высоты TBrowse


Dima: Да в примере это есть НО в нем тоже ломается я же выложил скрин. Упс строки то я и не заметил ))

sashaBG: Привет всем ! Я тоже пытаюсь разобратся с TSBROWS-ом у меня возникла следучщая проблема : имеется столбец ADD COLUMN TO BROWSE_1; HEADER "Код" ; SIZE 80 ; DATA aFld[1] ; ALIGN DT_LEFT, nMakeLong( DT_CENTER, DT_CENTER ) ; 3DLOOK FALSE, TRUE, TRUE ; EDITABLE //MOVE DT_MOVE_RIGHT BROWSE_1:aColumns[ 1 ]:bHLClicked := {||artikuli->(dbseek(prihod->kod)),artikuli( .f. )} BROWSE_1:aColumns[ 1 ]:cToolTip := "Кликнете върху хедера за да редактирате номенклатура АРТИКУЛИ." BROWSE_1:aColumns[ 1 ]:bValid:= { | uVar | FindArt( uVar ) } ; функция FindArt ищет в таблицу с артикулами есть или нет такой код . если не находит хочу показать список в другом окне и сделать правильный выбор А КАК НОВЫЙ КОД ОБРАТНО В ЯЧЕЙКУ ЗАПЕХНУТЬ НИКАК НЕ СООБРАЖУ

Haz: sashaBG пишет: А КАК НОВЫЙ КОД ОБРАТНО В ЯЧЕЙКУ ЗАПЕХНУТЬ НИКАК НЕ СООБРАЖУ не совсем понятно применение :bValid , это блок который разрешает или нет GET объекту покинуть редактирование , если Т то редактирование завершается , если F то не выпускает. То есть что бы закончить редактирование нужно по любому вернуть T В TsBrowse есть еще блоки завязанные на редакцию, это bPostEdit , bEditEnd которые выполняются после редактирования и в них можно делать проверки. Присвоить значение в ячейку можно прямым присвоением oBrw:aArray[oBrw:nAt][ 1 ] := Kod // для колонки 1 или выполнив блок выборки/записи Eval( oBrw:aColumns[1]:bData, Kod ), в результате чего значение Kod будет записано в ячейку . останется только перерисовать строку для отображения нового значения . Перерисовку делает или :Refresh( F ) или :DrawSelect() - этот предпочтительнее PS соответственно прочитать значение ячейки можно как Kod := oBrw:aArray[oBrw:nAt][ 1 ] или Kod := Eval( oBrw:aColumns[1]:bData) мне кажется это проще чем пытаться управлять буфером Get объекта через Valid

sashaBG: Да Вы правы . Я сделел то що хотел через bPostEdit А вот интересно при bValid Вы говорите що не должно выпускать из контрола , на самом деле ПИКАЕТ и выходит из редактирования не меняя ячейку.

Haz: sashaBG пишет: на самом деле ПИКАЕТ и выходит из редактирования не меняя ячейку. Да, так и есть. Если я не ошибаюсь в Clipper Valid не выпускал из редактирования пока не вернет T, думал так же и в TS Посмотрел исходники TS, в них Vald обрабатывается в методе bPostEdit т.е. после редактирования. Видимо это особенность которую автор заложил в метод :Edit() По мне как это ошибка логики, будет время попробую предложить исправление. Сейчас ушел совершенно в другой процесс, и хобби в виде программирования пока пришлось отложить

SergKis: Haz пишет По мне как это ошибка логики, будет время попробую предложить исправление Возможно ошибки логики нет: 1. можно сделать postmessage на enter при valid .F., .т.е. вкл. edit 2. можно подвесить (организовать сообщение), как в примере BASIC\COM_2, используя ф-ю ShowGetValid( hWnd, cTxt, 'Information', 'I' ), после закрытия поля edit после валид, положив в ячейку (visible .t.) узкий GetBox (контол cNam) и ... как в примере SetProperty(ThisWindow.Name, cNam, 'Visible', .T.) DoMethod(ThisWindow.Name, cNam, 'SetFocus') InkeyGui(10) // otherwise it does not have time to respond ShowGetValid( hWnd, cTxt, 'Information', 'I' ) InkeyGui(3000) // 3 sec. SetProperty(ThisWindow.Name, cNam, 'Visible', .F.) 3. потом п. 1

Haz: SergKis пишет: Возможно ошибки логики нет: 1. можно сделать Сергей, то что ты предлагаешь и есть "выпрямление" логики Ведь что говорил букварь по clipper - [pre2]If the VALID clause is specified and <lValid> evaluates to it logical true (.T.) condition the current GET will be considered valid and the get operation will continue onto the next active GET object. If not, the cursor will remain on this GET object until aborted or until the condition in <lValid> evaluates to true (.T.). [/pre2] То есть в "классике" не завершать GET при lValid == .F. было "из коробки" и не нужно было ничего доделывать.

SergKis: Haz пишет То есть в "классике" не завершать GET при lValid == .F. было "из коробки" и не нужно было ничего доделывать При клацаньи мышой где хочу "классик" уходит на 2-ой план. Как при замороженом GET validом (.F.), переключить курсор на "нужную" ячейку , не записав введенные данные ("неправильные") в поле ? Потому и говорю, что "возможно ..."

Haz: SergKis пишет: Потому и говорю, что "возможно ..." Мысль понял , логично но "осадочек остался"

Andrey: Использую стандартную функцию загрузки настроек \MiniGUI\SOURCE\TsBrowse\h_tbrowse.prg LoadFields( "oBrw1", cForm, .T.) // все поля редактируемые Поля типа: "+", "=", "^", "@" - неправильно отображаются в TBROWSE, да и в добавок редактировать разрешены. Можно там подправить в исходнике эту функцию ?

SergKis: Andrey пишет: Можно там подправить в исходнике эту функцию ? 1. Отображение идет блоком кода, через стандартный FieldWBlock(cFiled, nWorkArea), Что тут менять ? 2. Ты сам ставишь все поля редактируемые .T. или нет .F. 3. Есть расчет ширины колонки, если не задано, но как правило (для красоты) ставишь под себя (свое понимание красоты) Выход - взять метод METHOD LoadFields( lEditable ) CLASS TSBrowse преобразовать в функцию, подправить под свое понимание ситуации и предложть в использование, если будент хорошо, можно поправить старый или сделать новый метод LoadField2(...) в TsBrowse

Haz: Andrey пишет: подправить подправить надо не в исходнике. Задай нужным полям соответствующий шаблон вывода и запрети редактирование. Делов то на один выэов aEval. Если идти дорогой правки исходников, то под все RDD. Я к примеру на ADS сижу, там расширенных типов полей куча, и что тоже все туда пихать? И кому этот мусор в исходниках нужен будет ?

Andrey: Принял к сведению ваши предложения. Спасибо ! Haz пишет: Делов то на один выэов aEval. Если нетрудно, дай пожалуйста как это сделать.

Dima: Andrey Пройдись по массиву полей (или как там у тебя устроено) и в зависимости от типа поля присвой свой :cPicture , возможно придется поиграться и с :bdata

Haz: Andrey пишет: Если нетрудно, дай пожалуйста как это сделать. для запрета редактирования к примеру aEval( oBrw:aColumns, {|oCol| If( oCol:cDataType == чему_надо, oCol:lEdit := .F., NIL } )

Andrey: Haz пишет: для запрета редактирования к примеру Не работает... LoadFields( "oBrw1", cForm, .T.) // все поля редактируемые // запрет редактирования полей типа: "+", "=", "^" aEval( oBrw1:aColumns, {|oCol| If( oCol:cDataType == "+", oCol:lEdit := .F., NIL) } ) aEval( oBrw1:aColumns, {|oCol| If( oCol:cDataType == "=", oCol:lEdit := .F., NIL) } ) aEval( oBrw1:aColumns, {|oCol| If( oCol:cDataType == "^", oCol:lEdit := .F., NIL) } ) // формат вывода полей типа: "+", "=", "@" aEval( oBrw1:aColumns, {|oCol| If( oCol:cDataType == "+", oCol:cPicture := REPL("9",10), NIL) } ) aEval( oBrw1:aColumns, {|oCol| If( oCol:cDataType == "=", oCol:cPicture := REPL("x",20), NIL) } ) aEval( oBrw1:aColumns, {|oCol| If( oCol:cDataType == "@", oCol:cPicture := REPL("x",20), NIL) } )

Dima: Andrey пишет: oCol:cDataType == "+" Уверен что cDataType возвращается тот что надо ?



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