On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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:....



Спасибо: 0 
Профиль
Ответов - 301 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]


Haz
администратор




Пост N: 118
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.12.13 19:37. Заголовок: Практически все , п..


Практически все , посмотри в исходнике класс TSBrowse. Почти все из DATA может быть определено через oBrw: ... или oBrw:aColumns[x]: ...

Что конкретно - то интересует ?

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


Пост N: 421
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 20.12.13 06:37. Заголовок: посмотри в исходнике..



 цитата:
посмотри в исходнике класс TSBrowse.


Смотрел . Там столько

Основные , относящиеся в целом к Бровз
ALIAS
OF Form1
WIDTH
HEIGHT
FONT
SIZE
ON DBLCLICK
ON GOTFOCUS
AUTOFILTER
CELLED EDIT
VALUE nRec
GRID
и другие, которыми сами пользуетесь.

С колонками, там вроде, понятнее. В примерах они отдельно обрабатываются.

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 119
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.12.13 14:36. Заголовок: ALIAS - можно заме..


ALIAS - можно заменить через oBrw:cAlis := ... , после этого oBrw:Reset() и только при условии совпадения полей в старом и новом алиасе (иначе нужно переопределять колонки).

OF FORM - не приходилось , но вроде и не меняется, задается при инициализации
WIDTH, HEIGHT - меняется через oBrw:Resize( .... )
FONT, SIZE - меняется через oBrw:ChangeFont()
ON DblClick - напрямую через oBrw: не задать , но можно определить через переменные MiniGui _HMG_aControlProcedures , и _HMG_aControlDblClick
ON GOTFOCUS - через oBrw:bGotFocus
AUTOFILTER - только через инициализацию
EDIT - через oBrw:oCol :lEdit
GRID - через через oBrw:lCellBrw

Владимир, какая цель стоит за этой заменой ? От этого зависит что и когда менять.
К примеру задача - интеррактивно менять шрифт в бровсе решается так;
1) Получить список установленных шрифтов
2) Выбрать нужный шрифт из списка, задать свойства шрифта ( размер, наклон и прочее )
3) Определить шрифт через F1 := _DefineFont ( ...... )
4) получить хендл через H1 := GetFontHandle( F1 )
5) Изменить шрифт в бровсе oBrw:ChangeFont( H1, , 1 )
6) Изменить высоту строк бровса под новую высоту шрифта через oBrw:nHeightCell
7) Перерисовсть бровс oBrw:Refresh(.T.)

вот такой простой алгоритм :)



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




Пост N: 3183
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.12.13 16:04. Заголовок: А как поменять цвет ..


А как поменять цвет: скролинга и левого бока Tbrowsa ?



Спасибо: 0 
Профиль
Haz
администратор




Пост N: 120
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.12.13 16:23. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как поменять цвет: скролинга и левого бока Tbrowsa ?



цвет скрола определен в :WinNew() как локальные переменные которым назначаются системные значения
nClrText := GetSysColor( COLOR_WINDOW ),;
nClrBack := GetSysColor( COLOR_SCROLLBAR ),;

следовательно без изменения системных значений или изменения метода WinNew() - никак (

с левым краем (Selector) все оч просто - перед END TBROWSE определить нужный цвет


oBrw:nClrHeadBack := RGB(255, 0, 0) // Пусть будет красный

END TBROWSE








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




Пост N: 3185
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.12.13 16:50. Заголовок: Haz пишет: изменени..


Haz пишет:

 цитата:
изменения метода WinNew() - никак (


Как тогда изменить метод WinNew() ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 121
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.12.13 17:02. Заголовок: Andrey пишет: Как т..


Andrey пишет:

 цитата:
Как тогда изменить метод WinNew()



примерно так добавить в TSBRowse DATA nScrollBackColor и перед END TBROWSE назначать цвет oBrw:nScrollBackColor := RGB(...)
и в вызов WinNew в h_tbrowse добавить переменную в нужной позиции oBrw:nScrollBackColor

ЗЫ Сам не пробовал , но есть же все исходники и они на харбуре писаны, меняй не хочу )

выше про левый край дописал )



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


Пост N: 422
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 20.12.13 20:24. Заголовок: Haz какая цель ст..


Haz

 цитата:
какая цель стоит за этой заменой ?


Попытка создать один TSBRows для всех справочников.
С формой все получилось и с BRows то же. Но у BRows возможности скромнее.
Определение BRows позволяет условие накладывать,а у TSBRows только некоторые

 цитата:

DEFINE BROWSE Browse_1
COL 10
ROW 30
WIDTH 400
HEIGHT 390
WIDTHS mWIDTHS
HEADERS mHEADERS
WORKAREA EkspeD
FIELDS mFIELDS

VALUE nRec
if nRegim <> 0
ON DBLCLICK (ThisWindow.Release ,Result:=.t.)
ALLOWEDIT .f.
else
ALLOWEDIT .t.
endif
...
END BROWSE



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


Пост N: 423
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 20.12.13 20:26. Заголовок: И мне надо не заменя..


И мне надо не заменять значения , а определить при
инициализации

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 122
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.12.13 22:44. Заголовок: понятно,в понедельни..


понятно,в понедельник отпишусь с работы .
если сейчас и коротко , то обработку условий лучше задавать не в инициализации бровса а при исполнении.
я инициализирую тбровсе из своей функции - упрощенный мой пример в samples\advanced\tsb_filter
но для всех процедур по ON ... задаю одну определенную функцию
пример ON CHANGE {|| TBRWChange( cBrw )

в самой TbrwChange организую CASE по имени объекта cBrw , где и проверяю все условие

в понедельник нарисую пример ))))


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




