On-line: Haz, Мирослав, гостей 0. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник


Пост 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:....



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 180 , стр: 1 2 3 4 5 6 7 8 9 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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1806
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.11.21 10:34. Заголовок: SergKis пишет: Сдел..


SergKis пишет:

 цитата:
Сделал без блока кода. Кинул Андрею тестировать. Назвал переменные


вроде должно все пройти нормально . Пробовал в СИ правку что выше давал. тоже работает

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7124
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.11.21 22:17. Заголовок: Сергей сделал задани..


Сергей сделал задание константы для маски показа картинки.
Я прикрутил менюшку для проверки этих масок.
Есть несколько интересных масок.
Выглядит вот так:


Спасибо: 0 
ПрофильЦитата Ответить





Пост 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 )

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1951
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.11.21 20:31. Заголовок: krutoff пишет: hFon..


krutoff пишет:

 цитата:
hFont := iif( hFont == NIL, 0, hFont )


Поправил, конечно (в трех местах - заголовок, подвал и ячейка).
Благодарю за помощь

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7152
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.12.21 19:31. Заголовок: Смотрю код в термина..


Смотрю код в терминалке
hb_cdpSelect( "RU1251" ) 
use STREET new
Browse()
use


А можно так же сделать для ТСБ ?
Определить параметры по умолчанию и открывать для просмотра базу.
А то чтобы просто показать базу, кода приходиться просто немеренно писать.
Колонку SELECTOR и ORDKEYNO и ENUMERATOR включать сразу

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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(), в чем проблема написать один раз смотровой тсб под себя, оформить в виде библиотеки чтоб не таскать исходник по проектам.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 := {...} от полей

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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)

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 1960
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.12.21 14:45. Заголовок: krutoff пишет: можн..


krutoff пишет:

 цитата:
можно поправить. Прошу изменить в h_tbrowse.prg


Ok

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3979
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.12.21 14:46. Заголовок: Haz Игорь, ты вроде,..


Haz
Игорь, ты вроде, разбирался с VScrollBar, HScrollBar тсб, как их активировать в примере Tsb_2tsb ?
На 1-м тсб место под них есть, а отображения нет, перемещение ячейки в фокусе мало что дает. Я не смотрел V\H Bar, т.к. в моей версии (тсб 7.0) два тсб на окне не фурычат. Может подскажешь что ?

Спасибо: 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

...


Спасибо: 0 
ПрофильЦитата Ответить





Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3988
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.12.21 14:25. Заголовок: krutoff пишет .AND. ..


krutoff пишет
 цитата:
.AND. ::nCell > 0


А как вы получаете :nCell := 0 ? У вас ! Empty( ::aColumns ), т.е. колонки заданы ...
У меня не было таких случаев. Даже :nColumn(<имя отсутствует>) дает 1
По мне, правка, мало что дает, в др. местах конструкция, типа, :aColumns[ :nCell ] много где применяется.

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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-м.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 можете попробовать ?

Спасибо: 1 
ПрофильЦитата Ответить
администратор




Пост N: 1819
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.12.21 19:27. Заголовок: krutoff пишет: сам ..


krutoff пишет:

 цитата:
сам не понимаю


Кажется мне, что это накладки локальной переменной в каком то из блоков кода.
Оба бровса в одной функции создаются скорее всего и на переменных экономите ( к примеру oBrw используется в обоих бровсах и в блоках кода )

Спасибо: 0 
ПрофильЦитата Ответить





Пост 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.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 216
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 10.12.21 20:30. Заголовок: Haz пишет: Кажется ..


Haz пишет:

 цитата:
Кажется мне, что это накладки локальной переменной в каком то из блоков кода.


Спасибо!, мог конечно, и не заметить, но доп.переменные только в классе TBrowse (добавлял __objAddData() ) и oKeyData(). Проверял, проверю еще раз, спасибо.
А oBrw -> имени у меня нет, вообще имя oBE - и то, только в параметрах функций. И везде перепроверил на соответствие oBE:cParentWnd и oBE:cControlName. показали два разных Brows'a.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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() сначала закрывать, что бы не потерять данные, введенные в др. контролы

Спасибо: 1 
ПрофильЦитата Ответить
Ответов - 180 , стр: 1 2 3 4 5 6 7 8 9 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 504
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет