Автор | Сообщение |
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:....
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 5189
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.11.16 12:19. Заголовок: Спасибо Дима ! :sm3..
Спасибо Дима ! Чудо свершилось, чуток переделал и горизонтальный скролинг пропал, а вертикальный стал нормально показываться: SetProperty(oBrwX:cParentWnd, oBrwX:cControlName, "Enabled", .F.) oBrwX:bChange := {|| oBrwX:oHScroll:SetRange( 0, 0 ) } oBrwX:Reset() oBrwX:Refresh(.T.) oBrwX:Upstable() SetProperty(oBrwX:cParentWnd, oBrwX:cControlName, "Enabled", .T.) oBrwX:Setfocus()
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 617
Зарегистрирован: 13.10.05
|
|
Отправлено: 28.11.16 11:51. Заголовок: TsBrows И COMBOBOX
Есть основная база, к примеру, MIBLP.dbf. Есть вторая база - INFEKZII.dbf, это источник данных Пример, заготовка здесь - TsBrows И COMBOBOX Хотелось , бы 1) чтобы в TsBrows в поля 'KRANK1','KRANK2','KRANK3' был подключены COMBOBOX и можно было бы производить выбор данных из второй базы (подобное возможно, но примеры которые есть сильно перегружены лишней информацией) 2)в Combo_1, который на поле формы отображалось значение , к примеру поля 'KRANK1' базы MIBLP.dbf. Но в то же время была-бы возможность изменить данные выбором из сомбо
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1324
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.11.16 15:03. Заголовок: Vlad04 пишет Хотелос..
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 618
Зарегистрирован: 13.10.05
|
|
Отправлено: 28.11.16 19:40. Заголовок: Не просто.Если прогр..
Не просто.Если программа большая, запутаться легко. Почему-то в Browse в подстановке в поле базы данных из массива через комбобох нет особых проблем.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1325
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.11.16 20:32. Заголовок: Vlad04 Может так про..
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1326
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.11.16 21:27. Заголовок: Vlad04 Т.к. TBROWSE..
Vlad04 Т.к. TBROWSE_1 private, может быть public, то упростить можно еще так FUNC Combo_Enter() Local cForm := ThisWindow.Name Local cComb := This.Name Local oBrw := TBROWSE_1 // Local cBrw := "TBROWSE_1" // Local oBrw := _HMG_aControlIds[ GetControlIndex(cBrw, cForm) ] Local oCol := oBrw:GetColumn[cComb] Local nVal, cVal nVal := This.&(cComb).Value cVal := This.&(cComb).Item(nVal) Eval(oCol:bPostEdit, cVal, oBrw) oBrw:SetFocus() RETURN NIL и в блоках кода вместо obr использовать TBROWSE_1 Я не исп. Public\Private потому использую параметры блоков кода
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1327
Зарегистрирован: 17.02.12
|
|
Отправлено: 28.11.16 21:59. Заголовок: Vlad04 подправил, с..
Vlad04 подправил, с учетом уст. курсора тсб на любой колонке и модификация инф. из combobox FUNC TBrowse_1_Sets() ... :GetColumn('KRANK3'):bPostEdit := bPost :GoPos(1, 1) :SetFocus() END WITH ... FUNC Combo_Enter() Local cForm := ThisWindow.Name Local cComb := This.Name Local oBrw := TBROWSE_1 Local oCol := oBrw:GetColumn(cComb) Local nVal, cVal nVal := This.&(cComb).Value cVal := This.&(cComb).Item(nVal) (oBrw:cAlias)->( FieldPut(FieldPos(cComb), cVal) ) oBrw:SetFocus() RETURN NIL
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 619
Зарегистрирован: 13.10.05
|
|
Отправлено: 29.11.16 11:22. Заголовок: SergKis Спасибо Пок..
SergKis Спасибо Пока остановился на таком варианте: По горячей клавише или Клику открывается вспомогательная форма, там редактирую и т.д. И все таки , почему же в Browse проще?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1328
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.11.16 12:15. Заголовок: Vlad04 пишет И все т..
Vlad04 пишет цитата: | И все таки , почему же в Browse проще? |
| Обманчивая видимость простоты. Мои клиенты категорически отказались работать с InplaceEdit, т.к. оно реализовано на модальном окне и мелькание фокуса с бровсе на ячейку - глаз\нервы не держат. Выделение на мод. окно объекта коректировки, позволяет разделить сообщения управления бровсе и контрола коректировки. Вот кусочек текста. Скрытый текст
DEFINE WINDOW _InPlaceEdit ; AT This.CellRow + GridRow - _HMG_aControlRow [ i ] - 1 , This.CellCol + GridCol - _HMG_aControlCol [ i ] + 2 ; WIDTH This.CellWidth ; HEIGHT This.CellHeight + 6 + Ldelta ; MODAL ; NOCAPTION ; NOSIZE ON KEY CONTROL + U ACTION iif( _IsWindowActive( '_InPlaceEdit' ), ; _InPlaceEdit.Control_1.Value := iif( ControlType == 'L', iif ( CellData , 1 , 2 ), CellData ), NIL ) ON KEY RETURN ACTION iif( _IsWindowActive( '_InPlaceEdit' ), ; _InPlaceEditOk ( i , _InPlaceEdit.Control_1.Value , aValid , CellColIndex , ; sFieldName , _GridWorkArea , aValidMessages , lock , ControlType , aInputItems ), NIL ) ON KEY ESCAPE ACTION ( _HMG_IPE_CANCELLED := .T. , iif( lock == .T. , dbUnlock(), NIL ) , ; iif( _IsWindowActive( '_InPlaceEdit' ), _InPlaceEdit.Release, NIL ) ) IF lInputItems == .T. // Fill Items Array AEval( aInputItems [ CellColIndex ] , { |p| AAdd ( aItems , p [1] ) } ) // Fill Values Array AEval( aInputItems [ CellColIndex ] , { |p| AAdd ( aValues , p [2] ) } ) r := AScan ( aValues , CellData ) DEFINE COMBOBOX Control_1 ROW 0 COL 0 ITEMS aItems WIDTH This.CellWidth VALUE iif ( Empty( r ) , 1 , r ) FONTNAME _hmg_aControlFontName [ i ] FONTSIZE _hmg_aControlFontSize [ i ] ON LISTDISPLAY Eval( bOnDisplay ) ON LISTCLOSE Eval( bOnCloseUp ) END COMBOBOX
| В тсб все управление сообщениями таблицы и контрола edit заложено в объект блоками кода. Думаю, немного попривыкнув\изучив, сложности не будет в понимании.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1329
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.11.16 15:12. Заголовок: Vlad04 По поводу кр..
Vlad04 По поводу краткости записи. Пример тот же Скрытый текст
#include <minigui.ch> #include "tsbrowse.ch" REQUEST DBFCDX , DBFFPT REQUEST HB_CODEPAGE_RU866 REQUEST HB_CODEPAGE_RU1251 FUNCTION Main Local nArea, oBrw Local aKRANK1 := {}, aKRANK2 := {}, aKRANK3 := {} hb_SetCodepage("RU1251") SET DELETED ON SET DATE BRITISH SET CENTURY ON SET EPOCH TO 1925 SET BROWSESYNC ON PRIVATE TBROWSE_1 USE INFEKZII Via "DBFCDX" NEW CODEPAGE 'RU866' nArea := select() dbEval({|| aAdd(aKRANK1, (nArea)->NAME), ; aAdd(aKRANK2, (nArea)->NAME), ; aAdd(aKRANK3, (nArea)->NAME) }) GO TOP USE MIBLP Via "DBFCDX" NEW CODEPAGE 'RU866' DEFINE WINDOW FrmGL AT 0, 0 WIDTH 650 HEIGHT 578 MAIN DEFINE TBROWSE TBROWSE_1 AT 30, 10 ; WIDTH This.ClientWidth - 10 * 2 ; HEIGHT This.ClientHeight - 30 * 2 ; COLSIZES 50,130,130,130,130,130 ; WORKAREA 'MIBLP' ; CELL ; COLUMNS 'CODE','MIBP','KRANK1','KRANK2','KRANK3' :LoadFields(.T.) // Edit :nClrLine := COLOR_GRID :nWheelLines := 1 :SetColor( { CLR_FOCUSB }, { { |nAt,nNr,oBr| nAt := Nil, ; If( oBr:nCell == nNr, RGB(166, 202, 240), RGB(220, 220, 220) ) } } ) AEval( :aColumns, {|oCol| oCol:lFixLite := .T., ; oCol:lOnGotFocusSelect := .T.} ) // :GetColumn("CODE"):lEdit := .F. :SetData('KRANK1', , aKRANK1) :SetData('KRANK2', , aKRANK2) :SetData('KRANK3', , aKRANK3) END TBROWSE END WINDOW FrmGL.Center FrmGL.Activate RETURN( NIL )
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 5191
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.11.16 19:53. Заголовок: SergKis пишет: :Set..
SergKis пишет: цитата: | :SetData('KRANK1', , aKRANK1) |
| Что за параметр :SetData() ?
|
|
|
|
Петр
|
| постоянный участник
|
Пост N: 1354
Зарегистрирован: 09.10.06
|
|
Отправлено: 29.11.16 22:35. Заголовок: Andrey пишет: Что з..
Andrey пишет: цитата: | Что за параметр :SetData() ? |
| SetData это метод - функция с 3-мя параметрами цитата: | Это мило и симпатично, но тоже самое можно решить и др. способами. На любителя ООП (их тут мало с МиниГуи работающих) |
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1330
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.11.16 23:11. Заголовок: Петр :sm36: :Get..
Петр :GetColumn('KRANK1'):aItems := aKRANK1 :GetColumn('KRANK1'):lComboBox := .T.
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 620
Зарегистрирован: 13.10.05
|
|
Отправлено: 30.11.16 11:24. Заголовок: SergKis По поводу к..
SergKis цитата: | По поводу краткости записи |
| Да уж, на счет краткости слов нет. 1) Почему-то периодически вылетает программа (ваша редакция) с ошибкой - Выход за границы массива. Связь не уловил. 2) Перенес код с тестовой в настоящую программу. Комбобокс создается , но почему-то на первом слева поле, где его не должно быть
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 621
Зарегистрирован: 13.10.05
|
|
Отправлено: 30.11.16 11:29. Заголовок: Колонки я добавляю т..
Колонки я добавляю так цитата: | ... ADD COLUMN TO Brw_1 DATA FieldWBlock(.. ... |
|
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1050
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.11.16 12:00. Заголовок: Vlad04 пишет: Почем..
Vlad04 пишет: цитата: | Почему-то периодически вылетает программа (ваша редакция) с ошибкой |
| Проверь эту строку в примере цитата: | COLSIZES 50,130,130,130,130,130 |
| TBROWSE имеет 5 колонок, а размеры установлены для шести колонок Отсюда имеем вылет в методе :nAtColl() P.S. Поправил эту бяку в исходнике библиотеки TsBrowse, теперь не вылетает
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 622
Зарегистрирован: 13.10.05
|
|
Отправлено: 30.11.16 12:44. Заголовок: gfilatov2002 теперь..
gfilatov2002 Да, всё нормально. А что же определяет привязку комбобокса к колонкам ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1335
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.11.16 20:52. Заголовок: Vlad04 пишет А что ж..
Vlad04 пишет цитата: | А что же определяет привязку комбобокса к колонкам ? |
| :SetData( nColumn, bData, aList ) nColumn (номер колонки) может быть задано симв. именем колонки из ADD .... NAME ... :GetColumn(5):cName := "..." :LoadFields(.T.\.F.) ставит :cName от имени поля
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 623
Зарегистрирован: 13.10.05
|
|
Отправлено: 01.12.16 11:21. Заголовок: SergKis Все хорошо...
SergKis Все хорошо. Если указываешь НОМЕР колонки - происходит правильная привязка комбобокса .
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 626
Зарегистрирован: 13.10.05
|
|
Отправлено: 04.12.16 17:38. Заголовок: TsBrowse и дизайнер
TsBrowse и дизайнер Работа с компонентами оказывается отличается, если форму вы построили в дизайнере или описали в программном коде. Это возможно связано с видимостью переменных. Вот пример построения TsBrowse в IDE, который идет в поставке MiniGui. Добавим на форму компоненты, связанные с TsBrowse (вполне обычная ситуация) [url=https://cloud.mail.ru/public/4taw/Yc13QvLBM]TsBrowse TsBrowse[/url] Компилируется без ошибок, но при запуске не работает
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|