Автор | Сообщение |
Vlad04
|
| постоянный участник
|
Пост N: 420
Зарегистрирован: 13.10.05
|
|
Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)
TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру цитата: | 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 |
| Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[см. все]
|
|
Dima
|
| |
Пост N: 5866
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.07.16 09:41. Заголовок: Порча с бровсом , эт..
Порча с бровсом , это из примера SAMPLES\Advanced\Tsb_seek_2\ Едем вниз или колесом или стрелкой вниз и бац записи стали дублироваться. Тоже самое происходит и у меня в программе на компе заказчика (у меня норм) В примере правда происходит расчет HOLE и дальнейшие действия , у меня в коде ни чего подобного нет. Куда копать ?
|
|
|
Dima
|
| |
Пост N: 5867
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.07.16 10:28. Заголовок: Видео заказчика http..
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 962
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.07.16 10:28. Заголовок: Dima пишет: Куда ко..
Dima пишет: Это лечится в примере добавлением всего одной строки в функцию TBrw_Show() *----------------------------------- Function TBrw_Show( oBrw, nDelta ) *----------------------------------- _EndTBrowse() If hb_IsObject(oBrw) TBrw_NoHoles( oBrw, nDelta ) oBrw:nHeightHead -= 1 EndIf Идея лечения состоит в том, чтобы уйти от точного соответствия высоты строк в гриде и общей высоты TBrowse
|
|
|
Dima
|
| |
Пост N: 5868
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.07.16 10:30. Заголовок: Да в примере это ест..
Да в примере это есть НО в нем тоже ломается я же выложил скрин. Упс строки то я и не заметил ))
|
|
|
sashaBG
|
| постоянный участник
|
Пост N: 176
Зарегистрирован: 15.09.05
|
|
Отправлено: 09.08.16 23:09. Заголовок: Привет всем , я тоже пытаюсь разобратся с TSBROWS ом
Привет всем ! Я тоже пытаюсь разобратся с 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
|
| |
Пост N: 1037
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.08.16 23:43. Заголовок: sashaBG пишет: А КА..
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
|
| постоянный участник
|
Пост N: 177
Зарегистрирован: 15.09.05
|
|
Отправлено: 10.08.16 15:12. Заголовок: Да Вы правы
Да Вы правы . Я сделел то що хотел через bPostEdit А вот интересно при bValid Вы говорите що не должно выпускать из контрола , на самом деле ПИКАЕТ и выходит из редактирования не меняя ячейку.
|
|
|
Haz
|
| |
Пост N: 1039
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.08.16 20:21. Заголовок: sashaBG пишет: на ..
sashaBG пишет: цитата: | на самом деле ПИКАЕТ и выходит из редактирования не меняя ячейку. |
| Да, так и есть. Если я не ошибаюсь в Clipper Valid не выпускал из редактирования пока не вернет T, думал так же и в TS Посмотрел исходники TS, в них Vald обрабатывается в методе bPostEdit т.е. после редактирования. Видимо это особенность которую автор заложил в метод :Edit() По мне как это ошибка логики, будет время попробую предложить исправление. Сейчас ушел совершенно в другой процесс, и хобби в виде программирования пока пришлось отложить
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1158
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.08.16 21:59. Заголовок: Haz пишет По мне как..
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
|
| |
Пост N: 1040
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.08.16 22:38. Заголовок: SergKis пишет: Возм..
SergKis пишет: цитата: | Возможно ошибки логики нет: 1. можно сделать |
| Сергей, то что ты предлагаешь и есть "выпрямление" логики Ведь что говорил букварь по clipper - 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.). То есть в "классике" не завершать GET при lValid == .F. было "из коробки" и не нужно было ничего доделывать.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1159
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.08.16 23:24. Заголовок: Haz пишет То есть в ..
Haz пишет цитата: | То есть в "классике" не завершать GET при lValid == .F. было "из коробки" и не нужно было ничего доделывать |
| При клацаньи мышой где хочу "классик" уходит на 2-ой план. Как при замороженом GET validом (.F.), переключить курсор на "нужную" ячейку , не записав введенные данные ("неправильные") в поле ? Потому и говорю, что "возможно ..."
|
|
|
|
Haz
|
| |
Пост N: 1041
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.08.16 23:29. Заголовок: SergKis пишет: Пото..
SergKis пишет: цитата: | Потому и говорю, что "возможно ..." |
| Мысль понял , логично но "осадочек остался"
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5070
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.09.16 23:00. Заголовок: Использую стандартну..
Использую стандартную функцию загрузки настроек \MiniGUI\SOURCE\TsBrowse\h_tbrowse.prg LoadFields( "oBrw1", cForm, .T.) // все поля редактируемые Поля типа: "+", "=", "^", "@" - неправильно отображаются в TBROWSE, да и в добавок редактировать разрешены. Можно там подправить в исходнике эту функцию ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1199
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.09.16 09:46. Заголовок: Andrey пишет: Можно ..
Andrey пишет: цитата: | Можно там подправить в исходнике эту функцию ? |
| 1. Отображение идет блоком кода, через стандартный FieldWBlock(cFiled, nWorkArea), Что тут менять ? 2. Ты сам ставишь все поля редактируемые .T. или нет .F. 3. Есть расчет ширины колонки, если не задано, но как правило (для красоты) ставишь под себя (свое понимание красоты) Выход - взять метод METHOD LoadFields( lEditable ) CLASS TSBrowse преобразовать в функцию, подправить под свое понимание ситуации и предложть в использование, если будент хорошо, можно поправить старый или сделать новый метод LoadField2(...) в TsBrowse
|
|
|
Haz
|
| |
Пост N: 1046
Зарегистрирован: 20.02.11
|
|
Отправлено: 02.09.16 10:10. Заголовок: Andrey пишет: подп..
Andrey пишет: подправить надо не в исходнике. Задай нужным полям соответствующий шаблон вывода и запрети редактирование. Делов то на один выэов aEval. Если идти дорогой правки исходников, то под все RDD. Я к примеру на ADS сижу, там расширенных типов полей куча, и что тоже все туда пихать? И кому этот мусор в исходниках нужен будет ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5072
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.09.16 12:31. Заголовок: Принял к сведению ва..
Принял к сведению ваши предложения. Спасибо ! Haz пишет: цитата: | Делов то на один выэов aEval. |
| Если нетрудно, дай пожалуйста как это сделать.
|
|
|
Dima
|
| |
Пост N: 5989
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.09.16 12:58. Заголовок: Andrey Пройдись по ..
Andrey Пройдись по массиву полей (или как там у тебя устроено) и в зависимости от типа поля присвой свой :cPicture , возможно придется поиграться и с :bdata
|
|
|
Haz
|
| |
Пост N: 1047
Зарегистрирован: 20.02.11
|
|
Отправлено: 03.09.16 10:39. Заголовок: Andrey пишет: Если ..
Andrey пишет: цитата: | Если нетрудно, дай пожалуйста как это сделать. |
| для запрета редактирования к примеру aEval( oBrw:aColumns, {|oCol| If( oCol:cDataType == чему_надо, oCol:lEdit := .F., NIL } )
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5074
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.09.16 15:02. Заголовок: Haz пишет: для запр..
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
|
| |
Пост N: 5992
Зарегистрирован: 17.05.05
|
|
Отправлено: 03.09.16 15:17. Заголовок: Andrey пишет: oCol:..
Andrey пишет: Уверен что cDataType возвращается тот что надо ?
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[см. все]
|
|