Автор | Сообщение |
|
| постоянный участник
|
Пост 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:....
|
|
|
Ответов - 181
, стр:
1
2
3
4
5
6
7
8
9
10
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 3940
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.11.21 10:20. Заголовок: Haz пишет Если менят..
Haz пишет цитата: | Если менять системно, то надо вводить 33 параметр в эту функцию |
| Сделал без блока кода. Кинул Андрею тестировать. Назвал переменные DATA nBmpMaskCell INIT 0x008800C6 // SRCAND DATA nBmpMaskHead INIT 0x008800C6 // SRCAND DATA nBmpMaskFoot INIT 0x008800C6 // SRCAND DATA nBmpMaskSpcHd INIT 0x008800C6 // SRCAND Установка такая работает STATIC FUNCTION myBrwEnum( oBrw, nOneCol ) LOCAL oCol, nI := 0, nCnt := 0 DEFAULT nOneCol := 1 FOR EACH oCol IN oBrw:aColumns nI++ oCol:cSpcHeading := NIL oCol:cSpcHeading := IIF( nI == nOneCol, "#" , "+" ) IF nI > nOneCol IF oCol:lVisible oCol:cSpcHeading := hb_ntos( ++nCnt ) oCol:nBmpMaskHead := 0x00CC0020 // SRCCOPY oCol:nBmpMaskSpcHd := 0x00CC0020 // SRCCOPY ENDIF ENDIF NEXT Для Super Header добавился 15 элемент, т.е. oBrw:aSuperHead[ nI, 15 ] := 0x00CC0020 // SRCCOPY
|
|
|
|
| |
Пост N: 1806
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.11.21 10:34. Заголовок: SergKis пишет: Сдел..
SergKis пишет: цитата: | Сделал без блока кода. Кинул Андрею тестировать. Назвал переменные |
| вроде должно все пройти нормально . Пробовал в СИ правку что выше давал. тоже работает
|
|
|
|
| постоянный участник
|
Пост N: 7124
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.11.21 22:17. Заголовок: Сергей сделал задани..
Сергей сделал задание константы для маски показа картинки. Я прикрутил менюшку для проверки этих масок. Есть несколько интересных масок. Выглядит вот так:
|
|
|
|
| |
Пост N: 207
Зарегистрирован: 17.10.05
|
|
Отправлено: 29.11.21 17:47. Заголовок: Не меняется Height заголовка
Понадобилось длинный заголовок колонки разделить на строки и показать меньшим шрифтом. Но высота заголовка получилась как для стандартного фонта oBrw. И в итоге половина высоты заголовка - пустая. Если поменять Height потом в OnInit - сдвигаются все строки. Нашел ошибку в h_tbrowse.prg: функция STATIC FUNCTION SetHeights( oBrw ) Строка 15787: hFont := iif( hFont == NIL, 0, oBrw:hFont ) -> высоту заголовка по любому расчитывает по стандартному фонту. Самому менять каждый раз - не выход, прошу поменять, хотя бы на такое: hFont := iif( hFont == NIL, 0, hFont )
|
|
|
|
| moderator
|
Пост N: 1951
Зарегистрирован: 11.02.10
|
|
Отправлено: 29.11.21 20:31. Заголовок: krutoff пишет: hFon..
krutoff пишет: цитата: | hFont := iif( hFont == NIL, 0, hFont ) |
| Поправил, конечно (в трех местах - заголовок, подвал и ячейка). Благодарю за помощь
|
|
|
|
| постоянный участник
|
Пост N: 7152
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.12.21 19:31. Заголовок: Смотрю код в термина..
Смотрю код в терминалке hb_cdpSelect( "RU1251" ) use STREET new Browse() use А можно так же сделать для ТСБ ? Определить параметры по умолчанию и открывать для просмотра базу. А то чтобы просто показать базу, кода приходиться просто немеренно писать. Колонку SELECTOR и ORDKEYNO и ENUMERATOR включать сразу
|
|
|
|
| |
Пост N: 1818
Зарегистрирован: 20.02.11
|
|
Отправлено: 01.12.21 23:33. Заголовок: Andrey пишет: use S..
Andrey пишет: цитата: | use STREET new Browse() use |
| Все тоже самое Use street new Sbrowse() Use Andrey пишет: цитата: | Колонку SELECTOR и ORDKEYNO и ENUMERATOR включать сразу |
| Тогда немеряно кода придется писать всем, кому селекторы и нумераторы нафиг не нужны. Не нравится sBrowse(), в чем проблема написать один раз смотровой тсб под себя, оформить в виде библиотеки чтоб не таскать исходник по проектам.
|
|
|
|
| постоянный участник
|
Пост N: 3952
Зарегистрирован: 17.02.12
|
|
Отправлено: 01.12.21 23:50. Заголовок: Andrey пишет Колонку..
Andrey пишет цитата: | Колонку SELECTOR и ORDKEYNO и ENUMERATOR включать сразу |
| Ты же сам всегда хочешь их иметь DEFINE TBROWSE &cTabl OBJ oBrw CELL ; AT nYBrw, nXBrw ALIAS cAls WIDTH nWBrw HEIGHT nHBrw ; FONT aTsbFont ; // все фонты для таблицы BRUSH aBrush ; // цвет фона под таблицей COLORS aColors ; // все цвета таблицы BACKCOLOR aBackColor ; // фон таблицы - совпадает с фоном окна HEADERS aHeader ; // список шапки колонок таблицы JUSTIFY aAlign ; // список отбивки колонок таблицы COLUMNS aField ; // список наименований колонок таблицы NAMES aNames ; // список полей базы колонок таблицы EDITCOLS aEdit ; // массив данных для редактирования колонок .T.\.F.\Nil>\.T\.F.\NIL FOOTERS aFooter ; // список подвала колонок таблицы SIZES aFSize ; // ширина колонок таблицы LOADFIELDS ; // автоматическое создание столбцов по полям активной базы данных GOTFOCUSSELECT ; EMPTYVALUE ; FIXED ; // активирует функцию двойного курсора на закрепленных столбцах COLNUMBER aNumer ; // виртуальная колонка с нумерацией ENUMERATOR ; // нумерация колонок LOCK ; // автоматическая блокировка записи при вводе в базу данных SELECTOR xSelector ; // первая колонка - селектор записей ON INIT {|ob| myBrwInit( ob ) } // настройки таблицы - смотреть ниже Поставь в nil все задаваемые параметры в DEFINE ... кроме ON INIT ... и начиная с FONT ... Должен сработать :LoadFields(), возможно надо задать цвет для правильной работы, что то такое aColors := {} AAdd(aColors, { CLR_FOCUSB, { |a,b,c| If( c:nCell == b, n_RGB1, n_RGB3 ) } } ) AAdd(aColors, { CLR_SELEF , GetSysColor( COLOR_WINDOWTEXT ) } ) AAdd(aColors, { CLR_SELEB , { |a,b,c| If( c:nCell == b, n_RGB2, n_RGB3 ) } } ) PS. Точно не помню, вроде были правки, но может путаю со своей версией (все NIL у меня работают), а в hmg нет, не стыковка по aHeader := NIL и aField := NIL, т.к. они идут внутри aHeader := {NIL} и aField := {NIL} - это ломало тсб. Надо заполнить их массивами от имен полей. Начни с NIL все, если свалится заполни aHeader := {...} и aField := {...} от полей
|
|
|
|
| |
Пост N: 208
Зарегистрирован: 17.10.05
|
|
Отправлено: 04.12.21 13:36. Заголовок: Ситуация возникает очень редко, но...
Я сформировал динамически TSBrowse и шапка из-за большого к-ва строк заняла почти все место. В итоге - показывается только одна строка из нескольких. Когда я на первой строке нажимаю клавишу Up а потом Down -> то TSBrowse рисует эту первую строку в заголовке таблицы. Нашел место, где можно поправить. Прошу изменить в h_tbrowse.prg строку 7464 ::nRowPos := nLines на -> ::nRowPos := nLines + IIF(nLines==1,1,0)
|
|
|
|
| moderator
|
Пост N: 1960
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.12.21 14:45. Заголовок: krutoff пишет: можн..
krutoff пишет: цитата: | можно поправить. Прошу изменить в h_tbrowse.prg |
| Ok
|
|
|
|
| постоянный участник
|
Пост N: 3979
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.12.21 14:46. Заголовок: Haz Игорь, ты вроде,..
Haz Игорь, ты вроде, разбирался с VScrollBar, HScrollBar тсб, как их активировать в примере Tsb_2tsb ? На 1-м тсб место под них есть, а отображения нет, перемещение ячейки в фокусе мало что дает. Я не смотрел V\H Bar, т.к. в моей версии (тсб 7.0) два тсб на окне не фурычат. Может подскажешь что ?
|
|
|
|
|
| постоянный участник
|
Пост N: 3981
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.12.21 16:49. Заголовок: Игорь Все норм, поня..
Игорь Все норм, понял, "где собака порылась". Надо DO EVENTS поставить, дать возможность отрисовать все ... oBrw1 := _TBrowse( NIL, "CUST1", "Brw_1", nY, nX, nW, nH ) AEval( oBrw1:aColumns, {| oCol | oCol:lFixLite := .T., ; oCol:lEdit := .T., ; oCol:lOnGotFocusSelect := .T., ; oCol:lEmptyValToChar := .T. } ) DO EVENTS nY += nH + 1 nH -= 1 oBrw2 := _TBrowse( NIL, "CUST2", "Brw_2", nY, nX, nW, nH ) AEval( oBrw2:aColumns, {| oCol | oCol:lFixLite := .T., ; oCol:lEdit := .T., ; oCol:lOnGotFocusSelect := .T., ; oCol:lEmptyValToChar := .T. } ) DO EVENTS oBrw1:SetFocus() //oBrw1:Refresh() DO EVENTS ...
|
|
|
|
| |
Пост N: 213
Зарегистрирован: 17.10.05
|
|
Отправлено: 10.12.21 14:13. Заголовок: TSBrowse
Столкнулся со странной ситуацией, когда TSBrowse вылелает по ошибке в строке 9627 Error BASE/1132 Переполнение массива: Ошибочное количество аргументов Args: [1] = A { ... } length: 6 [2] = N 0 Ошибка плавающая и возникает не всегда. Прошу немного изменить код в этой строке, он практически ничего не меняет, но ошибка пропадает: old: ELSEIF nMsg == WM_DESTROY .AND. ! Empty( ::aColumns ) .AND. ::aColumns[ ::nCell ]:oEdit != NIL New: ELSEIF nMsg == WM_DESTROY .AND. ! Empty( ::aColumns ) .AND. ::nCell > 0 .AND. ::aColumns[ ::nCell ]:oEdit != NIL
|
|
|
|
| постоянный участник
|
Пост N: 3988
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.12.21 14:25. Заголовок: krutoff пишет .AND. ..
krutoff пишет А как вы получаете :nCell := 0 ? У вас ! Empty( ::aColumns ), т.е. колонки заданы ... У меня не было таких случаев. Даже :nColumn(<имя отсутствует>) дает 1 По мне, правка, мало что дает, в др. местах конструкция, типа, :aColumns[ :nCell ] много где применяется.
|
|
|
|
| |
Пост N: 214
Зарегистрирован: 17.10.05
|
|
Отправлено: 10.12.21 17:28. Заголовок: SergKis пишет: А ка..
SergKis пишет: цитата: | А как вы получаете :nCell := 0 |
| Сергей, сам не понимаю. CHILD форму создаю динамически, на ней 2 броуза ( два алиаса ) и куча контролов get, editbox и т.д. Причем обработка броузов делает одна и та же функция, но все переменные (алиасы, названия броузов и т.д. ) внутри броуза навесил на oKeyData(). Если в моей форме создается динамически один броуз - все отрабатывает нормально, а если 2 - вылетает. Сделал кучу отладки - и вышел на эту строку. ::nCell в отладке показывает ненулевое значение, oEdit = NiL Причем, если строку разделяю, откусываю подстроку .AND. ::aColumns[ ::nCell ]:oEdit != NIL и прописываю ниже, как отдельное условие IF ::aColumns[ ::nCell ]:oEdit != NIL - все тоже проходит Ок... Кроме этого места нигде не вылетает, может DESTROY цепляет?, но опять же вылет идет уже на 1-м броузе, а не на 2-м.
|
|
|
|
| постоянный участник
|
Пост N: 3989
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.12.21 17:50. Заголовок: krutoff пишет один ..
krutoff пишет цитата: | один броуз - все отрабатывает нормально, а если 2 - вылетает. |
| Попробуйте добавить DO EVENS или DoEvents() в блоки кода, возможно, что то не успевает отработать, прорисовать, т.е. :nCell == 0 не должно быть. Посмотрите завершение Edit, т.к. идет WM_DESTROY при ::aColumns[ ::nCell ]:oEdit != NIL, созданном объекте для edit, т.е. работа в :Edit и его завершение. Может oBrw:IsEdit применить надо ? Например, если открыт TGetBox и даем oBrw:SetFocus(), он закрывается, но :nCell в :Edit и завершающих :Edit..., меняется только для перестановки от oCol:nEditMove - может там что то происходит. Правку, предложенную, сделать не трудно, но :nCell := 0 не должно быть, источник надо бы найти Вместо CHILD MODAL можете попробовать ?
|
|
|
|
| |
Пост N: 1819
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.12.21 19:27. Заголовок: krutoff пишет: сам ..
krutoff пишет: Кажется мне, что это накладки локальной переменной в каком то из блоков кода. Оба бровса в одной функции создаются скорее всего и на переменных экономите ( к примеру oBrw используется в обоих бровсах и в блоках кода )
|
|
|
|
| |
Пост N: 215
Зарегистрирован: 17.10.05
|
|
Отправлено: 10.12.21 20:26. Заголовок: SergKis пишет: Вмес..
SergKis пишет: цитата: | Вместо CHILD MODAL можете попробовать ? |
| Спасибо, MODAL отрабатывает, я это уже проверил, но если модал, то внутренние окна у меня сделаны CHILD ( для seek ) - и тогда не откроются, и надо тоже только модальные, а не ice. DoEvents() и oBrw:IsEdit буду тестировать, спасибо за подсказку, я на основе oBrw строю форму для редактирования и поэтому oBrw:IsEdit думаю, всегда .F.
|
|
|
|
| |
Пост N: 216
Зарегистрирован: 17.10.05
|
|
Отправлено: 10.12.21 20:30. Заголовок: Haz пишет: Кажется ..
Haz пишет: цитата: | Кажется мне, что это накладки локальной переменной в каком то из блоков кода. |
| Спасибо!, мог конечно, и не заметить, но доп.переменные только в классе TBrowse (добавлял __objAddData() ) и oKeyData(). Проверял, проверю еще раз, спасибо. А oBrw -> имени у меня нет, вообще имя oBE - и то, только в параметрах функций. И везде перепроверил на соответствие oBE:cParentWnd и oBE:cControlName. показали два разных Brows'a.
|
|
|
|
| постоянный участник
|
Пост N: 3990
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.12.21 21:06. Заголовок: krutoff MODAL отраба..
krutoff цитата: | MODAL отрабатывает, я это уже проверил, но если модал, то внутренние окна у меня сделаны CHILD ( для seek ) - и не открываются, а тогда надо тоже только модальные, а не ice |
| Желательно, перейти на MODAL (мной замечено, что они понадежнее\стабильнее CHILD) + по child можно "неожиданно" перереключаться не туда и завершать окна с вопросом .... Надо добавлять установку родителя перед и восстанавливать после, переменная _hmg_InplaceParentHandle (первое окно modal после MAIN, STANDARD, этого делать не надо). цитата: | я на основе oBrw строю форму для редактирования |
| Это как в примере Tsb_DemoMdi - карточка-запись в тсб ( ф-я MdiChildCard() ) ? цитата: | поэтому oBrw:IsEdit думаю, всегда .F. |
| Если в oCol:oEdit не NIL, то внешние попытки что то делать, требуют проверки oBrw:IsEdi, например ON KEY TAB ACTION {|cf| cf := ThisWindow.FocusedControl, ; iif( cf == "Brw_1", This.Brw_2.SetFocus, This.Brw_1.SetFocus ) } ON KEY SHIFT+TAB ACTION {|cf| cf := ThisWindow.FocusedControl, ; iif( cf == "Brw_1", This.Brw_2.SetFocus, This.Brw_1.SetFocus ) } ON KEY ESCAPE ACTION ( iif( oBrw1:IsEdit, oBrw1:SetFocus(), ; iif( oBrw2:IsEdit, oBrw2:SetFocus(), ; ThisWindow.Release ) ) ) TAB и SHIFT+TAB при включенной ячейки на :Edit() отработают нормально, а ESCAPE надо проверять и при вкл. :Edit() сначала закрывать, что бы не потерять данные, введенные в др. контролы
|
|
|
Ответов - 181
, стр:
1
2
3
4
5
6
7
8
9
10
All
[только новые]
|
|