Пост N: 3191
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.12.13 20:44. Заголовок: Haz пишет: с левым ..


Haz пишет:

 цитата:
с левым краем (Selector) все оч просто - перед END TBROWSE определить нужный цвет
oBrw:nClrHeadBack := RGB(255, 0, 0) // Пусть будет красный






Спасибо: 0 
Профиль
Haz
администратор




Пост N: 123
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.12.13 11:04. Заголовок: как вариант сунуть с..


как вариант сунуть свою bmp с нужным фоном )

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




Пост N: 3193
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.12.13 11:29. Заголовок: Haz пишет: сунуть с..


Haz пишет:

 цитата:
сунуть свою bmp с нужным фоном )


А как ? И куда ?
Допустим, сделал я свою bmp. Разместил в ресурс проекта. А дальше как ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 124
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.12.13 21:04. Заголовок: а дальше просто чита..


а дальше просто читать мануал по этому классу и синтаксису команды DEFINE TBROWSE
==========================================================
SELECTOR clause to show an automatic first column with a record selector.
SELECTOR <.T.> means default black arrow selector.
SELECTOR <.F.> means just add the column with no graphic selector but the cursor's back color.
SELECTOR <oBmp> means to use your own (oBmp) graphic selector.
oBrw:nSelWidth data can be used to asign selector column's width.






Спасибо: 0 
Профиль
Haz
администратор




Пост N: 125
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.12.13 09:56. Заголовок: To Vlad04 Владимир,..


To Vlad04

Владимир, продолжим )
Я делаю примерно так ,
1) Описание oBrw вынес в функцию CreateBrowse()
2) Обработку событий типа DblClick, onChange и пр - тоже вынес в отдельные функции , которые как параметр принимают имя бровс объекта

FUNC CreateBrowse( cBrw, cParent, nRow, nCol, nWidth, nHeight, cAlias )
LOCAL i := 0
LOCAL n := 0
LOCAL cHeading := ""
LOCAL cStr := ""

PUBLIC &cBrw

cAlias := IF( cAlias == NIL, cBrw, cAlias )

DEFINE TBROWSE &cBrw At nRow, nCol ALIAS cAlias ;
OF &cParent ;
WIDTH nWidth ;
HEIGHT nHeight ;
COLORS { CLR_BLACK, CLR_BLUE } ;
FONT "MS Sans Serif" ;
SIZE 9 ;
CELL;
ON DBLCLICK TbrwDblClick(cBrw);
SELECTOR TRUE

END TBROWSE

&cBrw:LoadFields( TRUE )
&cBrw:lCellBrw := TRUE

&cBrw:nSelWidth := 16

&cBrw:bChange := { || TBrwChange( cBrw )}
&cBrw:bGotFocus := { || TBrwGotFocus( cBrw )}
&cBrw:bLostFocus := { || TBrwLostFocus( cBrw )}
&cBrw:bDelete := { || TBrwDelete( cBrw )}

DoMethod(cParent,cBrw,"SetFocus")

RETURN &cBrw


Далее в функциях обработки событий проверяю их какого бровса вызвано событие и в зависимости от этого выполняю то или иное действие

Вот пример обработчика по CHANGE - при перемещении по базе документов - ставлю фильтр по пользователям в соседнем бровсе

FUNC TBrwChange( cBrw )
LOCAL cAlias := &cBrw:cAlias
cBrw := UPPER( cBrw )
DO CASE
CASE cBrw == "DOC"
cFilter := "ID_DOC = " + NTOC((cAlias)->ID)
USER->(DbSetFilter(cFilter))
USER->(DbGoTop())
TbRwReset('USER', TRUE)
END

IF &cBrw:nRowCount() == &cBrw:nRowPos()
&cBrw:Refresh( .F. )
ENDIF

IF &cBrw:nLogicPos() > 0 .and. &cBrw:nRowPos() == 1
&cBrw:Refresh( .F. )
ENDIF

RETURN NIL

Func TBrwReset( cBrw, lAll)
lAll := IF( lAll == NIL, FALSE, lAll )
&cBrw:Reset()
IF &cBrw:nLen>0
&cBrw:GoTop()
END
&cBrw:Refresh( lAll )
RETURN NIL


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




Пост N: 283
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.12.13 14:41. Заголовок: Vlad04 чтобы несколь..


Vlad04
чтобы несколько упростить вид предлагаю писать так:
...
END TBROWSE

nInd := GetControlIndex(cForm, cBrw) // index
oBrw := _HMG_aControlIds [ nInd ] // object
и далее по тексту вместо &cBrw:.... использовать oBrw:...


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 126
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.12.13 16:37. Заголовок: согласен, чтоб не пе..


согласен, чтоб не пестрило от макроподстановок можно и еще упростить )
oBrw := &cBrw
и далее по тексту ...



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


Пост N: 424
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 23.12.13 17:26. Заголовок: Ок Понятно, буду про..


Ок
Понятно, буду пробовать
Спасибо

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




Пост N: 3201
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.01.14 14:01. Заголовок: Подскажите пожалуйст..


Подскажите пожалуйста, как сделать обработку по клавишам в TBROWSE ?




Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 543
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.01.14 15:53. Заголовок: Andrey пишет: как с..


Andrey пишет:

 цитата:
как сделать обработку по клавишам в TBROWSE ?


По-видимому, как то так

 цитата:
oBrw:bKeyDown := { | nKey | If( nKey == VK_RETURN .or. nKey == VK_ESCAPE, ;
MyAction(), Nil ), lOk := nKey != VK_ESCAPE }



Спасибо: 0 
Профиль
Ответов - 301 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 6
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет