On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
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 
Профиль
Andrey
постоянный участник




Пост N: 3202
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.01.14 16:11. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

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


Спасибо БОЛЬШОЕ !

А как еще сделать ввод (буквенный) в поле поиска (Search for:) но чтобы фокус оставался на маркере TBROWSE ?




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



Пост N: 42
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 31.01.14 09:46. Заголовок: Делаете обработку вв..


Делаете обработку ввода буковок в TBROWSE и пишете их из программы в поле вода:

&cBrw:bKeyDown := { | nKey | MyKeyAction(nKey), lOk := nKey != VK_ESCAPE }

STATIC FUNCTION MyKeyAction(l_Key)
DO CASE
CASE l_key==VK_BACK.or.l_key>31.and.l_key<242
if l_key==VK_BACK
if len(Form_0.Text_1.Value)>0
Form_0.Text_1.Value:=left(Form_0.Text_1.Value,len(Form_0.Text_1.Value)-1)
endif
else
if ( (l_key > 32 .AND. l_key < 254))
l_key := ASC(LatRus( CHR(l_key) ))
Form_0.Text_1.Value := Form_0.Text_1.Value+chr(l_key)
endif
endif
ENDCASE
SetFilterToDb()
oBrw_1:Refresh()
oBrw_1:Upstable()
Return Nil


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




Пост N: 3220
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.01.14 12:50. Заголовок: a_sidorov пишет: Де..


a_sidorov пишет:

 цитата:
Делаете обработку ввода буковок в TBROWSE и пишете их из программы в поле вода:


То что надо ! Спасибо большое !

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


Пост N: 152
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 31.01.14 14:07. Заголовок: Andrey пишет: Делае..


Andrey пишет:

 цитата:
Делаете обработку ввода буковок


Тогда к этому еще что-то типа -

case l_key=8//Backspace
If Len(Form_0.Text_1.Value)>=1
Form_0.Text_1.Value:=Left(Form_0.Text_1.Value,Len(Form_0.Text_1.Value)-1)
Endif


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




Пост N: 129
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 31.01.14 15:48. Заголовок: похоже на "велосипед"


обработка буковок уже есть в методе ::Seek( nKey ) класса TBrowse
остается только через определение своего блока bSeekChange присваивать что-то типа этого Form_0.Text_1.Value:= oBrw:cSeek

все лично проверено давно и работает, но есть парочка "НО"
1) должен быть индекс по полю по которому на буковки надо реагировать
2) не помню точно, но вроде в исходнике ::cSeek всегда в верхнем регистре и лечится убиранием UPPER(

ЗЫ: могу поискать пример - когдато делал нечто похожее на комбо в TBrowse но по базе ис использованием подчиненного Tbrowse. назначал и буфер Get объекта



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




Пост N: 3221
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.01.14 16:05. Заголовок: Haz пишет: ЗЫ: могу..


Haz пишет:

 цитата:
ЗЫ: могу поискать пример - когдато делал нечто похожее на комбо в TBrowse но по базе ис использованием подчиненного Tbrowse. назначал и буфер Get объекта


Пример в студию !

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




Пост N: 130
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 31.01.14 16:24. Заголовок: Andrey пишет: Приме..


Andrey пишет:

 цитата:
Пример в студию !



поищу, завтра выложу

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




Пост N: 132
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.02.14 12:29. Заголовок: Haz пишет: Пример в..


Haz пишет:

 цитата:
Пример в студию !



Поискал в архивах и собрал рабочий пример. Красоту не наводил.
Суть примера :
1)в базе хранится ID, а в TBrowse показываем строку из справочника по этому ID
2)в поле редактирования Tbrowse создается объект TBtnGet , через который лезем в справочник (тоже TBrowse)
3)при выборе из справочника стандартный метод ::Seek(nKey) обрабатывает клавиши , а блок bSeekChange - пишет то что набираем ( если найдено) в буфер Get объекта.



https://drive.google.com/file/d/0BxsLjKW148EQbzZhWkJMOHNKTkk/edit?usp=sharingk/edit?usp=sharing

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




Пост N: 3234
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.14 02:38. Заголовок: Как вернуть фокус вв..


Как вернуть фокус ввода обратно в TBROWSE после своей обработки ?

PUBLIC &cBrw

DEFINE TBROWSE &cBrw ;
AT nRow, nCol ;
....
&cBrw:bLDblClick:= { | nRow, nCol, nKeyFlags | MyAction() } // Двойной клик мышки

RETURN Nil
////////////////////////////////////////
FUNCTION MyAction()
LOCAL cText, cPole := ALLTRIM(FIELD->PNAME)

IF AT("[",cPole) > 0 // значит это директория
ChangeDirectory(Alltrim(cPole)) // сменить директорию
DIRECTORY->(Dbsetorder(ChoiHeader()-2))
RefreshBrowse()
oBrw_1:Reset()
ELSE
cText := "File: " + ALLTRIM(cPole) + CRLF + CRLF
cText += "Line: " + STR(oBrw_1:nLastPos) + CRLF + CRLF
cText += "Cell: " + STR(oBrw_1:nCell)
MsgInfo(cText)
?????? вот здесь вернуть .Setfocus
ENDIF
Return Nil




Спасибо: 1 
Профиль
serj



Пост N: 11
Зарегистрирован: 05.10.12
ссылка на сообщение  Отправлено: 18.02.14 05:13. Заголовок: Как вернуть фокус вв..



 цитата:
Как вернуть фокус ввода обратно в TBROWSE после своей обработки ?


DoMethod( cForm, oBrw_1, 'setfocus' )
DoMethod( cForm, oBrw_1, 'refresh' )

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




Пост N: 3235
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.14 10:24. Заголовок: serj пишет: DoMetho..


serj пишет:

 цитата:
DoMethod( cForm, oBrw_1, 'setfocus' )



Это понятно. Я наверно неправильно поставил вопрос.
Наверно нужно так:
Как получить переменные cForm и oBrw_1 без передачи параметров в функцию MyAction() ?

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




Пост N: 288
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.14 11:56. Заголовок: Andrey пишет:Как пол..


Andrey пишет:
 цитата:
Как получить переменные


Func My()
oBrw := &cBrw // ты же делал PUBLIC &cBrw
cForm := oBrw:cParentWnd
cBrwName := oBrw:cControlName
...

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




Пост N: 3236
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.14 12:54. Заголовок: Спасибо БОЛЬШОЕ Serg..


Спасибо БОЛЬШОЕ SergKis !

Что-то забывать стал уже пройденные этапы освоения МиниГуи...
Видно, когда урывками осваиваешь, материал плохо усваивается...

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




Пост N: 3237
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.14 13:03. Заголовок: SergKis пишет: oBrw..


SergKis пишет:

 цитата:
oBrw := &cBrw // ты же делал PUBLIC &cBrw
cForm := oBrw:cParentWnd



Не работает, вылетает с ошибкой:
Error BASE/1003 Variable does not exist: CBRW
Called from MYACTION(443)
Called from (b)BUTTONFORM0(256)

//////////////////////////////////////////////////////////////////////////////
FUNCTION MyAction()
LOCAL cText, cPole := ALLTRIM(FIELD->PNAME)
LOCAL oBrw := &cBrw // <----- 443 строка
LOCAL cForm := oBrw:cParentWnd
LOCAL cBrwName := oBrw:cControlName


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




Пост N: 133
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.02.14 14:28. Заголовок: Andrey пишет: OCAL ..


Andrey пишет:

 цитата:
OCAL oBrw := &cBrw



это не cBrw объявлена как PUBLIC, а та переменная, имя которой в локальной cBrw было на тот момент
при определении бровса было cBrw := "ИМЯ" ( где строка "ИМЯ" из твоего исходника )

тогда и объявлять надо LOCAL oBrw := &"ИМЯ"



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



Пост N: 12
Зарегистрирован: 05.10.12
ссылка на сообщение  Отправлено: 18.02.14 15:30. Заголовок: может так GetPropert..


может так
GetProperty (<cWindowName>[,<cControlName>] ,<cPropertyName>)--> PropertyValue


GetProperty(cForm,'oBrw','width')

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




Пост N: 134
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.02.14 15:41. Заголовок: serj пишет: GetProp..


serj пишет:

 цитата:
GetProperty(cForm,'oBrw','width')



по любому чтобы работать с методами объекта , нужно знать этот объект, проще будет не усложнять себе жизнь и передать cBrw параметром - MyAction( cBrw )
где без труда получить сам объект &cBrw и далее дергать его проперти, его методы или выдавать фокус, прятать и.т.д.

А так это похоже на операцию на гландах через (_|_)





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




Пост N: 3238
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.14 22:38. Заголовок: Haz пишет: А так эт..


Haz пишет:

 цитата:
А так это похоже на операцию на гландах через (_|_)



Понял, что я совсем заработался или отупел...

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




Пост N: 3242
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.02.14 18:18. Заголовок: Haz пишет: цвет скр..


Haz пишет:

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

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



Григорий, а можно добавить в библиотеку TsBrowse возможность изменения этих переменных ?
Есть ли у вас возможность связаться с автором этой библиотеки ?
Я понимаю, что можно самому добавить эти переменные и перекомпилировать библиотеку, но хотелось бы иметь эту возможность в стандартной библиотеке.

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




Пост N: 558
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.02.14 21:10. Заголовок: Andrey пишет: можно..


Andrey пишет:

 цитата:
можно добавить в библиотеку TsBrowse возможность изменения этих переменных ?


Это только значения по умолчанию для параметров функции WinNew()
Вот полный вызов этой функции со всеми параметрами:

 цитата:
WinNew( nMin, nMax, nPgStep, lVertical, oWnd, bUpAction,;
bDownAction, bPgUp, bPgDown, bPos, nClrText, nClrBack,;
lUpdate, bWhen, bValid )


Если Вы передадите при вызове этой функции свои параметры nClrText, nClrBack, то ...

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


Пост N: 425
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 24.02.14 08:09. Заголовок: gfilatov2002 Григор..


gfilatov2002
Григорий
Если вернуться к первому пункту поста.Посмотрите, может есть возможность переопределить Tbrowse так , чтобы он в программнике писался как Browse ( параметры не РАЗДЕЛЯЛЬСЬ символом ; )
DEFINE BROWSE Browse_1
COL 10
ROW 10
WIDTH 610
HEIGHT 390
....

В Tbrowse

DEFINE TBROWSE Brw_1 AT 0, 0 ALIAS "Employee" ;
COLORS {CLR_BLACK, CLR_NBLUE} ;
WIDTH nBrwWidth ;
HEIGHT nBrwHeight ;


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




Пост N: 559
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.02.14 12:01. Заголовок: Vlad04 пишет: может..


Vlad04 пишет:

 цитата:
может есть возможность переопределить Tbrowse так , чтобы он в программнике писался как Browse


В терминах библиотеки минигуи это называется альтернативный синтаксис. При этом становится удобнее написание текста программы, но неоптимальным - генерируемый код. Если для Вас это необходимо, то Вы можете добавить требуемое описание в заголовочный файл include\i_altsyntax.ch (сейчас там этого нет ).

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




Пост N: 3254
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.14 13:09. Заголовок: Haz пишет: (иначе н..


Haz пишет:

 цитата:
(иначе нужно переопределять колонки)



Как можно определить свой показ колонок для TBROWSE, а то я совсем запутался...
Делаю так:
oBrw_1:aColumns[1]:cHeading := "Дата" + CRLF + "события"
oBrw_1:SetColSize(1, 50)
oBrw_1:aColumns[1]:nAlign := DT_CENTER
А поле базы как здесь определить ?


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




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


Andrey пишет:

 цитата:
А поле базы как здесь определить



через oBrw_1:aColumns[1]:bData

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




Пост N: 3850
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.03.14 16:01. Заголовок: Andrey пишет: А пол..


Andrey пишет:

 цитата:
А поле базы как здесь определить ?


Как то так
oBrw_1:aColumns[1]:bdata:=твой блок кода для выборки данных

Если чего не знаешь смотри Tsbrowse.ch

 цитата:

#xcommand MODIFY [ CONTROL ] [ TBROWSE ] <oBrw> COLUMN <nColumn> [ PROPERTY ] DATA TO <bData>;
=> <oBrw>:aColumns\[ <nColumn> \]:bData := <bData>





PS
Haz
Опередил ;)

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




Пост N: 140
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.03.14 16:17. Заголовок: Dima пишет: Если че..


Dima пишет:

 цитата:
Если чего не знаешь смотри Tsbrowse.ch



согласен и еще можно посмотреть в TsColumn.prg и h_browse.prg там оч много интересного, к примеру
DATA bData // Mandatory code block to return column data

Dima пишет:

 цитата:
Опередил ;)


я не специально ))






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




Пост N: 3255
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.14 16:22. Заголовок: Haz пишет: Haz Опер..


Haz пишет:

 цитата:
Haz
Опередил ;)


Спасибо вам ОГРОМНОЕ !
Хорошо что есть кто отвечает на вопросы !

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




Пост N: 3256
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.14 16:25. Заголовок: Dima пишет: Как то ..


Dima пишет:

 цитата:
Как то так
oBrw_1:aColumns[1]:bdata:=твой блок кода для выборки данных


А если нужно выводить поле по шаблону, то как делать ?
FIELD->NTIME
PICTURE - "99:99"

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




Пост N: 3851
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.03.14 16:43. Заголовок: Andrey Наверное так..


Andrey
Наверное так
oBrw_1:aColumns[1]:Cpicture:="99:99"

Haz пишет:

 цитата:
согласен и еще можно посмотреть в TsColumn.prg и h_browse.prg там оч много интересного


+1


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




Пост N: 3257
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.03.14 21:42. Заголовок: Чем больше делаешь, ..


Чем больше делаешь, тем больше вопросов возникает...
( чем дальше в лес, тем больше дров ! )

Подскажите пожалуйста:
1) Почему дата не выходит полностью в первом столбце ?
2) Как убрать выделение серым цветом заголовка первого столбца ?
3) Как установить горизонтальный скролинг ?
4) Я перечислил ВЫВОД 7 полей, а выводиться больше (да еще на английском), почему ?


Ну и еще до кучи, индексы показываются неправильно....
Вот сам проект http://files.mail.ru/FB59CE79DA39455098065F18BE9FB27A

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




Пост N: 141
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.03.14 10:03. Заголовок: Andrey пишет: Чем б..


Andrey пишет:

 цитата:
Чем больше делаешь, тем больше вопросов возникает...



1 - не достаточна заявленная ширина колонок установлено 50 и в описании колонки 2 !!!! . центрировать дату лучше по DT_CENTER . :cPicture := "99.99.9999" лишнее т.к. есть SET DATE FORMAT "DD.MM.YYYY"

2. присвоить &cBrw:SetColor( { 14 } .... то же что и в &cBrw:SetColor( { 4 },
подробнее см. h_browse.prg как рисуются заголовки в METHOD DrawHeaders( lFooters ) CLASS TSBrowse

3. убить в своем коде его отключение &cBrw:lNoHScroll := .T. и &cBrw:ResetVScroll()

4. Не перечислил а переопределил , остальные загружены дефолтом &cBrw:LoadFields( .F. )

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




Пост N: 3258
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.03.14 22:21. Заголовок: Haz пишет: 1 - не д..


Haz пишет:

 цитата:
1 - не достаточна заявленная ширина колонок установлено 50 и в описании колонки 2 !!!! .


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

2) Сделал как порекомендовали:
&cBrw:SetColor( { 14 }, { { || { Rgb( 43, 149, 168 ), Rgb( 0, 54, 94 )}}}) // Шапка выделения индекса
Результат все равно не тот. Хотелосб бы ВООБЩЕ отказаться от сортировки. Если это нельзя, то тогда понятно.


3) Получилось.

4) А как тогда задать поля из базы ТОЛЬКО те которые нужны ?
&cBrw:LoadFields( .T. ) - тоже не работает....






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




Пост N: 142
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.03.14 09:28. Заголовок: Andrey пишет: Понял..


Andrey пишет:

 цитата:
Понял, что из-за маленького размера второй колонки, не получалась первая. Буду знать теперь.



Вижу что не понял в твоем исходнике в коде описания параметров ВТОРОЙ колонки есть ОПЕЧАТКА - снова устанавливаешь ширину ПЕРВОЙ oBrw_1:SetColSize(1, 50)

Andrey пишет:

 цитата:
Хотелосб бы ВООБЩЕ отказаться от сортировки


нет ничего проще oBrw_1:lNoChangeOrd := .T.
PS. цитата из h_tbrowse.prg
"DATA lNoChangeOrd AS LOGICAL // avoids changing active order by double clicking on headers"
предвижу вопрос о цвете шрифта в первой колонке - ответ :SetColor( 13 .......)

и на последний вопрос
LoadFilds( .T. ) - просто разрешает редактированиме
Можно спрятать лишние HideColumns( nColumn , lHide ) - описание есть в справке по TSBrowse которая идет с поставкой MiniGui
или в том же исходнике библиотеки
Если много колонок бровс начинает немного тупить и если они не нужны в бровсе их лучше удалить через
METHOD DelColumn( nPos ) или добавлять только нужные изначально AddColumn( oColumn) - в справке этих методов нет , а в исходнике есть это как " ... видишь суслика ? .... а он там есть "



Андрей - найди время , посмотри исходники . Да они не маленькие , но там очень много интересного




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




Пост N: 3259
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.03.14 13:11. Заголовок: Haz пишет: Можно сп..


Haz пишет:

 цитата:
Можно спрятать лишние HideColumns( nColumn , lHide ) - описание есть в справке по TSBrowse которая идет с поставкой MiniGui


Да я это видел, но считать поля по каждой базе не совсем правильное решение. У меня есть базы имеющие 150 полей. Для показа нужно всего 15. Ладно, можно один раз перечислить. А когда новые поля в базу добавишь, нужно будет тогда ОПЯТЬ лезть в исходник и править его. ОЧЕНЬ НЕУДОБЕН этот метод.
Хочется как на Клипере создавать бровс.

Haz пишет:

 цитата:
или добавлять только нужные изначально AddColumn( oColumn) - в справке этих методов нет , а в исходнике есть это как " ... видишь суслика ? .... а он там есть "


Вот это уже лучше метод построения ! Буду смотреть.

Haz пишет:

 цитата:
- найди время , посмотри исходники . Да они не маленькие , но там очень много интересного


Буду смотреть, но многое не очевидно для меня. И изучение идет наскоками, основную работу никто не отменяет...

Haz Спасибо огромное за помощь !


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




Пост N: 3260
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.03.14 21:07. Заголовок: Haz пишет: нет ниче..


Haz пишет:

 цитата:
нет ничего проще oBrw_1:lNoChangeOrd := .T.


Не работает. Остается графический значок сортировки.
1) Как его убрать. Я конечно могу его закрасить фоном шапки таблицы и отдельной иконкой добавить в проект. Но это же не выход. Если нельзя убрать, то как тогда "передвинуть" всю эту красоту на 4 шапку таблицы: "Наименование события" ?

2) Как уменьшить высоту ячейки таблицы ?
Далал уже и &cBrw:nHeightCell += 8 // высота ячейки TBROWSE
Все равно размер не меняется.



Измененный проект тут - http://files.mail.ru/3784AE8B8AA3438C8CC0C8597D328584


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




Пост N: 143
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.03.14 10:42. Заголовок: Andrey пишет: Не ра..


Andrey пишет:

 цитата:
Не работает. Остается графический значок сортировки.



После oBrw_1:lNoChangeOrd := .T. добавь строку oBrw_1:nColOrder := 0 . должно сработать

Andrey пишет:

 цитата:
Все равно размер не меняется.



скорее всего в таблице есть мемо поле и ты его пихаешь в бровс . Удали колонку с мемо :DelColumn( 11 ) и высота строк станет управляемой

Следующий вопрос скорее всего будет - как показать мемо.
Отвечаю - создать на форме EditBox в режиме ReadOnly ( к примеру там где ноги ), а в oBrw_1 на событие ON CHANGE повесить функцию или блок который делает
EditBox.Value := (oBrw_1:cAlias)->MEMO

PS и исправь наконец у себя опечатку в коде 1 на 2

oBrw_1:aColumns[2]:cHeading := "Время" + CRLF + "события"
oBrw_1:SetColSize(1, 70)
oBrw_1:aColumns[2]:nAlign := DT_CENTER
oBrw_1:aColumns[2]:bData := {||LOG_DBF->TIME }

PSS
и при попытке поиска будет вылет с ошибкой т.к. пытаешься привести в верхний регистр числовое поле UPPER(LOG_DBF->NEVENT)



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




Пост N: 3261
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.03.14 16:34. Заголовок: Уже получается лучше..


Уже получается лучше ! http://files.mail.ru/710FE7B921CC4EAEB7BF0FF766551373
Haz пишет:

 цитата:
Следующий вопрос скорее всего будет - как показать мемо.


Хотелось бы сделать показ мемо в отдельном (дополнительном) окне, через CheckBox ! Как это сделать ?
Т.к. мемо может быть большим и при желании можно было бы смотреть по желанию юзера.
Примерно так:


И еще возник вопрос, при перемещении курсора изменение позиции "Запись 0/0" в STATUSBAR - как сделать ?


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




Пост N: 144
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.03.14 20:04. Заголовок: Andrey пишет: Хотел..


Andrey пишет:

 цитата:
Хотелось бы сделать показ мемо в отдельном (дополнительном) окне



если примерно как на картинке то
добавить в бровс пустую колонку , дать ей болк выборки { || 'MEMO'}. разрешить редактирование :lEdit := .T.и через oBrw_1:aColumns[11]:bPrewEdit := {|| ...} вызывать функцию которая в окне показывает мемо, Эта функция должна вернуть FALSE ( ну или через BtnBox делать чтоб совсем как на картинке)

Andrey пишет:

 цитата:
при перемещении курсора изменение позиции



на ON CHANGE бровса повесить нвзначение элемену статусбара строки вида - NTOC(Recno()) + '/' + NTOC(RecCount())

PS. кстати в твоем примере oBrw_1:aColumns[]:bData не нужен тк и так LoadFilds() назначает дефолтловый блок

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




Пост N: 3263
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.03.14 14:22. Заголовок: Haz пишет: PS. кста..


Haz пишет:

 цитата:
PS. кстати в твоем примере oBrw_1:aColumns[]:bData не нужен тк и так LoadFilds() назначает дефолтловый блок


Так он у меня за комментирован в программе ! //LoadFields( cBrw, cParent )
И я все таки хочу собирать TBROWS ТОЛЬКО из своих полей.
Помоги пожалуйста в описании одной колонки, примеры смотрел, ни фига не понял.
Как эту строку:
ADD COLUMN TO TBROWSE &ob DATA ARRAY ELEMENT 1 ALIGN DT_CENTER, DT_CENTER SIZE 20 COLORS C_TEK, C_SYS
преобразовать до привычной Клиперовской:
oBrw_1:aColumns[1]:cHeading := "Дата" + CRLF + "события"
oBrw_1:SetColSize(1, 70)
oBrw_1:aColumns[1]:bData := {||LOG_DBF->DATE }
// oBrw_1:aColumns[1]:cPicture:="99.99.9999" - не обязательно
oBrw_1:aColumns[1]:nAlign := DT_CENTER



Haz пишет:

 цитата:
на ON CHANGE бровса повесить нвзначение элемену статусбара строки вида


Спасибо ! Работает.
ON CHANGE { || Form_0.StatusBar.Item(1) := " Запись: " + NTOC(Recno()) + '/' + NTOC(RecCount()) }
Потом заменю на показ значений по индексам.

Только при смещении мышкой строка Form_0.StatusBar.Item(1) - чиститься... вообще.

Как мышкой нажмешь, то появляется (клавиши нормально работают) !

Что за фигня, где исправить ? Это у меня где-то в коде или это обычное поведение TBROWSA ?




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




Пост N: 145
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 08.03.14 10:55. Заголовок: Andrey пишет: смотр..


Andrey пишет:

 цитата:
смотрел, ни фига не понял.


не там смотрел, посмотри как это делается в самом методе (не в функции) Loadfield - там как раз используется ::AddColumn

Andrey пишет:

 цитата:
Что за фигня, где исправить



первый элемент статусбара бровс без объявления войны забирает под свои сообщения делай его пустым, а свой вывод гони во второй



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




Пост N: 3264
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.03.14 13:33. Заголовок: Haz пишет: первый э..


Haz пишет:

 цитата:
первый элемент статусбара бровс без объявления войны забирает под свои сообщения


Спасибо ! Заработало !

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




Пост N: 3265
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.03.14 21:54. Заголовок: Сделал доп окно пока..


Сделал доп окно показа мемо поля.
Не активируется оно...
Видать неправильный вариант с окнами делаю (до этого не работал с такими окнами)...

При объявлении показа мемо-поля в другом окне: Form_1.Edit_Memo.Value := (oBrw_1:cAlias)->MEMO,
компилятор не собирает, выдает ошибку:
Скрытый текст

Что-то неправильно делаю, подскажите пожалуйста ?
Проект тут - http://files.mail.ru/DF44C802FA1E4821BC2E5CE6E6ED1EFA

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




Пост N: 146
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.03.14 11:38. Заголовок: Andrey пишет: Что-т..


Andrey пишет:

 цитата:
Что-то неправильно делаю



ну что явно в глаза бросается - попытка создать окно за пределами экрана ( где-то на высоте кнопки питания монитора ) AT nDesktopWidth-100,0

PS по ошибке компилятора - он не знает что за окно ему суют, или DECLARE WINDOW Form_1 перед строкой с ошибкой напиши или SetProperty("Form_1","Edit_Memo", "Value", (oBrw_1:cAlias)->MEMO ) используй

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




Пост N: 3864
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.14 11:41. Заголовок: Haz пишет: попытка ..


Haz пишет:

 цитата:
попытка создать окно за пределами экрана ( где-то в районе кнопки питания )




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




Пост N: 3266
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.03.14 14:44. Заголовок: Haz пишет: ну что я..


Haz пишет:

 цитата:
ну что явно в глаза бросается - попытка создать окно за пределами экрана ( где-то на высоте кнопки питания монитора ) AT nDesktopWidth-100,0


Можно поставить и 0, 0 - окно все равно не появляется !!!

Haz пишет:

 цитата:
PS по ошибке компилятора - он не знает что за окно ему суют, или DECLARE WINDOW Form_1 перед строкой с ошибкой напиши или SetProperty("Form_1","Edit_Memo", "Value", (oBrw_1:cAlias)->MEMO ) используй


Поставил. Теперь вообще программа сваливается по ошибке:
Error: Control: Edit_Memo Of Form_1 Not defined.
Called from SETPROPERTY(3658)
Called from MYCHANGEBROWSE(361)


Я же писал, что что-то с окнами неправильно делаю ?
В этой проге ТРИ окна: MAIN (Form_Test), MODAL (Form_0) и еще CHILD (Form_1) !
Где то здесь собака зарыта. Я не работал с 3 окнами сразу.
Помогите эти окна разрулить....

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




Пост N: 147
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.03.14 15:20. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно поставить и 0, 0 - окно все равно не появляется



проверил, в твоем исходнике поставил 0, 0 - появляется

Andrey пишет:

 цитата:
Control: Edit_Memo Of Form_1 Not defined



BEGIN SEQUENCE WITH { |oErr| Break( oErr ) }
IF IsWindowDefined(Form_1)
SetProperty("Form_1", "Edit_Memo", "Value", (oBrw_1:cAlias)->MEMO )
END
END




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




Пост N: 565
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.03.14 15:31. Заголовок: Andrey пишет: В это..


Andrey пишет:

 цитата:
В этой проге ТРИ окна: MAIN (Form_Test), MODAL (Form_0) и еще CHILD (Form_1) !
Где то здесь собака зарыта. Я не работал с 3 окнами сразу.
Помогите эти окна разрулить....


Сделал так:
- определил Form_0 как CHILD TOPMOST

 цитата:
DEFINE WINDOW Form_0 ;
At 0, 0 ;
WIDTH 950 ;
HEIGHT 580 ;
TITLE cTitle ;
ICON "MSGDBF" ;
CHILD ;
TOPMOST ;
...


- определил Form_1 как CHILD NOSHOW

 цитата:
DEFINE WINDOW Form_1 ;
AT 0,nDesktopWidth-100 ;
WIDTH 100 ;
HEIGHT 140 ;
TITLE 'Мемо' ;
ICON "MSGDBF" ;
CHILD NOSHOW


и активировал его по команде

 цитата:
ACTIVATE WINDOW Form_1 NOWAIT




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




Пост N: 3267
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.03.14 15:32. Заголовок: Haz пишет: BEGIN SE..


Haz пишет:

 цитата:
BEGIN SEQUENCE WITH { |oErr| Break( oErr ) }
IF IsWindowDefined(Form_1)
SetProperty("Form_1", "Edit_Memo", "Value", (oBrw_1:cAlias)->MEMO )
END
END


Классная конструкция ! Буду теперь так использовать. Спасибо БОЛЬНОЕ !

Haz пишет:

 цитата:
проверил, в твоем исходнике поставил 0, 0 - появляется


А у меня нет !
Вот исходник, проверь пожалуйста его - http://files.mail.ru/4F239AE50FA543C194D16A0F636B53D6

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




Пост N: 3268
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.03.14 15:35. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
и активировал его по команде


Ну как всегда, Григорий всё по полочкам разложит !!! Рука мастера, тут уж ничего по другому и не сделаешь.
Спасибо БОЛЬШОЕ !!!

А что за "зверь" - TOPMOST ?

И как сделать чтобы Form_1 было всегда поверх других окон ?

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




Пост N: 148
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.03.14 15:42. Заголовок: Andrey пишет: Вот и..


Andrey пишет:

 цитата:
Вот исходник, проверь пожалуйста его



проверил - все появляется при установке чекбокса "примечание"в true



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




Пост N: 3269
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.03.14 15:51. Заголовок: Haz пишет: проверил..


Haz пишет:

 цитата:
проверил - все появляется при установке чекбокса "примечание"в true


Понял, спасибо !
После правки Григория окна заработали как надо !
Буду дальше делать !
Спасибо всем БОЛЬШОЕ !

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




Пост N: 3270
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.03.14 16:10. Заголовок: Рано радовался по ок..


Рано радовался по окнам.
Как закрыть окно Form_1 при завершении задачи, т.е. кнопки "Выход" формы Form_0 ?
DEFINE BUTTONEX Button_Exit
..........
CAPTION "Выход"
ACTION {|| Form_0.Release() }

При добавлении - ACTION {|| Form_0.Release(), Form_1.Release() } прога не собирается, выдает ошибку на этой строчке:
Dbf_Log.prg(189) Error E0030 Syntax error "syntax error at '.'"
1 error
No code generated.





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




Пост N: 149
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.03.14 20:11. Заголовок: Andrey пишет: Как з..


Andrey пишет:

 цитата:
Как закрыть окно Form_1 при завершении задачи


{|| domethod("Form_1","Release"), domethod("Form_0", "Release") }

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




Пост N: 3271
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.03.14 21:20. Заголовок: Haz пишет: {|&..


Haz пишет:

 цитата:
{|| domethod("Form_1","Release"), domethod("Form_0", "Release") }


Спасибо БОЛЬШОЕ !
А почему не хочет прокатывать стандартный вариант ACTION {|| Form_0.Release(), Form_1.Release() } ?
Извиняюсь за настойчивость, очень хочется понять почему.

И как сделать чтобы Form_1 была всегда поверх других окон ?

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




Пост N: 150
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.03.14 09:24. Заголовок: Andrey пишет: почем..


Andrey пишет:

 цитата:
почему не хочет прокатывать стандартный вариант ACTION {|| Form_0.Release(), Form_1.Release() }


Если выше по тексту модуля нет объявления окна DEFINE или DECLARE WINDOW, компилятор не понимает что ему суют.
по сути нужен именно DECLARE WINDOW т.к. создание окошка через DEFINE в своем описании i_window.ch имеет вызов именно DECLARE.
сама команда DECLARE это набор инструкций #translate препроцессору для корректного преобразования фантазии вида Form_o.Release() в соответствующий вызов SetPropertry(...) или DoMethod(...)

Andrey пишет:

 цитата:
И как сделать чтобы Form_1 была всегда поверх других окон


в описании команды DEFINE WINDOW есть TOPMOST





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




Пост N: 3272
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.03.14 12:08. Заголовок: Haz пишет: в описан..


Haz пишет:

 цитата:
в описании команды DEFINE WINDOW есть TOPMOST


Есть. Только для другого окна.
Исправил - получилось ! Спасибо !

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




Пост N: 151
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.03.14 12:23. Заголовок: Andrey пишет: Есть...


Andrey пишет:

 цитата:
Есть. Только для другого окна.



тут не знаю
можно попробовать повесить на событие LostFocus { || Form:Setfocus() } ( но не уверен в том что прокатит )
или копать в сторону процедуры _ChangeWindowTopmostStyle( FormHandle, Value ) из h_controlmisc.prg

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




Пост N: 3273
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.03.14 13:44. Заголовок: Все нормально получи..


Все нормально получилось.
Я TOPMOST повесил куда ты сказал и все заработало !!!
Спасибо БОЛЬШОЕ за помощь !
Буду дальше делать...

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




Пост N: 3275
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.14 11:30. Заголовок: Пример почти доделал..


Пример почти доделал. Работает. http://files.mail.ru/02028517FBDD4473B3332A9C49077BBE

Осталось доделать сборку TBROWS ТОЛЬКО из своих полей.
Помогите пожалуйста в описании одной колонки, примеры смотрел, ни фига не понял.
Как эту строку:
ADD COLUMN TO TBROWSE &ob DATA ARRAY ELEMENT 1 ALIGN DT_CENTER, DT_CENTER SIZE 20 COLORS C_TEK, C_SYS
преобразовать до привычной Клиперовской:
oBrw_1:aColumns[1]:cHeading := "Дата" +CRLF + "события"
oBrw_1:SetColSize(1, 70)
oBrw_1:aColumns[1]:bData := {||LOG_DBF->DATE }
// oBrw_1:aColumns[1]:cPicture:="99.99.9999" - не обязательно
oBrw_1:aColumns[1]:nAlign := DT_CENTER


Haz пишет:

 цитата:
не там смотрел, посмотри как это делается в самом методе (не в функции) Loadfield - там как раз используется ::AddColumn



Нашел!
::AddColumn( TSColumn():New( cHeading, FieldWBlock( aStru[ nE, 1 ], Select( ::cAlias ) ),cPicture, ;
{ ::nClrText, ::nClrPane }, { nAlign, DT_CENTER }, nSize,, lEditable,,, cOrder,,,, ; //V90
5,,,, Self, cBlock ) )
Только как это сделать для себя - вообще не представляю....

У меня есть базы имеющие 150 полей. Для показа нужно всего 15.
Ладно, можно один раз перечислить. А когда новые поля в базу добавишь,
нужно будет тогда ОПЯТЬ лезть в исходник и править его. ОЧЕНЬ НЕУДОБЕН этот метод.
Хочется как на Клипере создавать бровс.
Помогите пожалуйста.

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



Пост N: 2
Зарегистрирован: 22.01.14
ссылка на сообщение  Отправлено: 15.03.14 17:59. Заголовок: А если скомпилироват..


А если скомпилировать с ключом -p и затем посмотреть, как препроцессор это делает?
Не поможет?

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




Пост N: 152
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.03.14 19:49. Заголовок: ZAlex пишет: А если..


ZAlex пишет:

 цитата:
А если скомпилировать с ключом -p



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




Пост N: 3276
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.03.14 20:42. Заголовок: ZAlex пишет: А если..


ZAlex пишет:

 цитата:
А если скомпилировать с ключом -p и затем посмотреть, как препроцессор это делает?
Не поможет?


Блин, забыл ! Спасибо !

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


Пост N: 430
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 03.05.14 14:04. Заголовок: При наличии индексов..


При наличии индексов управлять выбором их можно "кликнув" мышкой по заголовку колонки

 цитата:

Brw_1:SetIndexCols( 2,1 )
Brw_1:aColumns[ 1 ]:cOrder := "CODE"
Brw_1:aColumns[ 2 ]:cOrder := "Name"


А как с помощью клавиатуры то же сделать ?


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




Пост N: 3346
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.05.14 13:42. Заголовок: Vlad04 пишет: А как..


Vlad04 пишет:

 цитата:
А как с помощью клавиатуры то же сделать ?


Вот еще пример использования TBROWSE. В нем есть функция обработки всех клавиш MyKeyAction().
Вот можете туда и вставить обработку своих клавиш.
http://files.mail.ru/50BF541945984119BE7B20C8CBFB588A

Может еще можно это сделать с помощью команд:
ON KEY F? ACTION MyFunction()

Это то что я знаю пока. Может и не прав...
Нужно ждать ответ от нашего ГУРУ...


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


Пост N: 431
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 04.05.14 19:49. Заголовок: ок В примере есть от..


ок
В примере есть ответ на поставленный вопрос

 цитата:

oBrw_1:aColumns[2]:bHLClicked:={||ChoiHeader(3)} //переключение индекса по шапке / switching index on the table header



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




Пост N: 3349
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.05.14 15:40. Заголовок: Vlad04 пишет: В при..


Vlad04 пишет:

 цитата:
В примере есть ответ на поставленный вопрос


Как сам пример ? Вам понравился ? Может чего не хватает ?
Делал специально в качестве обучающего примера.

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


Пост N: 437
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 21.05.14 07:14. Заголовок: Andrey Как сам прим..


Andrey

 цитата:
Как сам пример ? Вам понравился ? Может чего не хватает ?


Пример понравился (цветовой оформление, работа с директориями), но имеет свою специфику.
Вопросы по TBROWS остались.
1) Как удалить запись ( не нашел в примерах или плохо искал)
2) Такая рабочая ситуация : - Перед открытием в таблице ищу нужную запись (таблица может быть индексирована или нет. Естественно поиск по индексу или Locate)
- после открытия курсор должен быть на найденной записи.

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




Пост N: 242
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.05.14 09:50. Заголовок: Vlad04 пишет: 1) Ка..


Vlad04 пишет:

 цитата:
1) Как удалить запись


(oBrw:cAlias)->(DbDelete())
oBrw:Refresh(.T.)

Vlad04 пишет:

 цитата:
поиск по индексу или Locate


Seek:
oBrw:SetFocus()
(oBrw:cAlias)->(oBrw:ExpSeek( cExp, FALSE ))

Locate:
oBrw:SetFocus()
oBrw:ExpLocate( cExp )

Vlad04 пишет:

 цитата:
курсор должен


добавить что то типа
oBrw:Upstable()
oBrw:ResetVScroll(.T.)
oBrw:Refresh(.T., .T.)





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


Пост N: 438
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 21.05.14 10:22. Заголовок: ок С удалением все н..


ок
С удалением все нормально.
С поиском

 цитата:

Seek:
oBrw:SetFocus()
(oBrw:cAlias)->(oBrw:ExpSeek( cExp, FALSE ))


А найти нужную запись до открытия TBROWS , а потом спозиционировать TBROWS никак ?

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




Пост N: 4021
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.05.14 11:04. Заголовок: Vlad04 пишет: А най..


Vlad04 пишет:

 цитата:
А найти нужную запись до открытия TBROWS , а потом спозиционировать TBROWS никак ?


А что при таком подходе курсор становится не туда ? Нашел , открыл бровс..........

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




Пост N: 243
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.05.14 11:20. Заголовок: Vlad04 пишет: найти..


Vlad04 пишет:

 цитата:
найти нужную запись до открытия TBROWS , а потом


можно так попробовать

(oBrw:cAlias)->(DbGoto(nRec))
oBrw:Upstable()
oBrw:Refresh(.T., .T.)

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


Пост N: 439
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 21.05.14 11:46. Заголовок: А что при таком подх..



 цитата:
А что при таком подходе курсор становится не туда ?



Не становится куда надо !. Есть у TBROWS переменная VALUE , если ей присваивать полученное Recno() после поиска , куда-то курсор
перемещается при открытии , но не нату запись, которая найдена.
Если VALUE не использовать , то на первую запись.

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


Пост N: 440
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 21.05.14 11:51. Заголовок: Haz ОК И поиск полу..


Haz
ОК
И поиск получился

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



Пост N: 43
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 21.05.14 15:28. Заголовок: B Tsbrowse есть эффе..


B Tsbrowse есть эффект нижней строки, которая прорисовывается при создании Tsbrowse, но не участвует в скроллинге вправо-влево и вверх-вниз, то есть просто висит на экране замороженная.
Это видно на примерах из дистрибутива:

SAMPLES\Advanced\TsBrowse

Меню TSBrowse\More To One и TSBrowse\Excel Connectivity

Для фиксированного размера Tsbrowse наверно можно подобрать размеры, чтобы эффекта не было. Но если делать настраиваемые размеры, то неприятный эффект появляется во всей красе.
В последнем примере (TSBrowse\Excel Connectivity) , если изменить мышкой вертикальный размер так, чтобы последняя строка была прорисована не полностью, то при движении курсора вверх она зависает и не перерисовывается. Видимо, при создании таблицы и перерисовке в этом случае считается разное количество строк. При создании таблицы строка, не умещающаяся полностью на экране, не должна была прорисовываться.


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


Пост N: 441
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 22.05.14 12:05. Заголовок: По примеру 1) &..



По примеру
1)

 цитата:
&cBrw:bKeyDown := { | nKey | MyKeyAction(nKey,cBrw, cParent, 0), lOk := nKey != VK_ESCAPE }



Независимо от раскладки клавиатуры всегда возвращает англиЦкие. Так должно быть ?

По TSBrows
2) При доступности редактирования ячейки,
вход в ячейку по нажатию Enter или двойной клик.
А можно клавиши в данном случае переназначить ? К примеру, редактировать по F4.

3) В консоле, когда не надо было менять значения непосредственно в Бровзе я иногда выводил данные так
FAM+'|'+iM+'|'+oT+'|'
или так if(Sex=1;'Муж';'Жен')
Т.е. делал составную запись или подстановку

Что-нибудь подобное можно в TSBrows

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




Пост N: 244
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.05.14 21:20. Заголовок: Vlad04 пишет: 3) В ..


Vlad04 пишет:

 цитата:
3) В консоле, когда не надо было менять значения непосредственно в Бровзе я иногда выводил данные так
FAM+'|'+iM+'|'+oT+'|'



все тоже самое - определяешь блок выборки bData := {|| ...}

Vlad04 пишет:

 цитата:
всегда возвращает англиЦкие. Так должно быть ?


так и должно . В принципе можно добраться до языка клавиатуры и по собственной таблице соответствий - руский/англ и верхний /нижний - вернуть то что надо. Не проверял , не делал сам т.к. не нужно было , но уверен на 10000% все достаточно реализуемо

Vlad04 пишет:

 цитата:
К примеру, редактировать по F4.



сейчас не готов ответить , нужно глянуть исходники скорее всего на F4 тоже можно повесить блок DblClick

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




Пост N: 3389
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.14 22:24. Заголовок: Vlad04 пишет: Незав..


Vlad04 пишет:

 цитата:
Независимо от раскладки клавиатуры всегда возвращает англиЦкие. Так должно быть ?


Делай свою обработку в функции MyLatRus()
Но может можно и по другому, я пока не знаю (разбираюсь с этим).
Надо спросить других. Не уж то нет стандарта обработки клавиш для TBROWSE ?

Vlad04 пишет:

 цитата:
По TSBrows
2) При доступности редактирования ячейки,
вход в ячейку по нажатию Enter или двойной клик.
А можно клавиши в данном случае переназначить ? К примеру, редактировать по F4.



Я выше уже писал: "В нем есть функция обработки всех клавиш MyKeyAction().
Вот можете туда и вставить обработку своих клавиш. "

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




Пост N: 3391
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.14 23:08. Заголовок: a_sidorov пишет: B ..


a_sidorov пишет:

 цитата:
B Tsbrowse есть эффект нижней строки, которая прорисовывается при создании Tsbrowse, но не участвует в скроллинге вправо-влево и вверх-вниз, то есть просто висит на экране замороженная.
Это видно на примерах из дистрибутива:

SAMPLES\Advanced\TsBrowse

Меню TSBrowse\More To One и TSBrowse\Excel Connectivity

Для фиксированного размера Tsbrowse наверно можно подобрать размеры, чтобы эффекта не было. Но если делать настраиваемые размеры, то неприятный эффект появляется во всей красе.
В последнем примере (TSBrowse\Excel Connectivity) , если изменить мышкой вертикальный размер так, чтобы последняя строка была прорисована не полностью, то при движении курсора вверх она зависает и не перерисовывается. Видимо, при создании таблицы и перерисовке в этом случае считается разное количество строк. При создании таблицы строка, не умещающаяся полностью на экране, не должна была прорисовываться.



Да, да, есть такая фигня... Как с этим бороться ?

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




Пост N: 593
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 23.05.14 14:49. Заголовок: Andrey пишет: Как с..


Andrey пишет:

 цитата:
Как с этим бороться ?


Есть вариант добавить функцию CorrectionFirstLast(oBrw) при обработке события ON CHANGE (см. пример в папке samples\Advanced\TSB_lastrow).
Но при использовании этого пути возможны побочные эффекты
Поэтому надо проверять это решение на Вашем конкретном приложении


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



Пост N: 44
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 26.05.14 15:41. Заголовок: Спасибо! Вроде работ..


Спасибо!
Вроде работает!!! Поставил CorrectionFirstLast("oBrw_1) в ON CHANGE и в функцию перерисовки при изменения размера:

FUNCTION ResizeBrowse()
oBrw_1:Move( oBrw_1:nLeft ,oBrw_1:nTop , Form_0.Width-19, Form_0.Height-93, .t.)
oBrw_1:Paint()
CorrectionFirstLast("oBrw_1")
RETURN Nil

Не очень нравится появившееся мелькание – перерисовка при изменении размера окна. Надеюсь, что со временем найдется решение с меньшим мельканием. Может еще что-то можно придумать? Если убрать Paint(), то иногда появляются глюки, обычно после достижения конца файла.


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


Пост N: 444
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 28.05.14 13:28. Заголовок: Andrey Я выше уже п..


Andrey

 цитата:
Я выше уже писал: "В нем есть функция обработки всех клавиш MyKeyAction().


Мне надо отловить события перемещения по Бровз : Up, Down и др.
На них хочу повесить действие.

А MyKeyAction их не отлавливает



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


Пост N: 445
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 28.05.14 13:37. Заголовок: Достиг цели- повесил..


Достиг цели- повесил действие на событие ON CHANGE для TBROWS.
По видимому оно всегда генерируется .

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




Пост N: 245
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.05.14 13:37. Заголовок: Vlad04 пишет: Мне н..


Vlad04 пишет:

 цитата:
Мне надо отловить события перемещения по Бровз : Up, Down и др.
На них хочу повесить действие.



Попробуй так, возможно подойдет , отлавливает не сами перемещения а последствия этих перемещения
oBrw:bOnDraw := { || Action() }

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




Пост N: 246
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.05.14 13:56. Заголовок: Haz пишет: повесил ..


Haz пишет:

 цитата:
повесил действие на событие ON CHANGE


onchange не ловит перемещения по строке

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




Пост N: 3399
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.05.14 20:15. Заголовок: Vlad04 пишет: Мне н..


Vlad04 пишет:

 цитата:
Мне надо отловить события перемещения по Бровз : Up, Down и др.
На них хочу повесить действие.


А что за действие на эти клавиши хочешь отловить ?

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


Пост N: 446
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 29.05.14 09:13. Заголовок: Andrey А что за дей..


Andrey

 цитата:
А что за действие на эти клавиши хочешь отловить ?



Очищать переменную с результатами поиска

Обновлять на форме значения из таблица, которые не отображены в Бровзе

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



Пост N: 45
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 30.05.14 15:44. Заголовок: Для получения символ..


Для получения символа из кода клавиши nKey:
&cBrw:bKeyDown := { | nKey | MyKeyAction(nKey,cBrw, cParent, 0), lOk := nKey != VK_ESCAPE }

Vlad04 пишет:

 цитата:
Независимо от раскладки клавиатуры всегда возвращает англиЦкие. Так должно быть ?



Смотри пример, только для получения маленьких буковок исправь символы в массивах.
MiniGUI\SAMPLES\BASIC\IncrementalSearch
Функция
Static Function KeyToChar( nVirtKey )

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


Пост N: 447
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 01.06.14 20:03. Заголовок: a_sidorov Хорошая п..


a_sidorov
Хорошая подсказка. Пример с бровз почти готов. Остались мелочи- стрелочки (порядок индексирования) на заголовках столбцов на изменения с клавиатуры - не геагирует.

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




Пост N: 3401
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.06.14 21:12. Заголовок: Vlad04 пишет: Остал..


Vlad04 пишет:

 цитата:
Остались мелочи- стрелочки (порядок индексирования) на заголовках столбцов на изменения с клавиатуры - не геагирует.


Возьми с примера Tsb_dir, я здесь где то выкладывал его.

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




Пост N: 3402
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.06.14 12:41. Заголовок: Есть хороший пример ..


Есть хороший пример :\MiniGUI\SAMPLES\BASIC\SavePos

А как бы сделать настройку цветов для TBROWSE по такому же принципу ?
Для начала - есть ли возможность вывести ВСЕ переменные цвета в TBROWSE ?

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




Пост N: 247
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.06.14 23:13. Заголовок: Andrey пишет: Для н..


Andrey пишет:

 цитата:
Для начала - есть ли возможность вывести ВСЕ переменные цвета в TBROWSE



все цвета в данных :aColumns[]

DATA nClrFore, nClrBack // cell colors
DATA nClrHeadBack, nClrHeadFore // headers colors
DATA nClrSpcHdBack, nClrSpcHdFore,nClrSpcHdActive // special headers colors
DATA nClrFocuBack, nClrFocuFore // focused cell colors
DATA nClrEditBack, nClrEditFore // editing cell colors
DATA nClrFootBack, nClrFootFore // footers colors
DATA nClrSeleBack, nClrSeleFore // Focused inactive colors
DATA nClrOrdeBack, nClrOrdeFore // order control column colors
DATA nClr3DLCell, nClr3DLHead, nClr3DLFoot, nClr3DLSpcHd // light color for 3d text
DATA nClr3DSCell, nClr3DSHead, nClr3DSFoot, nClr3DSSpcHd // shadow color for 3d text

а метод Setcolor() их назначает см исходник

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




Пост N: 3405
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.06.14 04:39. Заголовок: Haz пишет: все цвет..


Haz пишет:

 цитата:
все цвета в данных :aColumns[]


А как их в цикле вывести допустим в файл или массив ?

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




Пост N: 321
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.06.14 08:36. Заголовок: Andrey пишет:А как и..


Andrey пишет:
 цитата:
А как их в цикле вывести допустим в файл или массив ?


hb_memowrit("All_Columns.txt", hb_valtoexp(oBrw:aColumns)) - весь массив aColumns
 
a := {}
for i := 1 to len(oBrw:aColumns)
aAdd(a, {oBrw:aColumns[ i ]:nClrFore, ;
oBrw:aColumns[ i ]:nClrBack, ;
oBrw:aColumns[ i ]:nClrHeadBack, ;
и далее по списку, ;
)
next
hb_memowrit("All_Color.txt", hb_valtoexp(a)) - весь массив цветов


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




Пост N: 322
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.06.14 09:16. Заголовок: SergKis пишет:hb_mem..


SergKis пишет:
 цитата:
hb_memowrit("All_Columns.txt", hb_valtoexp(oBrw:aColumns)) - весь массив aColumns


это я погорячился. в aColumns - объекты для каждой колонки.
в объекте колонки есть методы SaveColor() и RestColor().
Сохранить:
a := {}
for i := 1 to len(oBrw:aColumns)
oCol := oBrw:aColumns[ i ]
oCol:SaveColor()
aAdd(a, oCol:aColorsBack)
next
hb_memowrit("Col_Color.txt", hb_valtoexp(a))

Восстановить:
a := &( hb_memoread("Col_Color.txt") )
for i := 1 to len(oBrw:aColumns)
oCol := oBrw:aColumns[ i ]
oCol:aColorsBack := a[ i ]
oCol:RestColor()
next


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




Пост N: 3406
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.06.14 11:42. Заголовок: SergKis пишет: это ..


SergKis пишет:

 цитата:
это я погорячился. в aColumns - объекты для каждой колонки.
в объекте колонки есть методы SaveColor() и RestColor().


Спасибо БОЛЬШОЕ !
Буду пробовать....

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




Пост N: 323
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.06.14 12:48. Заголовок: Andrey пишет:Буду пр..


Andrey пишет:
 цитата:
Буду пробовать....


смотри TsColumn.prg.
обрати внимание - в методах SaveColor() и RestColor() не задействован oCol:aColorsBack[20], элемент oCol:nClrSpcHdActive - не знаю насколько он важен ...

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




Пост N: 594
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.06.14 15:02. Заголовок: SergKis пишет: в ме..


SergKis пишет:

 цитата:
в методах SaveColor() и RestColor() не задействован oCol:aColorsBack[20], элемент oCol:nClrSpcHdActive


Благодарю за сообщение!
Поправил для следующей сборки

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


Пост N: 448
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 07.06.14 08:17. Заголовок: Пример Почти рабочий..


Пример
Почти рабочий пример(pass 654321)
3 базы открываются используя 1 программник
Часть инструкций вынесены во внешний файл.В консоле я всё выносил полностью.
Остались проблемы.
Стрелочки на заголовках столбцов , ну и другие мелочи.
Сортировка меняется по F3.

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




Пост N: 3529
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.14 11:17. Заголовок: Во многих примерах е..


Во многих примерах есть удобные кнопки навигации по TBROWSE.




Какой лучше делать для своего ?
Нужно с *.ICO и надпись !

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




Пост N: 377
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.14 13:39. Заголовок: Andrey пишет:Какой л..


Andrey пишет:
 цитата:
Какой лучше делать для своего ?


А что не так в примерах (для использования) \SAMPLES\BASIC\TOOLBAR, TOOLBAR_1, ..., ToolBarEx_2 ?

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




Пост N: 3530
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.14 14:45. Заголовок: SergKis пишет: А чт..


SergKis пишет:

 цитата:
А что не так в примерах (для использования)


Да все нормально. Просто много всего интересного, не знаешь на чем остановиться.
Что удобней всего использовать, чтобы потом не переделывать ?

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




Пост N: 378
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.14 15:45. Заголовок: Andrey пишет:чтобы п..


Andrey пишет:
 цитата:
чтобы потом не переделывать ?


переделывать придется ("лучшее - враг хорошего", "век живи, век учись") - вопрос цены - сколько времени надо на переделку ?
сегодня делаешь так, завтра по другому - другие знания и возможности.

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




Пост N: 3531
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.14 16:19. Заголовок: SergKis пишет: сего..


SergKis пишет:

 цитата:
сегодня делаешь так, завтра по другому


Согласен полностью.
Хотелось бы посмотреть как у других сделано ?

Вот такоё меню навигации можно сделать на МиниГуи ?


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




Пост N: 3533
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.14 18:20. Заголовок: SergKis пишет: А чт..


SergKis пишет:

 цитата:
А что не так в примерах (для использования) ToolBarEx_2 ?



Не совсем понял ?
Можно ли в этом примере подставить иконку ?
И можно ли кнопку сделать разными цветами ?
Что-то у меня не получается...


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




Пост N: 379
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.08.14 19:40. Заголовок: Andrey пишет:Не совс..


Andrey пишет:
 цитата:
Не совсем понял ?
Можно ли в этом примере подставить иконку ?


В данных примерах идет речь о стандартном ToolBar контроле и SplttBox ... Меняя размеры окна увидишь поведение их.
То что показываешь на картинке - надо делать ручками (например на buttonEx-ах и др.контролах), но ничего не возможного нет.
Как пример "ручками" варианты MsgMenu, \SAMPLES\BASIC\MsgMenu

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




Пост N: 3540
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.08.14 01:29. Заголовок: Кто нибудь делал мен..


Кто нибудь делал меню корректировки цветов TBROWSE для юзеров ?
Или подскажите идею, как это сделать.
Все цвета у меня есть в массиве:
[ЦВЕТА_TBROWSE]
Строка_1 = { {{0,8388608},32768,32768,32768,32768,32768,32768,32768} , "nClrText" , "Цвет текста в ячейках таблицы)" }
Строка_2 = { {15773696,15773696,15773696,15773696,15773696,15773696,15773696,15773696} , "nClrPane" , "Цвет фона в ячейках таблицы" }
Строка_3 = { {0,16777215,16777215,16777215,16777215,16777215,16777215,16777215} , "nClrHeadFore" , "Цвет текста шапки таблицы" }
Строка_4 = { {15773696,{11048235,6174208},{11048235,6174208},{11048235,6174208},{11048235,6174208},{11048235,6174208},{11048235,6174208},{11048235,6174208}} , "nClrHeadBack" , "Цвет фона шапка таблицы" }
Строка_5 = { {0,16711680,16711680,16711680,16711680,16711680,16711680,16711680} , "nClrForeFocu" , "Цвет текста курсора, текст в ячейках с фокусом" }
Строка_6 = { {13743257,{4915199,61680},{4915199,61680},{4915199,61680},{4915199,61680},{4915199,61680},{4915199,61680},{4915199,61680}} , "nClrFocuBack" , "Цвет фона курсора" }
Строка_7 = { {0,0,0,0,0,0,0,0} , "nClrEditFore" , "Цвет текста редактируемого поля" }
Строка_8 = { {16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215} , "nClrEditBack" , "Цвет фона редактируемого поля" }
Строка_9 = { {0,0,0,0,0,0,0,0} , "nClrFootFore" , "Цвет текста подвала" }
Строка_10 = { {15790320,15790320,15790320,15790320,15790320,15790320,15790320,15790320} , "nClrFootBack" , "Цвет фона подвала" }
Строка_11 = { {12632256,0,0,0,0,0,0,0} , "nClrSeleFore" , "Цвет текста неактивного курсора (selected cell no focused)selected cell no focused" }
Строка_12 = { {8421504,{8421504,16448250},{8421504,16448250},{8421504,16448250},{8421504,16448250},{8421504,16448250},{8421504,16448250},{8421504,16448250}} , "nClrSeleBack" , "Цвет фона неактивного курсора (selected cell no focused)" }
Строка_13 = { {0,0,0,0,0,0,0,0} , "nClrOrdeFore" , "Цвет текста шапки выбранного индекса" }
Строка_14 = { {15790320,15790320,15790320,15790320,15790320,15790320,15790320,15790320} , "nClrOrdeBack" , "Цвет фона шапки выбранного индекса" }
Строка_15 = { {10526880,10526880,10526880,10526880,10526880,10526880,10526880,10526880} , "nClrLine" , "Цвет линий между ячейками таблицы" }
Строка_16 = { {0,0,0,0,0,0,0,0} , "nClrSupHeadFore" , "Цвет фона в суперхидере" }
Строка_17 = { {15773696,15773696,15773696,15773696,15773696,15773696,15773696,15773696} , "nClrSupHeadBack" , "Цвет символов в суперхидере" }
Строка_18 = { {0,0,0,0,0,0,0,0} , "nClrSpecHeadFore" , "Цвет фона в спецхидере" }
Строка_19 = { {16777215,16777215,16777215,16777215,16777215,16777215,16777215,16777215} , "nClrSpecHeadBack" , "Цвет символов в спецхидере" }
Строка_20 = { {255,255,255,255,255,255,255,255} , "nClrSpecHeadActive" , "Цвет активного спецхидера" }


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




Пост N: 280
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.08.14 11:37. Заголовок: Andrey пишет: Или п..


Andrey пишет:

 цитата:
Или подскажите идею, как это сделать.



Через :SetColor(), куда в вместо массива цвета передавать блок кода который возвращает нужный цвет ( примеры в справке по TSBrowse )
,а как пример выбора подойдет Minigui\Sample\Basic\Colortable



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




Пост N: 3541
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.08.14 13:20. Заголовок: Haz пишет: а как пр..


Haz пишет:

 цитата:
а как пример выбора подойдет Minigui\Sample\Basic\Colortable


А можно сделать 3 колонки с разными цветами ?
Типа:
1-колонка (описание)
2-цвет по умолчанию
3-цвет пользователя

Т.е. GRID позволяет делать разными цветами колонки ?

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




Пост N: 281
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.08.14 14:46. Заголовок: Andrey пишет: А мож..


Andrey пишет:

 цитата:
А можно сделать 3 колонки с разными цветами ?
Типа:
1-колонка (описание)
2-цвет по умолчанию
3-цвет пользователя



Обычным GRID из MiniGui не пользуюсь , уверен можно сделать, а вот на том же TsBrowse по массиву значений - легко.
в колонке N3 TsBrowse нужно объявить вызов внешнего редактирования с использованием окна выбора цвета.
Тогда при попытке ее редактирования будет выскакивать окно выбора цвета и сохранять выбранный цвет в значении колонки.

PS. того-же эффекта можно добиться через блок bPrevEdit - который должен позволить выбрать цвет, записать его в ячейку и вернуть FALSE
чтоб не пустить в режим редактирования колонки

Пример бровса по массиву есть в Advanced\Tsb_array, цвет фона ячейки колонок 2 и 3 нужно назначить по содержимому самой ячейки.
Есть еще интересный пример TSb_Colors ...
вообщем будут конкретные вопросы - задавай



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




Пост N: 3543
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.08.14 16:37. Заголовок: Haz пишет: вообщем ..


Haz пишет:

 цитата:
вообщем будут конкретные вопросы - задавай



Сделал заготовку, дальше не знаю как делать. Помогите пожалуйста.
Пример - Tsb_colors
https://cloud.mail.ru/public/5b99b39913da/Tsb_colors2.prg

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




Пост N: 282
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.08.14 19:11. Заголовок: Andrey пишет: не з..


Andrey пишет:

 цитата:
не знаю как делать.



опиши структуру массива не пойму что в нем

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




Пост N: 3544
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.08.14 22:01. Заголовок: Haz пишет: опиши ст..


Haz пишет:

 цитата:
опиши структуру массива не пойму что в нем





"Color by default" - прорисовать цветом элемента aVar[5] - остальную таблицу не надо.
"Color User" - пользовательский выбор цвета, записать в элемент aVar[6] и прорисовать потом сразу в таблице.
Функция выбора цвета стандартная - как в Menu_ButtonEx.prg по правому клику мышки.
Исправленный пример - https://cloud.mail.ru/public/8bb7a4832b49/MiniGui-TEST

Не работал я с таким TBROWSE. Почему при задании цвета: COLORS CLR_BLACK, WHITE
ADD COLUMN TO TBROWSE oBrw DATA ARRAY ELEMENT 1;
HEADER "Variable" + CRLF + "name";
SIZE 150;
COLORS CLR_BLACK, WHITE ;
ALIGN DT_LEFT

Получаю черный на красном ?



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




Пост N: 283
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.08.14 07:46. Заголовок: Andrey пишет: прори..


Andrey пишет:

 цитата:
прорисовать цветом элемента aVar[5]


Андрей , я и хочу понять что значит aVar[x][5] там многомерный массив - поподробнее что имеется ввиду , как думаешь его в качестве цвета использовать ?
или я тебе пример самодостаточный нарисую а свой массив - сам прикрутишь?
По цветам отвечу с работы , как приеду где нить после 11 утра

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




Пост N: 284
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.08.14 10:25. Заголовок: Haz пишет: COLORS C..


Haz пишет:

 цитата:
COLORS CLR_BLACK, WHITE ;
ALIGN DT_LEFT
Получаю черный на красном ?



почему именно на красном не знаю , да это и не важно. Важно что в описании команды из справки в качестве цвета - МАССИВ
[ COLOR | COLORS <aColors> ]
т.е. нужно писать
COLORS { CLR_BLACK, WHITE }




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




Пост N: 3545
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.08.14 11:06. Заголовок: Haz пишет: что знач..


Haz пишет:

 цитата:
что значит aVar[x][5] там многомерный массив - поподробнее что имеется ввиду


Это массив цветов из другого моего Tbrowsa. Получается он из функции TbrowColorWriteFile(oBrw) - выложил в папку.
Содержание его - цвета по всем полям Tbrowsa (правда не все нужны, т.к. где многомерные массивы, то это перечисление цветов ПОЛЕЙ ПОКАЗА из другого Tbrowsa, потом нужно будет убрать лишнее).
Смотреть "Запись_в_ини.prg" - https://cloud.mail.ru/public/8bb7a4832b49/MiniGui-TEST

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




Пост N: 285
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.08.14 11:52. Заголовок: отправил пример на п..


отправил пример на почту из профиля


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




Пост N: 3551
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.08.14 12:46. Заголовок: Вопрос по переводу н..


Вопрос по переводу на русский для пользователя.
Правильный ли перевод по шрифтам в TBROWSE ?
// nLevel 1 = Cells - Фонт ячеек в таблице
// nLevel 2 = Headers - Фонт заголовков таблицы
// nLevel 3 = Footers - Фонт нижнего колонтитула таблицы
// nLevel 4 = SuperHeaders - Как перевести ???

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




Пост N: 288
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.08.14 13:03. Заголовок: Andrey пишет: Super..


Andrey пишет:

 цитата:
SuperHeaders - Как перевести


переведи как сложный, составной или многоуровневый заголовок.
А вообще лучше пользователя в эти детали не погружать , а то вместо работы весь день в раскраски играть будут

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




Пост N: 3552
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.08.14 13:31. Заголовок: Haz пишет: а то вм..


Haz пишет:

 цитата:
а то вместо работы весь день в раскраски играть будут


Ну и пускай, это их время. Хоть с программой будут работать, а не в одноклассниках сидеть !

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




Пост N: 386
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.08.14 13:58. Заголовок: Andrey пишет:Ну и пу..


Andrey пишет:
 цитата:
Ну и пускай


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

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




Пост N: 3553
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.08.14 14:23. Заголовок: SergKis пишет: прид..


SergKis пишет:

 цитата:
придется делать log, что бы уличить их - работы будет не початый край


Да ладно, лог-файл уже есть, сделаем дописку смены шрифта и цвета.
Меня юзера достают, то шрифт им не тот , то цвет не тот. Компы то старые...

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




Пост N: 3554
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.08.14 14:25. Заголовок: Меняю фонт в TBROWSE..


Меняю фонт в TBROWSE:
&cBrw:ChangeFont( aFont[ 1 ], , 1 )
&cBrw:ChangeFont( aFont[ 2 ], , 2 )
&cBrw:ChangeFont( aFont[ 3 ], 1 , 3 )
&cBrw:ChangeFont( aFont[ 4 ], , 4 )

Потом на кнопу "изменить фонты" делаю отдельную функцию смены фонтов.
Как получить установленные фонты в виде массива имен и размеров ?

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




Пост N: 289
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.08.14 14:41. Заголовок: Andrey пишет: Как п..


Andrey пишет:

 цитата:
Как получить установленные фонты в виде массива имен и размеров ?



Внимательно изучать примеры и тренировать память

Здесь C:\MiniGUI\SAMPLES\Advanced\RichEditEx

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




Пост N: 3555
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.08.14 15:25. Заголовок: Haz пишет: Внимател..


Haz пишет:

 цитата:
Внимательно изучать примеры и тренировать память
Здесь C:\MiniGUI\SAMPLES\Advanced\RichEditEx



Спасибо за подсказку !


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




Пост N: 3557
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.08.14 23:19. Заголовок: Что-то не получается..


Что-то не получается со шрифтами.

До создания TBROWSE делаю определение фонтов:
STATIC aFont := {}

DEFINE FONT Font_1 FONTNAME "Times New Roman" SIZE 12
DEFINE FONT Font_2 FONTNAME "Times New Roman" SIZE 10 ITALIC
DEFINE FONT Font_3 FONTNAME "Times New Roman" SIZE 10 BOLD
DEFINE FONT Font_4 FONTNAME 'Arial' SIZE 12 ITALIC

AAdd( aFont, GetFontHandle( "Font_1" ) )
AAdd( aFont, GetFontHandle( "Font_2" ) )
AAdd( aFont, GetFontHandle( "Font_3" ) )
AAdd( aFont, GetFontHandle( "Font_4" ) )


Меняю фонт в TBROWSE - см выше.

Потом в другой функции пытаюсь определить заданные фонты TBROWSE:
MsgFile("@Log.txt","aFont=",aFont)
FOR nI := 1 TO 4
hFont := aFont[nI]
aDim := GetFontRTF( hFont, 1 )
MsgFile("@Log.txt", nI,"hFont=",hFont,"aDim=",aDim )
NEXT
------------------------
Результат @Log.txt:
"aFont=", {-2012603099, -1190518991, 1158290916, -989192754}
1, "hFont=", -2012603099, "aDim=", {"D", 65228, .F., .F., 1304580, .F., .F., 49}
2, "hFont=", -1190518991, "aDim=", {"D", 65228, .F., .F., 1304580, .F., .F., 49}
3, "hFont=", 1158290916, "aDim=", {"D", 223941, .F., .F., 1304580, .F., .F., 49}
4, "hFont=", -989192754, "aDim=", {"D", 223941, .F., .F., 1304580, .F., .F., 49}
------------------------

Т.е. не могу получить через функцию GetFontRTF( hFont, 1 ) установленный шрифт.
Что забыл или не так делаю ?



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




Пост N: 290
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.08.14 08:27. Заголовок: Andrey пишет: Что з..


Andrey пишет:

 цитата:
Что забыл или не так делаю ?



все не так

там есть rr_getfonts() которая выдает список установленных в системе фонтов
выбираешь нужное ИМЯ и РАЗМЕР

_DefineFont ( "Font_x", "ИМЯ", РАЗМЕР, .F., .F., .F., .F.,, .F. )

далее как и с Font_1 - Font_4, когда Font_x больше не нужен или надо его переопределить используй _ReleaseFont("Font_x")






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




Пост N: 3558
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.08.14 13:27. Заголовок: Haz пишет: там есть..


Haz пишет:

 цитата:
там есть rr_getfonts() которая выдает список установленных в системе фонтов
выбираешь нужное ИМЯ и РАЗМЕР


Эту менюшку я уже сделал !


Мне нужно передать в это меню ТЕКУЩИЕ ФОНТЫ и РАЗМЕР ФОНТА моего TBROWSE.
Вот на этом я и споткнулся.

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




Пост N: 292
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.08.14 14:05. Заголовок: может проще запомина..


может проще запоминать где нить какие шрифты назначил для бровса, чем по хендлу ( который кстати ранее назначается именно именем и размером ) получить тоже имя и размер

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




Пост N: 3559
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.08.14 14:55. Заголовок: Haz пишет: может пр..


Haz пишет:

 цитата:
может проще запоминать где нить какие шрифты назначил для бровса, чем по хендлу


Ну этот вариант я не рассматривал, т.к. он самый простой...
Хотел сделать по уму, как в других системах.
Да и хотел понять, как делаются такие вещи в программах.

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




Пост N: 293
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.08.14 15:16. Заголовок: Andrey пишет: Хотел..


Andrey пишет:

 цитата:
Хотел сделать по уму


ага, а потом будет вопрос как из TSb получить хендл шрифта
по уму это когда максимально просто

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




Пост N: 3560
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.08.14 16:32. Заголовок: Haz пишет: ага, а п..


Haz пишет:

 цитата:
ага, а потом будет вопрос как из TSb получить хендл шрифта


Так этот вопрос я и задавал вверху !


Что-то не получается со шрифтами.

До создания TBROWSE делаю определение фонтов:
STATIC aFont := {}

DEFINE FONT Font_1 FONTNAME "Times New Roman" SIZE 12
DEFINE FONT Font_2 FONTNAME "Times New Roman" SIZE 10 ITALIC
DEFINE FONT Font_3 FONTNAME "Times New Roman" SIZE 10 BOLD
DEFINE FONT Font_4 FONTNAME 'Arial' SIZE 12 ITALIC

AAdd( aFont, GetFontHandle( "Font_1" ) )
AAdd( aFont, GetFontHandle( "Font_2" ) )
AAdd( aFont, GetFontHandle( "Font_3" ) )
AAdd( aFont, GetFontHandle( "Font_4" ) )


Меняю фонт в TBROWSE - см выше.

Потом в другой функции пытаюсь определить заданные фонты TBROWSE:
MsgFile("@Log.txt","aFont=",aFont)
FOR nI := 1 TO 4
hFont := aFont[nI]
aDim := GetFontRTF( hFont, 1 )
MsgFile("@Log.txt", nI,"hFont=",hFont,"aDim=",aDim )
NEXT
------------------------
Результат @Log.txt:
"aFont=", {-2012603099, -1190518991, 1158290916, -989192754}
1, "hFont=", -2012603099, "aDim=", {"D", 65228, .F., .F., 1304580, .F., .F., 49}
2, "hFont=", -1190518991, "aDim=", {"D", 65228, .F., .F., 1304580, .F., .F., 49}
3, "hFont=", 1158290916, "aDim=", {"D", 223941, .F., .F., 1304580, .F., .F., 49}
4, "hFont=", -989192754, "aDim=", {"D", 223941, .F., .F., 1304580, .F., .F., 49}
------------------------

Т.е. не могу получить через функцию GetFontRTF( hFont, 1 ) установленный шрифт.
Что забыл или не так делаю ?




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




Пост N: 294
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.08.14 17:01. Заголовок: Andrey пишет: Так э..


Andrey пишет:

 цитата:
Так этот вопрос я и задавал вверху !



и это все сложности ? можно дернуть хендл из obrw:aColumns[n]:hFont или любой из определенных в исходнике TSCOLUMN.PRG
( нужно только в него заглянуть )

DATA hFont // cells font
DATA hFontEdit // edition font
DATA hFontHead // header font
DATA hFontFoot // footer font
DATA hFontSpcHd // special header font

примерно так
hFontHandle := oBrw:aColumns[n]:hFont


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




Пост N: 3561
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.08.14 17:07. Заголовок: Haz пишет: нужно т..


Haz пишет:

 цитата:
нужно только в него заглянуть



Спасибо БОЛЬШОЕ за подсказку !!!

Только мне нужны ТОЛЬКО 4 фонта:
// nLevel 1 = Cells - Фонт ячеек в таблице
// nLevel 2 = Headers - Фонт заголовков таблицы
// nLevel 3 = Footers - Фонт нижнего колонтитула таблицы
// nLevel 4 = SuperHeaders - Фонт составного заголовка таблицы

Или я опять что-то не догоняю....
DATA hFontEdit // edition font - это фонт для редактирования в ячейке ? А почему он не задается в h_tbrowse.prg ?
Эх, значит нужно менюшку другую делать...

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




Пост N: 295
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.08.14 08:43. Заголовок: nLevel - это не фонт..


nLevel - это не фонт а то куда его применить . Посмотри в исходнике :ChangeFont()
если упрощенно то там это:

Case nLevel == 1 // nLevel 1 = Cells
::aColumns[ nEle ]:hFont := hFont

Case nLevel == 2 .and. ::lDrawHeaders // nLevel 2 = Headers
::aColumns[ nEle ]:hFontHead := hFont

Case nLevel == 3 .and. ::lFooting .and. lDrawFooters // nLevel 3 = Footers
::aColumns[ nEle ]:hFontFoot := hFont

Case nLevel == 4 .and. ::lDrawSuperHd // nLevel 4 = SuperHeaders
::aSuperHead[ nEle, 7 ] := hFont

другими словами в зависимости от левела запоминаем хендл передаваемого фонта в нужное место. и соответственно его можно прочитать из этого места

PS
там же есть и такой код
if ( FontHandle := GetFontHandle( FontName ) ) != 0
aFont := GetFontParam(FontHandle)
FontName := aFont[1]
FontSize := aFont[2]
bold := aFont[3]
italic := aFont[4]
underline := aFont[5]
strikeout := aFont[6]
endif
т.е. по хендлу получить параметры ( не проверял)

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




Пост N: 3562
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.08.14 10:57. Заголовок: Haz пишет: т.е. по ..


Haz пишет:

 цитата:
т.е. по хендлу получить параметры ( не проверял)



Проверил у себя в TBROWSE:
MsgFile("@Log.txt","aFont=",aFont)
FOR nI := 1 TO 4
hFont := aFont[nI]
aDim := GetFontParam( hFont )
MsgFile("@Log.txt", nI,"hFont=",hFont,"aDim=",aDim )
NEXT
------------------------
Результат @Log.txt:
"aFont=", {587863100, 34214973, 1326059819, -1140188169}
1, "hFont=", 587863100, "aDim=", {"Arial", 9, .F., .F., .F., .F., 0}
2, "hFont=", 34214973, "aDim=", {"Arial", 9, .F., .F., .F., .F., 0}
3, "hFont=", 1326059819, "aDim=", {"Arial", 9, .F., .F., .F., .F., 0}
4, "hFont=", -1140188169, "aDim=", {"Arial", 9, .F., .F., .F., .F., 0}

------------------------
Что-то странное...

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




Пост N: 296
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.08.14 11:01. Заголовок: Andrey пишет: Что-т..


Andrey пишет:

 цитата:
Что-то странное...


а что именно странно - везде стоит дефолтом ариэль 9

попробуй так
FontHandle := GetFontHandle( "Font_1") )
aFont := GetFontParam(FontHandle)

Вот исходник из h_font.prg видно что ищет по хендлам определенным в программе
FUNCTION GetFontParam( FontHandle )

LOCAL aFontAttr
LOCAL i := AScan( _HMG_aControlHandles, FontHandle )

aFontAttr := { _HMG_DefaultFontName, _HMG_DefaultFontSize, .F. , .F. , .F. , .F. , 0 }

IF i > 0 .AND. _HMG_aControlType == "FONT"
aFontAttr := { _HMG_aControlFontName , ;
_HMG_aControlFontSize , ;
_HMG_aControlFontAttributes [i, FONT_ATTR_BOLD], ;
_HMG_aControlFontAttributes [i, FONT_ATTR_ITALIC], ;
_HMG_aControlFontAttributes [i, FONT_ATTR_UNDERLINE], ;
_HMG_aControlFontAttributes [i, FONT_ATTR_STRIKEOUT], ;
iif( Len( _HMG_aControlFontAttributes ) == 5, _HMG_aControlFontAttributes [i, FONT_ATTR_ANGLE], 0 ) }
ENDIF

RETURN aFontAttr





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




Пост N: 3563
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.08.14 11:12. Заголовок: Haz пишет: а что им..


Haz пишет:

 цитата:
а что именно странно - везде стоит дефолтом ариэль 9


Вот это и странно !!!
Я же делаю - До создания TBROWSE определение фонтов:
STATIC aFont := {}

DEFINE FONT Font_1 FONTNAME "Times New Roman" SIZE 12
DEFINE FONT Font_2 FONTNAME "Times New Roman" SIZE 10 ITALIC
DEFINE FONT Font_3 FONTNAME "Times New Roman" SIZE 10 BOLD
DEFINE FONT Font_4 FONTNAME 'Arial' SIZE 12 ITALIC

AAdd( aFont, GetFontHandle( "Font_1" ) )
AAdd( aFont, GetFontHandle( "Font_2" ) )
AAdd( aFont, GetFontHandle( "Font_3" ) )
AAdd( aFont, GetFontHandle( "Font_4" ) )


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




Пост N: 297
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.08.14 11:14. Заголовок: гдето глюк :sm15: ..


гдето глюк

i := AScan( _HMG_aControlHandles, FontHandle ) не находит хендл

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




Пост N: 3564
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.08.14 11:41. Заголовок: Haz пишет: гдето гл..


Haz пишет:

 цитата:
гдето глюк


Глюк у меня... Опять поторопился.
Исправил переменную, вот получилось нормально:
"aFont=", {1326062803, 336207122, 235543787, -1895163474}
1, "hFont=", 1326062803, "aDim=", {"Times New Roman", 12, .F., .F., .F., .F., 0}
2, "hFont=", 336207122, "aDim=", {"Times New Roman", 10, .F., .T., .F., .F., 0}
3, "hFont=", 235543787, "aDim=", {"Times New Roman", 10, .T., .F., .F., .F., 0}
4, "hFont=", -1895163474, "aDim=", {"Arial", 12, .F., .T., .F., .F., 0}

Спасибо БОЛЬШОЕ !!!
Теперь можно получать фонты.

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




Пост N: 3565
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.08.14 15:41. Заголовок: Вопрос по ширине кол..


Вопрос по ширине колонок в TBROWSE.
Кто как их определяет ?
Можно вручную задавать ширину колонки через переменные, а можно же сделать расчет ширины колонки (шрифт*на длину поля) ?
Или можно для функции LoadFields( cBrw, ParentForm, lEdit, aPoleField) ничего не заполнять, а она сама заполнит ?
Поделитесь опытом...

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




Пост N: 3566
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.08.14 17:56. Заголовок: Для Харборовского TB..


Для Харборовского TBrowseDB() я использовал подготовленный список полей, типа:

{"NN", "DOGOVOR", "City->City", "Street->Street", и т.д.} // т.е. использовал SET RELATION TO xxxxxx
{"№", "Договор", "Город", "Улица", и т.д.}

А как подготовить(заполнить) функцию LoadFields( cBrw, ParentForm, lEdit, aPoleField) ?


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




Пост N: 298
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.08.14 08:03. Заголовок: Andrey пишет: City-..


Andrey пишет:

 цитата:
City->City


ИМХО это не прокатит если это подчиненная рабочая область ( не проверял но судя по коду не должно работать правильно )

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




Пост N: 3567
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.08.14 10:31. Заголовок: Haz пишет: ИМХО это..


Haz пишет:

 цитата:
ИМХО это не прокатит если это подчиненная рабочая область


А как тогда сделать ?


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




Пост N: 299
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.08.14 10:49. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как тогда сделать


добавить столбец которому назначить блок выборки записи из/в City->City.
:bData := {|| IF(Pcount() = 0, City->City, City->City := x )}

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




Пост N: 3568
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.08.14 11:19. Заголовок: А по исходнику есть:..


А по исходнику есть:
METHOD LoadRelated( cAlias, lEditable, aNames, aHeaders ) CLASS TSBrowse
Только как прикрутить не знаю ?

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




Пост N: 300
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.08.14 11:51. Заголовок: Судя по исходнику до..


Судя по исходнику должно вызываться явно
oBrw:LoadRelated(.... )
Добавляет в бровс колонки с блоком выборки из указанной рабочей области
Andrey пишет:

 цитата:
Только как прикрутить не знаю


что именно не понятно в вызове LoadRelated( cAlias, lEditable, aNames, aHeaders ) ?

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




Пост N: 3569
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.08.14 12:24. Заголовок: Haz пишет: что имен..


Haz пишет:

 цитата:
что именно не понятно в вызове LoadRelated( cAlias, lEditable, aNames, aHeaders ) ?


Синтаксис.
Методом проб и ошибок получилось:
&cBrw:LoadRelated( "Sity", lEdit, {"Sity"}, {"Город"} )

А как это поле вставить в определённую колонку ?
Можно ли уже в сформировавшемся TBROWSE функцией
LoadFields( cBrw, ParentForm, lEdit, aPoleField) заменить на мою колону LoadRelated() ?



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




Пост N: 302
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.08.14 12:59. Заголовок: LoadRelated - не зам..


LoadRelated - не заменяет, а добавляет через ::AddColumn( TSColumn():New() т.е. вместо - никак
нужно использовать :DelColumn() и :InsColumn() руками или просто в нужной колонке отредактировать блок выборки записи на нужный

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




Пост N: 3570
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.08.14 13:27. Заголовок: Можно таблицу формир..


Можно таблицу формировать и так:
{"NN", "DOGOVOR", "City->City", "Street->Street", "FIO", и т.д.} // т.е. использовал SET RELATION TO xxxxxx
{"№", "Договор", "Город", "Улица", "ФИО абонента",и т.д.}

// -------------- запишим значения в объект TsBrowse -------------
For nI := 1 to Len(aPoleField)
IF AT("->",aPoleField[nI]) > 0
cStr := ALLTRIM(aPoleField[nI])
cAlias:= SUBSTR(cStr,1, AT("->",cStr)-1)
cPole := SUBSTR(cStr, AT("->",cStr)+2)
&cBrw:LoadRelated( cAlias, lEdit, { cPole }, { aPoleName[nI] } )
ELSE
&cBrw:LoadRelated( ALIAS(), lEdit, { aPoleField[nI]}, { aPoleName[nI] } )
ENDIF
&cBrw:aColumns[nI]:cHeading := aPoleName[nI]
&cBrw:aColumns[nI]:cPicture := aPolePict[nI]
&cBrw:aColumns[nI]:nAlign := aPoleAlign[nI]
&cBrw:SetColSize(nI,aPoleSize[nI])
Next

Работает !!!

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




Пост N: 3571
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.08.14 13:34. Заголовок: Как изменить шрифт р..


Как изменить шрифт редактирования поля ?



У себя в программе так:
&cBrw:ChangeFont( aFont[ 1 ], , 1 )
&cBrw:ChangeFont( aFont[ 2 ], , 2 )
&cBrw:ChangeFont( aFont[ 3 ], , 3 )
&cBrw:ChangeFont( aFont[ 4 ], , 4 )
&cBrw:ChangeFont( aFont[ 5 ], , 5 ) // ? 5 шрифт завел для редактирования


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




Пост N: 303
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.08.14 14:52. Заголовок: попробуй так obrw:a..


попробуй так
obrw:aColumns[n]:hFontEdit := aFont[5]

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




Пост N: 3574
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.08.14 15:01. Заголовок: Haz пишет: попробуй..


Haz пишет:

 цитата:
попробуй так


Получилось !!! Спасибо !!!

А курсор как огрызок. Такой должен быть ?



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




Пост N: 304
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.08.14 15:19. Заголовок: Andrey пишет: А кур..


Andrey пишет:

 цитата:
А курсор как огрызок.


не знаю, надо :oEdit ковырять

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




Пост N: 3575
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.08.14 16:29. Заголовок: А как редактировать ..


А как редактировать ПОЛЕ при многопользовательском режиме ????
Там же сначала нужно блокировать запись, а потом редактировать, а потом снимать блокировку !
Или TBROWSE сам это делает ?

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




Пост N: 305
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.08.14 16:50. Заголовок: Andrey пишет: Или T..


Andrey пишет:

 цитата:
Или TBROWSE сам это делает


делает в методе :PostEdit по умолчанию,
PS. вообще блокировка записи это для ленивых еще в clipper делал обработку ошибки "требуется блокировка" - как блокировку и повтор операции , если блокировать не удавалось - сообщение что нужно подождать и опять повтор или отказ. После этого забыл что такое Rlock()
Сейчас не пользую т.к. работаю с ADS через SQL запросы и блокировка теперь это проблема ADS сервера

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




Пост N: 3583
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.08.14 01:43. Заголовок: Всем доброй ночи ! П..


Всем доброй ночи !
Подскажите пожалуйста про такую вещь...

У меня в TBROWSE сделано так:
// обработка нажатий клавиш, включая ENTER
&cBrw2:bKeyDown := { | nKey , nFalgs| nRetCode := MyKeyAction(nKey,cBrw2, cParent, 0, nFalgs) }
// Двойной клик мышки на МАРКЕРЕ
&cBrw2:bLDblClick:= { || nRetCode := MyAction(cBrw2, cParent) }

А функция обработки мышки и ENTER такая:
//////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION MyAction(oBrw, cParent )
LOCAL cText, nRet := 0
/*cText := "Здесь будет карточка !" + CRLF + CRLF
cText += "Line: " + STR(oBrw_5:nLastPos) + CRLF + CRLF
cText += "Cell: " + STR(oBrw_5:nCell) + CRLF + CRLF
cText += "RECNO(): " + STR(RECNO())+ CRLF + CRLF
cText += "1(): " + STR(FIELDGET(FIELDNUM("KSTREET")))+ CRLF + CRLF
cText += "2(): " + FIELDGET(FIELDNUM("STREET"))+ CRLF + CRLF
MsgInfo(cText) */
nRet := FIELDGET(FIELDNUM("KSTREET"))
// Как мне здесь закончить выбор из TBROWSE ????
// чтобы вернулось значение nRet

Return nRet

Достаточно ли поставить ThisWindow.Release ? или еще что-то нужно ставить ?
И возврат значения возможен только через STATIC/PUBLIC переменную ?
Хотелось бы через LOCAL переменную, я к ним привык....

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




Пост N: 306
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.08.14 16:52. Заголовок: Andrey пишет: Подск..


Andrey пишет:

 цитата:
Подскажите пожалуйста про такую вещь...



Не совсем понял о чем речь

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




Пост N: 3584
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.08.14 20:35. Заголовок: Haz пишет: Не совсе..


Haz пишет:

 цитата:
Не совсем понял о чем речь

Andrey пишет:

 цитата:
// Как мне здесь закончить выбор из TBROWSE ????
// чтобы вернулось значение nRet


Т.е. нужно закрыть сам TBROWSE и окно на котором TBROWSE открывался.
И вернуть значение nRet которое было выбрано в TBROWSE.
Это обычный выбор из справочника (у меня в терминалке).

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




Пост N: 307
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.08.14 21:32. Заголовок: Andrey пишет: Т.е. ..


Andrey пишет:

 цитата:
Т.е. нужно закрыть сам TBROWSE и окно


понятно.
Все правильно ...
Выбор из Tbrowse запоминаем в переменной и ее возвращаем функцией которая создает окно и сам бровс.
перед вызовом ThisWindow.Release эту переменную и назначаем
( эту переменную можно передавать в обработчик по ссылке - через @ )



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




Пост N: 3585
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.08.14 23:26. Заголовок: Haz пишет: ( эту пе..


Haz пишет:

 цитата:
( эту переменную можно передавать в обработчик по ссылке - через @ )



Вот мой код:
STATIC FUNCTION MyActionDim(oBrw, cParent )
LOCAL nRet := 0

nRet := FIELDGET(FIELDNUM("KCITY"))

DoMethod( 'Form_Dim',"oBrw_5", "Release" )
Domethod("Form_Dim", "Release")

Return nRet

У меня всегда возврат 0 !!
Я так понял что формы обе закрываются, а в этой функции - Return nRet - не возвращается !

Т.е. тогда нужно делать наверно так:
nRetCode := 0
MyActionDim(oBrw, cParent, @nRetCode)
MsgDebug( nRetCode )

STATIC FUNCTION MyActionDim(oBrw, cParent, nRet)
nRet := FIELDGET(FIELDNUM("KCITY"))
DoMethod( 'Form_Dim',"oBrw_5", "Release" )
Domethod("Form_Dim", "Release")
Return NIL

И везьде делать про ссылке передачу @nRetCode - правильно ?


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




Пост N: 308
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.08.14 08:01. Заголовок: Проще повесить на ON..


Проще повесить на ON CHANGE {|| nRetCode := FIELDGET(FIELDNUM("KCITY")) }. Это событие отрабатывает при перемещении по бровсу вверх низ и переменная всегда будет содержать значение из текущей строки ( а ведь ее нужно сделать текущей что б что то выбрать ).
При отказе от выбора по ESC или кнопке CANCEL - обнулять переменную перед закрытием окна.

PS/ уезжаю на несколько дней - м.б. не подскажу в это время - не знаю как с инетом

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




Пост N: 3586
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.08.14 12:15. Заголовок: Haz пишет: Проще по..


Haz пишет:

 цитата:
Проще повесить на ON CHANGE {|| nRetCode := FIELDGET(FIELDNUM("KCITY")) }.


Вот это мне и нужно было ! Спасибо !



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




Пост N: 3587
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.08.14 12:31. Заголовок: Имею в задаче 2 почт..


Имею в задаче 2 почти одинаковых TBROWSE, один со STATUSBAR, второй с подвалом.
У обоих навешаны функции обработки:
ON GOTFOCUS MyChangeBrowse(cAlias,"oBrw_5") ;
ON CHANGE (MyChangeBrowse(cAlias,"oBrw_5"),CorrectionFirstLast("oBrw_5"))

Функция для 1-го TBROWSE:
STATIC FUNCTION MyChangeBrowse(cAlias)
LOCAL nI, cVal

nI := INDEXORD()
IF nI == 0
cVal := NTOC(Recno()) + '/' + NTOC(RecCount())
ELSE
cVal := NTOC(OrdKeyNo()) + '/' + NTOC(OrdKeyCount())
ENDIF
Form_Spr.StatusBar.Item(2) := " Запись: " + cVal
RETURN Nil

Функция для 2-го TBROWSE:
STATIC FUNCTION MyChangeBrowse(cAlias)
LOCAL nI, cVal

nI := INDEXORD()
IF nI == 0
cVal := NTOC(Recno()) + '/' + NTOC(RecCount())
ELSE
cVal := NTOC(OrdKeyNo()) + '/' + NTOC(OrdKeyCount())
ENDIF
oBrw_5:aColumns[3]:cFooting := "Запись: "+cVal+SPACE(10)
RETURN Nil


На 1-ом TBROWSE нумерация отлично меняется при перемещении МАРКЕРА(курсора).
На 2-ом TBROWSE при перемещении МАРКЕРА(курсора) клавишами или мышкой в подвале нумерация записей НЕ МЕНЯЕТСЯ !!!
Как исправить ?

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




Пост N: 309
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.08.14 11:11. Заголовок: Andrey пишет: Как и..


Andrey пишет:

 цитата:
Как исправить ?


менять руками через присвоение :cFooting := 'новое значение'

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




Пост N: 3597
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.08.14 13:15. Заголовок: Haz пишет: менять р..


Haz пишет:

 цитата:
менять руками через присвоение :cFooting := 'новое значение'


Не понял...

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




Пост N: 310
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.08.14 14:28. Заголовок: Andrey пишет: Не по..


Andrey пишет:

 цитата:
Не понял..


это я не понял - не посмотрел что уже есть присвоение
после него попробуй oBrw_5:DrawFooters()


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




Пост N: 3598
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.08.14 16:09. Заголовок: Haz пишет: попробуй..


Haz пишет:

 цитата:
попробуй oBrw_5:DrawFooters()


Ура ! Заработало !
Спасибо БОЛЬШОЕ !!!

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




Пост N: 3599
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.08.14 17:10. Заголовок: Как сделать редактир..


Как сделать редактирование ячеек таблицы в TBROWSE, если нужно это сделать в отдельной функции ?
Т.е. при создании TBROWSE я делаю запрет на редактировании ячеек - oBrw_5:aColumns[nI]:lEdit := .F. и назначаю свою функцию обработки клавиш:
oBrw_5:bKeyDown := { | nKey , nFalgs| MyKeyActionDim(nKey,"oBrw_5", cParent) }
А уже в этой функции хочу сделать обработку по номерам колонок.
Допустит 1 колонку нельзя редактировать, вторую можно и т.д.
Т.е. как сделать GET поля применительно к МиниГуи - TBROWSE ?

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




Пост N: 311
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.08.14 18:59. Заголовок: Andrey пишет: если..


Andrey пишет:

 цитата:
если нужно это сделать в отдельной функции


в примерах tsbTest.prg есть Brw_4:aColumns[ 4 ]:bExtEdit := { |nAge,oBrw| fExternal( nAge, oBrw ) }
см как там сделано

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




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


Haz пишет:

 цитата:
см как там сделано


Спасибо БОЛЬШОЕ !!!

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




Пост N: 3607
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.08.14 14:21. Заголовок: Привет всем. Вот опя..


Привет всем.
Вот опять непонятка. Сделал контекстное меню для TBROWSE и после выбора из него это контекстное меню остается на экране.
ТОЛЬКО после второго клика на этом меню, оно уходит.


При использовании другого меню с MsgInfo() - нормально уходит, сразу после первого нажатия.
Что в вызываемой функции нужно добавить ?

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




Пост N: 317
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.08.14 14:37. Заголовок: Andrey пишет: ТОЛЬК..


Andrey пишет:

 цитата:
ТОЛЬКО после второго клика на этом меню, оно уходит.



есть такой косяк, не разбираясь добавил в конец нужного действа информационное сообщение типа MsgBox('Включен показ удаленных записей')


Спасибо: 1 
Профиль
a_sidorov



Пост N: 50
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 03.10.14 14:05. Заголовок: Есть проблема перекл..


Есть проблема переключения вида курсора c длинного (маркер на всю таблицу) на короткий по размеру ячейки и обратно.
Для выбора из справочника делаем при инициализации TBROWSE справочника курсор на всю таблицу
oBrw:lCellBrw := .f.
Если нужно редактировать справочник, переключаем на короткий курсор по размеру ячейки:
oBrw:lCellBrw := .t.
Курсор переключается нормально.
Для возврата назад после редактирования делаем:
oBrw:lCellBrw := .f.
oBrw:lLockFreeze:=.f.
oBrw:lEditable:=.f.
Курсор никак не хочет переключаться и остается по размером ячейки редактирования. Переинициализировать TBROWSE не очень хочется. Проблему решить пока не смог, может быть есть идеи или решение проблемы?


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




Пост N: 3640
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.10.14 11:54. Заголовок: a_sidorov пишет: Ку..


a_sidorov пишет:

 цитата:
Курсор никак не хочет переключаться и остается по размером ячейки редактирования.


Я тоже бы хотел узнать как в TBROWSE нужно это делать ?

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




Пост N: 321
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.10.14 13:06. Заголовок: a_sidorov пишет: Ку..


a_sidorov пишет:

 цитата:
Курсор никак не хочет



попробуйте примерно так

oBrw:lCellBrw := !oBrw:lCellBrw
oBrw:lEditable := oBrw:lCellBrw
AEval( oBrw:aColumns, { |oColumn| oColumn:lNoLite := oBrw:lCellBrw, oColumn:lFixLite := !oBrw:lCellBrw } )
oBrw:Refresh(.F.)


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



Пост N: 51
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 07.10.14 13:30. Заголовок: Haz пишет: попробуй..


Haz пишет:

 цитата:
попробуйте примерно так



Большое спасибо, работает!!!
Нужно добавить, что перед переходом для редактирования (короткий курсор по ячейке) нужно поставить

AEval( oBrw:aColumns, { |oColumn| oColumn:lFixLite := .f. } )

Иначе не работает второй переход на редактирование

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




Пост N: 3649
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.10.14 22:49. Заголовок: Всем привет. Пытаюсь..


Всем привет.
Пытаюсь изменить - Цвет линий между ячейками:

// для всех колонок исполнить кодовый блок - поставиь цвета: ЧЕРНЫЙ-буквы ;
// БЕЛЫЙ-ячейки ;
// КРАСНЫЙ-фона курсора ;
// ЖЕЛТЫЙ-букв курсора ;
// ЖЕЛТЫЙ-фона редактируемого поля ;
// СИНИЙ-букв редактируемого поля ;
// CYAN-линий между ячейками !

AEval( &(cBrw):aColumns, { |oColumn| oColumn:nClrFore := Rgb( 0, 0, 0) ,;
oColumn:nClrBack := Rgb(255,255,255) ,;
oColumn:nClrFocuBack := RED ,;
oColumn:nClrFocuFore := Rgb(255,255,0) ,;
oColumn:nClrEditBack := Rgb(255,255, 0) ,;
oColumn:nClrEditFore := Rgb( 0, 0,255) } )
// ------- Не работает !!! - oColumn:nClrLine := Rgb( 0,176,240) } )


Как это можно сделать ?

Почему в методе SaveColor() и RestColor() CLASS TSColumn.prg не используется
::aColorsBack[ 15 ] := ?
::aColorsBack[ 16 ] := ?
::aColorsBack[ 17 ] := ?

Как мне запомнить текущий Цвет линий между ячейками на время, а потом восстановить его ?

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




Пост N: 326
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.10.14 11:06. Заголовок: Andrey пишет: // --..


Andrey пишет:

 цитата:
// ------- Не работает !!! - oColumn:nClrLine := Rgb( 0,176,240) } )




через oBrw:Setcolor( {CLR_LINE}, { Rgb( 0,176,240)} ) попробуй
PS не проверял , но раз в методе есть - должно работать

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




Пост N: 3650
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.10.14 12:49. Заголовок: Haz пишет: через oB..


Haz пишет:

 цитата:
через oBrw:Setcolor( {CLR_LINE}, { Rgb( 0,176,240)} ) попробуй
PS не проверял , но раз в методе есть - должно работать



Это работает ! Спасибо.

Как мне запомнить текущий Цвет линий между ячейками на время, а потом восстановить его ?



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




Пост N: 3651
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.10.14 20:56. Заголовок: aSave_CLR_LINE := &#..


aSave_CLR_LINE := &cBrw:nClrLine //запомнить цвет линий между ячейками
............
&cBrw:SetColor( { CLR_LINE }, {aSave_CLR_LINE} ) // восстановить цвет линий между ячейками таблицы


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




Пост N: 3673
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.11.14 06:07. Заголовок: Опять руки дошли до ..


Опять руки дошли до TBROWSE и снова вопрос по нему.
Как получить ширину колонок в TBROWSE после их изменением юзером ?
Т.е. сохранить эту ширину в файле-настроек, а потом восстановить (установить) при других запусках.

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




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


Andrey пишет:

 цитата:
Как получить ширину колонок в TBROWSE



проще всего заглянуть в исходник

METHOD GetColSizes() INLINE If( ValType( ::aColSizes ) == "A", ::aColSizes, Eval( ::aColSizes ) )

PS. И соответственно получить ширину колонки n можно oBrw:GetColSizes()[n]

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




Пост N: 3674
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.11.14 17:50. Заголовок: Haz пишет: И соотве..


Haz пишет:

 цитата:
И соответственно получить ширину колонки n можно oBrw:GetColSizes()[n]


Спасибо !!!

При создании окна есть ON INIT.

А где при создании (или после создания) TBROWSE можно также сделать ?
Т.е. нужно восстановить все настройки допустим из ини-файла.

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




Пост N: 427
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.11.14 12:47. Заголовок: Andrey пишет:А где п..


Andrey пишет:
 цитата:
А где при создании (или после создания) TBROWSE можно также сделать ?
Т.е. нужно восстановить все настройки допустим из ини-файла.


сам же ответил:
 цитата:
При создании окна есть ON INIT.


там читаешь ini делаешь SetColWidth(...), расчитывашь новые (или из ini) размеры TsBrowse ...
или между END WINDOW и ACTIVATE WINDOW

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




Пост N: 428
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.11.14 12:50. Заголовок: Andrey SetColSize(...


Andrey
SetColSize(...), надо, а не SetColWidth(...)

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




Пост N: 3678
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.11.14 13:50. Заголовок: SergKis пишет: или ..


SergKis пишет:

 цитата:
или между END WINDOW и ACTIVATE WINDOW


Понял. Спасибо БОЛЬШОЕ !

Насколько я понял TBROWSE использует 5 настраиваемых шрифтов.
// --------- TSCOLUMN.PRG -------------------------------
// DATA hFont // 1-cells font
// DATA hFontHead // 2-header font
// DATA hFontFoot // 3-footer font
// DATA hFontSpcHd // 4-special header font
// DATA hFontEdit // 5-edition font

Как изменить их - нашел oBrw:ChangeFont( aFont[nI], , nI ),
а как получить из уже настроенного TBROWSE этот список шрифтов (с размерами и т.д.) ?



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




Пост N: 676
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.11.14 14:42. Заголовок: Andrey пишет: а как..


Andrey пишет:

 цитата:
а как получить из уже настроенного TBROWSE этот список шрифтов


Используйте для этого функцию GetFontParam(FontHandle)

Пример:
        aFontPar := GetFontParam(hFont) 
FontName := aFontPar [1]
FontSize := aFontPar [2]
bold := aFontPar [3]
italic := aFontPar [4]
underline := aFontPar [5]
strikeout := aFontPar [6]


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




Пост N: 3679
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.11.14 16:44. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Используйте для этого функцию GetFontParam(FontHandle)


Это я видел в h_tbrowse.prg

Мне нужно получить сам список хендлов.
hFont1 := oBrw:hFont
hFont2 := oBrw:hFontHead
и т.д. не работает.... или нужно типа так - hFont1 := oBrw:aColumns[ 1 ]:hFont ? Но тоже не работает...


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




Пост N: 328
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.11.14 19:28. Заголовок: Andrey пишет: А где..


Andrey пишет:

 цитата:
А где при создании (или после создания) TBROWSE можно также сделать ?
Т.е. нужно восстановить все настройки допустим из ини-файла.



у TsBrowse объекта есть блок DATA bInit // code block to be evaluated on init
может он ?

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




Пост N: 3680
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.14 00:42. Заголовок: Haz пишет: может он..


Haz пишет:

 цитата:
может он ?


Скорее всего нет ! Нужно ручками записывать и восстанавливать все параметры TBROWSA.

Вопрос предыдущий так и не смог решить.
Мне нужно получить сам список хендлов.
hFont1 := oBrw:hFont
hFont2 := oBrw:hFontHead
и т.д. не работает.... или нужно типа так - hFont1 := oBrw:aColumns[ 1 ]:hFont ? Но тоже не работает...


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




Пост N: 329
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.11.14 14:07. Заголовок: Andrey пишет: hFont..


Andrey пишет:

 цитата:
hFont1 := oBrw:aColumns[ 1 ]:hFont ? Но тоже не работает...



что именно не работает ? Нормально возвращает хендл и GetFontParam() по нему дает правильные данные

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




Пост N: 3681
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.14 14:21. Заголовок: Haz пишет: что имен..


Haz пишет:

 цитата:
что именно не работает ?



hFont1 := oBrw:aColumns[ 1 ]:hFont // строка 297
If hFont1 != Nil
aFontTmp := GetFontParam(hFont1)
ENDIF


Ошибка:
Error BASE/1004 Метод не экспортирован: ACOLUMNS
Called from ACOLUMNS(0)
Called from TBRUPFONTS(297)


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




Пост N: 330
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.11.14 14:48. Заголовок: Andrey пишет: Error..


Andrey пишет:

 цитата:
Error BASE/1004 Метод не экспортирован: ACOLUMNS


это в каком куске кода происходит ??? Похоже имеет место попытка получить шрифты с еще не инициализированного бровса.

PS. как oBrw передается в функцию ? если никак то объявлен ли oBrw к примеру как PUBLIC oBrw перед созданием ?

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




Пост N: 3682
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.14 14:58. Заголовок: Haz пишет: это в ка..


Haz пишет:

 цитата:
это в каком куске кода происходит ??? Похоже имеет место попытка получить шрифты с еще не инициализированного бровса.


Точно. Ж.. с ручкой - передача oBrw: между функциями неправильная !

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




Пост N: 3683
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.14 15:31. Заголовок: Как лучше менять шри..


Как лучше менять шрифты в TBROWSе ?

оBrw:ChangeFont( aFont[ 1 ], , 1 )
cBrw:ChangeFont( aFont[ 2 ], , 2 )
cBrw:ChangeFont( aFont[ 3 ], 1 , 3 )
cBrw:ChangeFont( aFont[ 4 ], , 4 )

или через

oBrw:hFont := _SetFont (ControlHandle,FontName,FontSize,bold,italic,underline,strikeout)
...............


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




Пост N: 332
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.11.14 18:45. Заголовок: Andrey пишет: Как л..


Andrey пишет:

 цитата:
Как лучше менять шрифты в TBROWSе



через оBrw:ChangeFont( aFont[ 1 ], , 1 ) , т.к. aFont[] может быть кодовым блоком и соответственно шрифт в колонке может меняться от условий.
К примеру - обслуженная заявка может отображаться перечеркнутым шрифтом, а черновик - курсивом

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




Пост N: 3685
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.14 19:48. Заголовок: А как тогда из выбра..


А как тогда из выбранного списка шрифтов (из меню) сделать переназначение шрифтов.
Допустим есть массив:
aFonts := {}
AADD( aFonts, {"Times New Roman",11,lBold,lItalic} )
AADD( aFonts, {"Arial" ,12,lBold,lItalic} )
AADD( aFonts, {"Tahoma" ,14,lBold,lItalic} )
AADD( aFonts, {"Courier New" ,16,lBold,lItalic} )
AADD( aFonts, {"Courier New" ,12,lBold,lItalic} )


---> через оBrw:ChangeFont( aFont[ 1 ], , 1 ) и т.д.
Т.е. как из массива aFonts[1] получить хендл этого шрифта (размер,болд,италик) ?
Достаточно сделать GetFontHandle( aFonts[1] ) или нет ?


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




Пост N: 334
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.11.14 21:23. Заголовок: Andrey пишет: Доста..


Andrey пишет:

 цитата:
Достаточно сделать GetFontHandle( aFonts[1] )


достаточно НО если это не блок кода

Не понял конечную цель , чего именно хотим ?
-если из меню шрифт назначить - тогда это передать параметры в define font и получив хендл назначенного шрифта через GetFontHandle() еспользовать его
- если по хендлу параметры шрифта получить , так пару сообщений назад Григорий все расписал
-если из объекта aColumns хендл получить - то сначала проверить его надо на тип данных через
IF Valtype(::hFont) == "B"
hFontHandle := eval(::hFont)
END

В итоге - цель то какая ?

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




Пост N: 3686
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.14 21:41. Заголовок: Haz пишет: достаточ..


Haz пишет:

 цитата:
достаточно НО если это не блок кода



Что-то не работает. Сделал по другому - работает, но может я неправ ?
/////////////////////////////////////////////////////////////////////////////////////////
FUNCTION TbrUpFonts(oBrw,aFonts) // перечитать шрифты TBROWSE
LOCAL nI, hFont, aF, ControlHandle := oBrw:hWnd

IF LEN(aFonts) > 0
FOR nI := 1 TO 5
aF := aFonts[nI]
hFont := _SetFont(ControlHandle,aF[1],aF[2],aF[3],aF[4])
oBrw:ChangeFont( hFont, , nI )
NEXT
ENDIF
..............


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




Пост N: 335
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.11.14 21:53. Заголовок: Andrey пишет: Что-т..


Andrey пишет:

 цитата:
Что-то не работает.



не обратил внимания у меня aFont из хендлов а твой массив параметров шрифта . тогда НЕ ДОСТАТОЧНО
тогда пример richEditEx в помощь ( уже вроде говорили про него в этом контексте месяца три назад )
там как раз показано как использовать _SetFont(), и правильно что туда заглянул


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




Пост N: 3687
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.14 22:00. Заголовок: Haz пишет: тогда пр..


Haz пишет:

 цитата:
тогда пример richEditEx в помощь ( уже вроде говорили про него в этом контексте месяца три назад )
там как раз показано как использовать _SetFont(), и правильно что туда заглянул



Про него уже забыл. Увидел в h_tbrowse.prg :
oBrw:hFont := _SetFont (ControlHandle,FontName,FontSize,bold,italic,underline,strikeout)

Извиняюсь за повторные (тупые) вопросы. Память уже не та...

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




Пост N: 3692
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.11.14 18:19. Заголовок: Подскажи пожалуйста ..


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

Есть окно:
DEFINE WINDOW Form_0
На нем
DEFINE TBROWSE oBrw
END TBROWSE

hFont := oBrw:hFont // считать размер шрифта
MsgDebug(hFont,GetFontParam(hFont)) // вроде правильно выдает...

Хочу автоматом вычислять размер колонок в зависимости от шрифта:
For nI := 1 TO ...
oBrw:aColumns[nI]:cHeading := aTitleTbrw[nI]
nLenPole := LEN( FIELDGET( FIELDNUM(aPole[nI]) ) )
nWidth := GetTextWidth( NIL, nLenPole, GetFontHandle(hFont) )
oBrw:SetColSize(nI, nWidth)
oBrw:aColumns[nI]:nAlign := DT_CENTER
.............

Только вот nWidth выдает всегда 0 ?



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




Пост N: 3693
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.11.14 18:28. Заголовок: Блин, разобрался... ..


Блин, разобрался...
Нужно вместо
nWidth := GetTextWidth( NIL, nLenPole, GetFontHandle(hFont) )
Задавать текст, а не число...

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




Пост N: 3694
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.11.14 19:30. Заголовок: Косяк при выводе таб..


Косяк при выводе таблицы - дублирование полей базы !!!

В моей базе 14 полей (включая мемо поле), в таблицу вывожу только 10 !
А при выводе в таблице показывает 20 полей, причем 10 с русским заголовком + 10 с английским.
Вот примерно код:
aTbHead := { 'Дата' , 'Время' , 'Код' , 'Наименование события', .... }
aTbField:= { 'DATE' , 'TIME' , 'NEVENT' , 'EVENT' , ... }
aTbAlign:= { DT_CENTER, DT_CENTER, DT_CENTER, DT_LEFT , ... }
*/
// Стандартная функция загрузки базы
LoadFields( "oBrw", 'Form_0', , aTbField )

FOR nI := 1 TO LEN(aTbHead)
cStr := SPACE( FieldSize( FieldPos(aTbField[nI]) ) )
nTbColWidth := GetTextWidth( NIL, cStr, GetFontHandle(hFont) )
oBrw:aColumns[nI]:cHeading := aTbHead[nI]
oBrw:SetColSize(nI, nTbColWidth)
oBrw:aColumns[nI]:nAlign := aTbAlign[nI]
NEXT
....

Что не так делаю ?

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




Пост N: 3695
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.11.14 01:30. Заголовок: Andrey пишет: LoadF..


Разобрался. Мой косяк.
Оказывается я два раза делал в программе загрузку файлов...
LoadFields( oBrw, 'Form_0' )

oBrw:LoadFields( .F. ) // все поля НЕ редактируемые


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




Пост N: 3697
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.11.14 17:38. Заголовок: Как можно вывести МЕ..


Как можно вывести МЕМО поле в TBROWSE в одну строчку, чтобы таблица не увеличивалась на две строки ?

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




Пост N: 4254
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.11.14 17:48. Заголовок: написать свой блок к..


написать свой блок кода для вывода этого поля

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




Пост N: 3698
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.11.14 17:55. Заголовок: Haz пишет: через oB..


Haz пишет:

 цитата:
через oBrw_1:aColumns[1]:bData



Что то не получается у меня....
Я отказался от функции (h_tbrowse.prg) :
//LoadFields( "oBrw", 'Form_0', .F., aTbField ) // все поля НЕ редактируемые

Воn мой код:

END TBROWSE

//* | наименование | алиас | поле | формат поля |
AADD( aPole, { "Дата" , "" , "DATE" , "99.99.9999" , ....
AADD( aPole, { "Время" , "" , "TIME" , "99:99:99" , ...
AADD( aPole, { "Код" , "" , "NEVENT" , "@Z 999" , ...
AADD( aPole, { "Наименование" , "" , "EVENT" , REPLICATE("x",60) , ...

FOR nI := 1 TO LEN(aPole)
cStr := aPole[nI,4] // шаблон вывода поля
nTbColWidth := GetTextWidth( NIL, cStr, GetFontHandle(hFont) )
oBrw:aColumns[nI]:cHeading := aPole[nI,1] // Строка 106
oBrw:aColumns[nI]:bData := &('{ || "'+aPole[nI,3]+'" }')
oBrw:SetColSize(nI, nTbColWidth)
oBrw:aColumns[nI]:nAlign := aPole[nI,6]
oBrw:aColumns[nI]:cPicture := aPole[nI,4]
NEXT

Выдает ошибку:
Error BASE/1132 Переполнение массива: Неверное количество аргументов
Called from MAIN(106)


Где неправ, подскажите пожалуйста...



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




Пост N: 4255
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.11.14 18:09. Заголовок: Примеры смотрел ? Ts..


Примеры смотрел ?
TsB_Mdi.prg
TsBtest.prg

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




Пост N: 3699
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.11.14 19:02. Заголовок: Dima пишет: Примеры..


Dima пишет:

 цитата:
Примеры смотрел ?


Вот мой исходник - https://cloud.mail.ru/public/6fedc2671caf/Tsb_Config0.prg

Там удалил пару строк - теперь ошибка в 104 строке.
В примере нужно наверно создавать колонки типа
oBrw:AddColumn( TSColumn():New( If(.F., OemToAnsi(hb_eol() + "№№"), hb_eol() + "№№") .....
А как я не знаю... Подскажите пожалуйста, может я и не прав.




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




Пост N: 3700
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.11.14 20:41. Заголовок: Вот, разобрался. ..


Вот, разобрался.

FOR nI := 1 TO LEN(aPole)

ADD COLUMN TO TBROWSE oBrw // добавить новую колонку в TBROWSE

cStr := aPole[nI,4] // шаблон вывода поля
nTbColWidth := GetTextWidth( NIL, cStr, GetFontHandle(hFont) )
oBrw:aColumns[nI]:cHeading := aPole[nI,1]

bBlock := FieldBlock( aPole[nI,3] )
IF VALTYPE(FIELDGET(FIELDNUM(aPole[nI,3]))) == "M"
ELSE
oBrw:aColumns[nI]:bData := bBlock
ENDIF
oBrw:SetColSize(nI, nTbColWidth)
oBrw:aColumns[nI]:nAlign := aPole[nI,6]
oBrw:aColumns[nI]:cPicture := aPole[nI,4]
NEXT


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




Пост N: 3701
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.11.14 00:09. Заголовок: Хотелось бы сделать ..


Хотелось бы сделать показ мемо в отдельном (дополнительном) окне

Haz пишет:

 цитата:
если примерно как на картинке то
добавить в бровс пустую колонку , дать ей болк выборки { || 'MEMO'}. разрешить редактирование :lEdit := .T.и через oBrw_1:aColumns[11]:bPrewEdit := {|| ...} вызывать функцию которая в окне показывает мемо, Эта функция должна вернуть FALSE ( ну или через BtnBox делать чтоб совсем как на картинке)



Что-то не получается это окно.... Пожалуйста помоги подправить...
Вот исходник мой - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample/



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




Пост N: 337
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.11.14 12:00. Заголовок: Andrey пишет: Что-т..


Andrey пишет:

 цитата:
Что-то не получается это окно...



1. EdtiBox value нужно присваивать не пустую строку а значение мемо поля
2. Forma_memo должна вернуть .F. чтоб не пустить в редактирование поля бровс

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




Пост N: 3702
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.11.14 16:31. Заголовок: Haz пишет: 1. EdtiB..


Haz пишет:

 цитата:
1. EdtiBox value нужно присваивать не пустую строку а значение мемо поля
2. Forma_memo должна вернуть .F. чтоб не пустить в редактирование поля бровс



Сделал и получилось ! Спасибо !!!

А как теперь сделать:
1) Возврат и запись отредактированного мемо-поля ?
2) Кнопочку маленькую (квадратненькую, в размер ячейки) повесить на активное мемо-поле в TBROWSE
как в DBFNavigator-e ?

Пример там же - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample/
Только базу удалить старую нужно.


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




Пост N: 338
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.11.14 22:24. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как теперь сделать:
1) Возврат и запись отредактированного мемо-поля ?
2) Кнопочку маленькую (квадратненькую, в размер ячейки) повесить на активное мемо-поле в TBROWSE



1. При закрытии окна если мемо поле редактировалось - запросить сохранение и если пользователь скажет ДА - то присвоить значение Value из Editbox в мемо поле ( возможно через RLock() ).

2. Посмотри в примерах TsBrowse использование метода :SetBtnGet() это и есть кнопочка

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




Пост N: 3703
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.11.14 23:47. Заголовок: Haz пишет: 2. Посмо..


Haz пишет:

 цитата:
2. Посмотри в примерах TsBrowse использование метода :SetBtnGet() это и есть кнопочка


В одно примере TsBtest.prg есть только одно использование:
Brw_4:SetBtnGet( 5, "", { | oEdit, dVar | dVar := fBtnGet( dVar, oEdit:oWnd ),;
oEdit:VarPut( dVar ), oEdit:Refresh() }, 16 )


В другом примере TsB_Mdi.prg все (кроме одного) закомментировано:
// activating BtnGet to column 7 - not impement yet
// Brw_6:SetBtnGet( 7, "Calen16", { | oGet, dVar | aRect := GetCoors( oGet:hWnd ), ;
// dVar := FwCalendar( oGet:Value(), aRect[ 1 ], aRect[ 2 ], oGet:oWnd ),;
// oGet:cText( dVar ), oGet:Refresh(), oGet:KeyDown( VK_RETURN, 0 ) }, 16 )


Как у себя сделать, вообще не пойму ...
И почему текст закомментирован ?
И вдобавок еще FwCalendar() - наверно из FiveWin'a дернули ?
Помогите пожалуйста разобраться.



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




Пост N: 339
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.11.14 09:19. Заголовок: Andrey пишет: В одн..


Andrey пишет:

 цитата:
В одно примере TsBtest.prg есть только одно использование:
Brw_4:SetBtnGet( 5, "", { | oEdit, dVar | dVar := fBtnGet( dVar, oEdit:oWnd ),;
oEdit:VarPut( dVar ), oEdit:Refresh() }, 16 )



а чего тут разбираться
колонке 5 назначается кнопка размером 16 пикселей, на нажатие которой вешаем кодовый блок .
в сам блок передаем параметрами объект редактирования и значение до редактирования dVar.
после редактирования dVar содержит новое значение и через VarPut присваиваем ее значение буферу редактора , потом делаем Refresh чтоб на экране значение поля ввода перерисовалось на значение буфера.

В твоем случае dVar это значение мемо поля , fBtnGet - функция внешнего редактора которая возвращает - значение новое для мемо
Но тогда :PrevEdit не надо использовать т.к. BtnGet появляется внутри ячейки редактируемой



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




Пост N: 3705
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.11.14 14:49. Заголовок: Нет не появляется кн..


Нет не появляется кнопка при активном маркере, как картинке:

oBrw:SetBtnGet( nI, "", { | oEdit, dVar | dVar := fBtnGet( dVar, oEdit:oWnd ),;
oEdit:VarPut( dVar ), oEdit:Refresh() }, 16 )
oBrw:aColumns[nI]:bPrevEdit := {|| FORMA_MEMO( &( bBlock2 ) ) }

Если убрать oBrw:aColumns[nI]:bPrevEdit := {|| FORMA_MEMO( &( bBlock2 ) ) } , то кнопка появляется ТОЛЬКО при редактировании.

Пример там же - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample/


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




Пост N: 341
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.11.14 15:01. Заголовок: Andrey пишет: Если ..


Andrey пишет:

 цитата:
Если убрать oBrw:aColumns[nI]:bPrevEdit := {|| FORMA_MEMO( &( bBlock2 ) ) } , то кнопка появляется ТОЛЬКО при редактировании.



так и должно быть это btnGET - т.е. кнопка в GET объекте , поэтому и писал что нужно не использовать PrevEdit (иначе GET не создается )

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




Пост N: 3706
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.11.14 15:10. Заголовок: Haz пишет: так и до..


Haz пишет:

 цитата:
так и должно быть это btnGET - т.е. кнопка в GET объекте , поэтому и писал что нужно не использовать PrevEdit (иначе GET не создается )



А как тогда быть ? Кнопка на МАРКЕРЕ НЕ ПОКАЗЫВАЕТСЯ, только при редактировании ?
А я хочу показ кнопки без редактирования, а при редактировании чтобы срабатывала
функция FORMA_MEMO( &( bBlock2 ) ?
Или это сделать нельзя ?

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




Пост N: 342
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.11.14 15:20. Заголовок: Andrey пишет: Или э..


Andrey пишет:

 цитата:
Или это сделать нельзя ?



похоже что невозможно , сам остановился на варианте с PrevEdit

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




Пост N: 3712
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.11.14 13:28. Заголовок: Хочу сделать обработ..


Хочу сделать обработку полей в своей ОТДЕЛЬНОЙ функции.

//* | наименование | алиас | поле | формат поля |
AADD( aPole, { "Дата" , "" , "DATE" , "99.99.9999" , ....
AADD( aPole, { "Время" , "" , "TIME" , "99:99:99" , ...
AADD( aPole, { "Код" , "" , "NEVENT" , "@Z 999" , ...
.....
aPole := ListFieldsTbrws() // считать структуру таблицы
FOR nI := 1 TO LEN(aPole)

ADD COLUMN TO TBROWSE oBrw // добавить новую колонку в TBROWSE
....
aDimPole := aPole[nI]
oBrw:aColumns[nI]:lEdit := .T.
oBrw:aColumns[nI]:bPrevEdit := {|| MyEditPole( aDimPole ) }
....
NEXT
...

При вызове MyEditPole( aDimPole ) всегда показывается последний массив aPole[ПОСЛЕДНИЙ!!!].
FUNCTION MyEditPole( aPole )
LOCAL lRet := .F.
MsgDebug("Здесь хочу сделать обработку ВСЕХ полей БД !",aPole)
RETURN lRet

Почему ? Как сделать правильно ?

Пример тут - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample

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




Пост N: 685
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.11.14 13:42. Заголовок: Andrey пишет: Как с..


Andrey пишет:

 цитата:
Как сделать правильно ?


Ответ отправил по почте

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




Пост N: 349
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.11.14 14:52. Заголовок: Andrey пишет: Как с..


Andrey пишет:

 цитата:
Как сделать правильно ?



gfilatov2002 пишет:

 цитата:
Ответ отправил по почте



думаю в почте примерно так

oBrw:aColumns[nI]:bPrevEdit := &("{|| MyEditPole( " + NTOC(nI) + ") }" )

FUNCTION MyEditPole( nI )
...
aDimPole := aPole[nI]
...


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




Пост N: 686
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 13.11.14 15:20. Заголовок: Haz пишет: oBrw:aCo..


Haz пишет:

 цитата:
oBrw:aColumns[nI]:bPrevEdit := &("{|| MyEditPole( " + NTOC(nI) + ") }" )


Да, так сработает...
Но я предложил не использовать макроподстановку, и выкрутился с помощью массива oBrw:aColumns[oBrw:nCell]

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




Пост N: 3713
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.11.14 19:18. Заголовок: Спасибо за помощь ! ..


Спасибо за помощь !
Что выбрать даже и не знаю... Глаза разбегаются...

Я сделал еще вариант:
oBrw:aColumns[nI]:Cargo := aPole[nI]
oBrw:aColumns[nI]:bPrevEdit := {|| MyEditPole( oBrw:aColumns[oBrw:nCell]:Cargo ) }







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




Пост N: 350
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.11.14 23:44. Заголовок: Andrey пишет: oBrw:..


Andrey пишет:

 цитата:
oBrw:aColumns[nI]:Cargo



Андрей, выведи чему равно значение ::cData для каждой колонки и у тебя появится четвертый вариант

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




Пост N: 3719
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.11.14 01:23. Заголовок: Не совсем понял для ..


Не совсем понял для чего выводить - значение ::cData для каждой колонки....

Мне вообще то нужно передать всю строку (текущую) массива aPole[nI], для дальнейшего анализа.
Более подробно функция MyEditPole() в примере - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample

А как получить допустим по нажатии Enter или мышки в функцию MyEditPole()
координаты МАРКЕРА/КУРСОРА ? И длину маркера тоже как получить ?



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




Пост N: 351
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.11.14 10:39. Заголовок: Andrey пишет: Не со..


Andrey пишет:

 цитата:
Не совсем понял для чего выводить - значение ::cData для каждой колонки


чтобы убедиться что cData после значка алиаса содержит имя поля базы Alias->FieldName по которому эта колонка построена . Т.к. колонки можно менять местами , удалять и пр. то номер колонки бровса очень часто НЕ совпадает с номером поля базы . И попытки вытянуть поле по номеру приведут к ошибке. Правильным будет решение выделять имя поля например как сFieldName := Substr( oBrw:aColumns[x]:cData, ">") или найти номер колонки , соответствующий полю nCol := Ascan( oBrw:aColumns, {|e| Substr(e:cData, ">") == cField ) })

Andrey пишет:

 цитата:
координаты МАРКЕРА/


при нажатии Enter попадаем в oEdit объект и читаем его переменные oEdit:oWnd:nTop. oEdit:oWnd:nLeft и тд

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




Пост N: 3720
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.11.14 13:26. Заголовок: Спасибо Haz за разъя..


Спасибо Haz за разъяснения !

Haz пишет:

 цитата:
и читаем его переменные oEdit:oWnd:nTop. oEdit:oWnd:nLeft и тд


НЕ читаются. Пишет Метод не экспортирован: OWND или другую хрень.
Покажи пожалуйста как правильно прочитать для моего примера ?

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




Пост N: 353
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 16.11.14 14:38. Заголовок: Andrey пишет: НЕ чи..


Andrey пишет:

 цитата:
НЕ читаются.



Похоже добраться до объекта oEdit можно только через :SetBtnGet(), а точнее через его bAction.
Андрей , зачем тебе это , поделись что удумал. Может есть какой выход


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




Пост N: 3730
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.11.14 15:58. Заголовок: Haz пишет: Андрей ,..


Haz пишет:

 цитата:
Андрей , зачем тебе это , поделись что удумал. Может есть какой выход



Хочу для юзеров сделать показ подсказки типа такой:


А то при редактировании юзера не будут закрывать поле и данные не сохранятся.

А еще есть всплывающие подсказки, их тоже можно прикрутить.

Только координаты маркера нужны ! Как их получить ?


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




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


Andrey пишет:

 цитата:
А то при редактировании юзера не будут закрывать поле и данные не сохранятся.



стандартными средствами похоже не сделать , надо менять исходники или TGetBox или TSBrowse.

я для таких забывчивых пользователей так и делаю в каждом релизе HMG чтоб было как в Excel сдвинул фокус и данные уже сохранились

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




Пост N: 3732
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.11.14 16:27. Заголовок: Haz пишет: стандарт..


Haz пишет:

 цитата:
стандартными средствами похоже не сделать , надо менять исходники или TGetBox или TSBrowse.

я для таких забывчивых пользователей так и делаю в каждом релизе HMG чтоб было как в Excel сдвинул фокус и данные уже сохранились


А почему дополнительный флаг не сделать сразу в исходники ?
Григорий бы внес и все пользовались бы ?
Не только у меня проблемы такие, у всех....

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




Пост N: 431
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.11.14 22:11. Заголовок: Andrey пишет:А почем..


Andrey пишет:
 цитата:
А почему дополнительный флаг не сделать сразу в исходники ?
Григорий бы внес и все пользовались бы ?


Сам внеси или на весь объект TsBrowse или в каждую колонку (объект) :
 
IF ! __objHasData(oBrw, 'nModify_Rec') // добавим переменну в oBrw
__objAddData (oBrw, 'nModify_Rec' )
ENDIF
oBrw:nModify_Rec := 0
при модификации +1 и обрабатывай когда надо и не забываем в 0 ставить
или на колонки
FOR i := 1 TO len(oBrw:aColumns)
oCol := oBrw:aColumns[ i ]
IF ! __objHasData(oCol, 'nModify_Col') // добавим переменну в oCol
__objAddData (oCol, 'nModify_Col' )
ENDIF
oCol:nModify_Col := 0
NEXT
во When на колонку oCol:nModify_Col := 0
в OnChange +1


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




Пост N: 432
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.11.14 22:13. Заголовок: PS это делаешь в сво..


PS
это делаешь в своем коде, после создания oBrw или всех колонок - смотря что выбрал для реализации

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




Пост N: 355
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.11.14 14:16. Заголовок: SergKis пишет: это ..


SergKis пишет:

 цитата:
это делаешь в своем коде, после создания oBrw



Думаю, Андрей имел в виду "флаг" при переключении которого запись в редактируемую ячейку происходила бы при потере фокуса get объектом даже если LastKey() <> VK_ENTER (просто ткнули мышом в другую ячейку) . В TSB сейчас редактирование прерывается и значение не сохраняется ,Get закрыт и значение его буфера потеряно.




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




Пост N: 433
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.11.14 18:46. Заголовок: Haz пишет:запись в р..


Haz пишет:
 цитата:
запись в редактируемую ячейку происходила бы при потере фокуса get объектом даже если


Я тоже это имел ввиду, т.е. если не хватает флага, то можно добавить на oBrw или на каждую колонку oTsColumn.
Можно добавить новый или изменить сущест. метод объекта (см. Harbour для начинающих), без обращения к Григорию
Я с TsBrowse не работаю, но GetBox использую, а в него из TsColumn передается блок LostFocus, а в нем (блоке) спокойно,
получив oGet проделать операции по сохранению ...

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




Пост N: 356
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 17.11.14 19:32. Заголовок: SergKis пишет: полу..


SergKis пишет:

 цитата:
получив oGet проделать операции по сохранению ...


спасибо за идею, я просто менял исходники постояннно

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




Пост N: 3739
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.14 22:28. Заголовок: Возвращаюсь дальше к..


Возвращаюсь дальше к моему примеру. Вот возник следующий вопрос:
Как мне сделать редактирование ТОЛЬКО первой колонки ("Код") ТОЛЬКО по клавише F10 ?
Вот пример тут - https://cloud.mail.ru/public/56155cb9fec5/MiniGui-Sample

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




Пост N: 358
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.11.14 12:23. Заголовок: Andrey пишет: Как м..


Andrey пишет:

 цитата:
Как мне сделать редактирование ТОЛЬКО первой колонки ("Код") ТОЛЬКО по клавише F10 ?


F10 завязана на Sysmenu окна и по умолчанию бровсом не перехватывается. Разбираться как отучить не стал
а на F9 - нет ничего проще

oBrw:nFireKey := VK_F9
oBrw:bUserKeys := { |a,b,c| KeyPressed(a,b,c) }

FUNC KeyPressed( nKey, nFlag, oBrw )
LOCAL xRet := nKey
IF nKey == VK_RETURN .OR. nKey == oBrw:nFireKey .AND. oBrw:nCell > (IF(oBrw:lSelector, 2, 1))
xRet := .F.
END
RETURN xRet


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




Пост N: 3741
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.11.14 14:22. Заголовок: Haz пишет: нет ниче..


Haz пишет:

 цитата:
нет ничего проще



Не совсем получается. При обработке первой колонки по F9 попадаю в обработку 1-ой колонки.
А остальные колонки - становятся закрытыми !!!
Что-то не так делаю ?
Исправленный пример там же.

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




Пост N: 359
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.11.14 14:54. Заголовок: Andrey пишет: Не со..


Andrey пишет:

 цитата:
Не совсем получается. При обработке первой колонки по F9 попадаю в обработку 1-ой колонки.
А остальные колонки - становятся закрытыми !!!


Сам же хотел ТОЛЬКО первую и ТОЛЬКО по F

Или остальные как обычно должны ? Тогда подправь условие KeyPressed() - там всего 3 строки кода

PS.
IF nKey == VK_RETURN .AND. oBrw:nCell == (IF(oBrw:lSelector, 2, 1)) .OR. nKey == oBrw:nFireKey .AND. oBrw:nCell > (IF(oBrw:lSelector, 2, 1))

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




Пост N: 3742
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.11.14 15:23. Заголовок: Haz пишет: там всег..


Haz пишет:

 цитата:
там всего 3 строки кода


Понял, разобрался.

А как все-таки получить в функции MyEditPole() координаты курсора/маркера ?
MsgDebug( "Right=", oBrw:aColumns[oBrw:nCell]:oEdit:nRight, "Left=", oBrw:aColumns[oBrw:nCell]:oEdit:nLeft )
Выдает ошибку : Error BASE/1004 Метод не экспортирован: NRIGHT



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




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


Andrey пишет:

 цитата:
А как все-таки получить в функции MyEditPole() координаты курсора/маркера ?



Получить можно , но при выводе твоей подсказки "Нажмите ввод для сохранения" Get объект потеряет фокус и скорее всего редактирование завершится

до Get можно добраться через блок oColumns:bEditing - этот блок выполняется ( если определен) когда GET создан.В него передается 2 параметра :
If oCol:bEditing != Nil
Eval( oCol:bEditing, uVar, Self )
EndIf
т.е. значение ячейки и объект aColumn, координаты можно дернуть через oColumn:oEdit:nTop, oColumn:oEdit:nLeft. Но вот что с ними делать будешь ?





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




Пост N: 434
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.11.14 17:56. Заголовок: Andrey пишет:А как в..


Andrey пишет:
 цитата:
А как все-таки получить в функции MyEditPole() координаты курсора/маркера ?


попробуй отработать по GetBox (bWhen, bGotFocus, bValid):
 

// h := GetFocus() - на GotFocus и Valid можно, на When не помню, на Action
// нельзя в фокусе будет Button Action, тут только через:
h := GetControlHandle(_HMG_ThisControlName, _HMG_ThisFormName)
i := aScan(_HMG_aControlHandles, h)
IF i > 0 .and. _HMG_aControlType[ i ] == "GETBOX"
nRow := GetWindowRow(h) // _HMG_aControlRow [ i ]
nCol := GetWindowCol(h) // _HMG_aControlCol [ i ]
nWidth := GetWindowWidth(h) // _HMG_aControlWidth [ i ]
nHeight := GetWindowHeight(h) // _HMG_aControlHeight[ i ]
oGet := _HMG_aControlHeadClick[ i ]
uValue := oGetVarGet() // значение получить
...
oGet:VarPut(uValue) // значение записать
ENDIF

т.е. Label создать в bWhen, убрать в bLoctFocus или bValid


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




Пост N: 3745
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.11.14 18:45. Заголовок: http://f5.s.qip.ru/x..




Имею вот такую таблицу.
Хочу раскрасить её по строкам, коме 3 и 4 колонки.
Цвета текста содержатся в 3-ей колонке, а цвет фона в 4-ой колонке.
Массив aStColorUsl равен:
{ 1, 'Цвет текста/фона удаленных записей' , CLR_HGRAY , CLR_BLACK , 0 }
{ 2, 'Цвет текста/фона столбца "Код" = 0' , 255 , MyRGB({235,117,123}) , 0 }
{ 3, 'Цвет столбца "Наименование события" пустое' , 128 , MyRGB({235,117,123}) , 0 }
{ 4, 'Цвет текста/фона столбца "Код" = 1' , CLR_WHITE , CLR_GRAY , 1 }
{ 5, 'Цвет текста/фона столбца "Код" = 2' , CLR_YELLOW , CLR_GRAY , 1 }
{ 6, 'Цвет текста/фона столбца "Код" = 3' , CLR_RED , CLR_GRAY , 1 }
{ 7, 'Цвет текста/фона столбца "Код" = 4' , CLR_HGRAY , CLR_GRAY , 1 }
{ 8, 'Цвет текста/фона столбца "Код" = 5' , CLR_BLUE , CLR_GRAY , 1 }
{ 9, 'Остальные цвета ' , CLR_BLACK , CLR_GRAY , 1 }

Как мне рас красить таблицу по строкам ?
FOR nJ := 1 TO LEN(aStColorUsl) // массив цвета по условию
nTextColor := aStColorUsl[nJ,3] // цвет текста
nBackColor := aStColorUsl[nJ,4] // цвет фона
oBrw_2:Setcolor( { 1 }, { nTextColor }, 1 ) // 1 колонка - цвет текста
oBrw_2:Setcolor( { 2 }, { nBackColor }, 1 ) // 1 колонка - цвет фона
oBrw_2:Setcolor( { 1 }, { nTextColor }, 2 ) // 2 колонка - цвет текста
oBrw_2:Setcolor( { 2 }, { nBackColor }, 2 ) // 2 колонка - цвет фона
NEXT
Не могу сообразить как выставить условие показа....

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




Пост N: 362
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.11.14 13:07. Заголовок: Andrey пишет: Как м..


Andrey пишет:

 цитата:
Как мне рас красить таблицу по строкам ?


не понял вопрос
в oBrw_2:Setcolor( { 1 }, { nTextColor }, 1 ) вместо { nTextColor } укажи блок кода , который вернет массив цвета в зависимости от номера строки

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




Пост N: 3746
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.11.14 13:39. Заголовок: Haz пишет: кажи бло..


Haz пишет:

 цитата:
кажи блок кода , который вернет массив цвета в зависимости от номера строки


Вот с этим блоком кода у меня и не получается....

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




Пост N: 363
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.11.14 14:00. Заголовок: как то так ? oBrw_2:..


как то так ?
oBrw_2:Setcolor( { 1,2 }, { || { aStColorUsl[ oBrw:nAt][3], aStColorUsl[ oBrw:nAt][4] }}, 2 )


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




Пост N: 3747
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.11.14 15:03. Заголовок: Haz пишет: как то т..


Haz пишет:

 цитата:
как то так


Нет, не получается....
Я файл на почту отправил.
Посмотри пожалуйста.

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




Пост N: 3749
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.11.14 18:37. Заголовок: С таблицами с базой ..


С таблицами и базой я немного разобрался.
А как мне работать с массивом из которого сделан TBROWSE:
DEFINE TBROWSE oBrw_2 ;
...............
END TBROWSE

oBrw_2:SetArray( aVar2 )
ADD COLUMN TO TBROWSE oBrw_2 DATA ARRAY ELEMENT 1;
................

Т.е. как мне записать в ELEMENT 5 свои значения ?



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




Пост N: 364
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.11.14 20:17. Заголовок: Andrey пишет: Т.е. ..


Andrey пишет:

 цитата:
Т.е. как мне записать в ELEMENT 5 свои значения ?



1. oBrw_2:aArray[oBrw_2:nAt][5] := "Свое значение"
2. Eval( oBrw_2:aColumns[5]:bBlock, "Свое значение" )
3. использовать SQLMIX и работать с массивом как с DBF (индексы фильтры сортировка и пр)

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




Пост N: 3750
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.11.14 20:28. Заголовок: Haz пишет: 1. oBrw_..


Haz пишет:

 цитата:
1. oBrw_2:aArray[oBrw_2:nAt][5] := "Свое значение"



Немного ошибся. Нужно 4 элемент изменять. В ней у меня цвета - числа.
Как сделать цикл по 4 колонке ?
FOR nI := 1 TO ??? ( oBrw_2:nLen - так или ошибаюсь ?)
oBrw_2:aArray[oBrw_2:nI][4] := aStColorUsl[nI,4]
...
NEXT




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




Пост N: 365
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.11.14 20:32. Заголовок: Andrey пишет: Как с..


Andrey пишет:

 цитата:
Как сделать цикл по 4 колонке




FOR nI := 1 TO Len(oBrw_2:aArray)
oBrw_2:aArray[nI][4] := aStColorUsl[nI,4]
...
NEXT




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




Пост N: 3751
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.11.14 20:59. Заголовок: Haz Спасибо ! :sm36..


Haz Спасибо !

Еще можно и так:
FOR nI := 1 TO oBrw_2:nLen


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




Пост N: 366
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.11.14 21:09. Заголовок: Andrey пишет: Еще м..


Andrey пишет:

 цитата:
Еще можно и так:


можно, я просто привык к Len( aArray )

можно и так
nI := 0
Aeval( oBrw_2:aArray, {|e| e[4] := aStColorUsl[++nI,4] })

PS.
Даже короче в одну строку
Aeval( oBrw_2:aArray, {|e, n| e[4] := aStColorUsl[n,4] })



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




Пост N: 3752
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.11.14 21:29. Заголовок: Haz пишет: Aeval( o..


Haz пишет:

 цитата:
Aeval( oBrw_2:aArray, {|e| e[4] := aStColorUsl[++nI,4] })


Не, это трудно читаемое... Не для меня !
Потом свои тексты фиг разберешь !!!
А я пример делаю для всех, в коллекцию Григория. Там тоже читаемый текст нужен...

Посмотри пожалуйста еще 3 вопроса, письмо отправил.

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




Пост N: 3753
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.11.14 11:16. Заголовок: С изменением цвета п..


С изменением цвета понял, СПАСИБО !
// редактирование 4-колонки и перерисовка цвета после его изменения
oBrwClr:aColumns[4]:bPrevEdit := { || ColorPicker(oBrwClr), oBrwClr:Refresh(FALSE), FALSE }


А почему не работает вот эта конструкция ?
oBrwClr:aColumns[4]:bPostEdit := { || ViewColorTbrws(oBrwClr,4,aVar) }
Т.е. я хотел бы чтобы после изменения цвета выполнялась функция перерисовки цвета по таблице.
За что отвечает bPostEdit ?

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




Пост N: 368
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.11.14 12:39. Заголовок: Andrey пишет: А поч..


Andrey пишет:

 цитата:
А почему не работает вот эта конструкция


Она не может не работать , bPostEdit автоматически выполняется после редактирования
Проверь вызов , oBrwClr:aColumns[4]:bPostEdit := { || MsgDebug('ДО'), ViewColorTbrws(oBrwClr,4,aVar), MsgDebug('ПОСЛЕ') }
Скорее в логике проблема.

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




Пост N: 3755
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.11.14 13:13. Заголовок: Спасибо, буду разбир..


Спасибо, буду разбираться.
Еще вопрос, в программе делаю:
oBrwClr:nAdjColumn := 3 // растянуть колонку 3 до заполнения пустоты в бровсе справа
oBrw_2:nAdjColumn := 2 // растянуть колонку 2 до заполнения пустоты в бровсе справа


Вот результат:


Но это только при таких параметрах ХР:


Как бороться с такой ситуацией ?
Юзеров же не заставишь переключаться на обычный шрифт...


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




Пост N: 3758
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.11.14 12:39. Заголовок: Т.е. я понял что ник..


Т.е. я понял что никто не знает как бороться с такой ситуацией.

Есть ли для объекта TBROWSE такое же свойство как Enabled Property:
<WindowName>.<ControlName>.Enabled [<nItemNumber>] := lEnabledState ?

Т.е. запретить редактирование, да и переход тоже на TBROWSE.
Или аналогичное свойство ?

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




Пост N: 3764
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.11.14 18:07. Заголовок: Нашел метод. Метод E..


Нашел метод. Метод Enabled() класса TSBrowse
Смотреть здесь (совсем забыл про этот сайт) - http://gustow.narod.ru/tsb_help/50.htm

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




Пост N: 3765
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.11.14 19:26. Заголовок: Haz пишет: Она не м..


Haz пишет:

 цитата:
Она не может не работать , bPostEdit автоматически выполняется после редактирования
Проверь вызов , oBrwClr:aColumns[4]:bPostEdit := { || MsgDebug('ДО'), ViewColorTbrws(oBrwClr,4,aVar), MsgDebug('ПОСЛЕ') }
Скорее в логике проблема.



Посмотрел. Ничего не понял. Пример у тебя есть.
Я делаю последовательно в коде:
// редактирование 4-колонки и перерисовка цвета после его изменения
oBrwClr:aColumns[4]:bPrevEdit := { || ColorPicker(oBrwClr), oBrwClr:Refresh(FALSE), FALSE }
oBrwClr:aColumns[4]:bPostEdit := { || MsgDebug("DO"),ViewColorTbrws(oBrwClr,4,aVar),MsgDebug("Posle") }

:bPrevEdit - отработало нормально, а :bPostEdit вообще не отрабатывает !
Т.е. я хотел бы чтобы после изменения цвета выполнялась функция перерисовки цвета по таблице. Хотя можно эту функцию засунуит и после oBrwClr:Refresh(FALSE).
За что отвечает bPostEdit ?


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




Пост N: 371
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.11.14 21:11. Заголовок: Andrey пишет: а :b..


Andrey пишет:

 цитата:
а :bPostEdit вообще не отрабатывает !


так самого Edit нет же т.к. PrevEdit туда и не пускает возвращая FALSE
в этом и есть проблема в логике - выполнение назначается на условие - которое не наступит

Andrey пишет:

 цитата:
Хотя можно эту функцию засунуит и после oBrwClr:Refresh(FALSE).



туда и нужно засунуть

Andrey пишет:

 цитата:
За что отвечает bPostEdit ?


TSCOLUMN.PRG
DATA bPrevEdit // Action to be performed before editing cell
DATA bPostEdit // Action to be performed after editing cell



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




Пост N: 3766
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.11.14 21:21. Заголовок: Haz пишет: так само..


Haz пишет:

 цитата:
так самого Edit нет же т.к. PrevEdit туда и не пускает возвращая FALSE


Понял, считал что по другому. Спасибо БОЛЬШОЕ за разъяснение !

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




Пост N: 3767
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.11.14 21:24. Заголовок: А как насчет вопроса..


А как насчет вопроса про растягивание колонок при крупном шрифте (120) ?
В программе делаю:
oBrwClr:nAdjColumn := 3 // растянуть колонку 3 до заполнения пустоты в бровсе справа
oBrw_2:nAdjColumn := 2 // растянуть колонку 2 до заполнения пустоты в бровсе справа



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




Пост N: 372
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.11.14 22:41. Заголовок: Andrey пишет: крупн..


Andrey пишет:

 цитата:
крупном шрифте (



не знаю, не пользую

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




Пост N: 435
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.11.14 12:41. Заголовок: Andrey пишет:А как н..


Andrey пишет:
 цитата:
А как насчет вопроса про растягивание колонок


можно определить из видимых колонок, колонку с max width и для нее устанавливать ширину на +разницу от width окна tsbrowse и суммы других видимых width колонок, используя методы IsColVisible/IsColVis2 (в чем разница не знаю) и SetColSize


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




Пост N: 3779
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.11.14 10:33. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как насчет вопроса про растягивание колонок при крупном шрифте (120) ?


Поборол эту ситуацию !
Сделал свою функцию под это дело и применяю в различных случаях после назначения растяжки:
oBrwClr:nAdjColumn := 3 // растянуть колонку 3 до заполнения пустоты в бровсе справа
// Если включен БОЛЬШОЙ ШРИФТ, то добавить 170 пикселей для oBrwClr:nAdjColumn
MyAdjColumn( oBrwClr, 170 )

oBrw_2:nAdjColumn := 2 // растянуть колонку 2 до заполнения пустоты в бровсе справа
// Если включен БОЛЬШОЙ ШРИФТ, то добавить 230 пикселей для oBrw_2:nAdjColumn
MyAdjColumn( oBrw_2, 230 )

//////////////////////////////////////////////////////////////////
STATIC PROCEDURE MyAdjColumn( oBrw, nAdd )
LOCAL nWidth, nCell := oBrw:nAdjColumn // включена ли растяжка на колонку

IF LargeFonts() .AND. nCell > 0
nWidth := oBrw:GetColSizes()[nCell]
oBrw:SetColSize( nCell, nWidth + nAdd ) // новая ширина колонкм
ENDIF

RETURN


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




Пост N: 3783
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.11.14 17:10. Заголовок: Опять облом с этим T..


Опять облом с этим TSBrowse....
Взял рабочий пример, переделал на новую новую базу и вылет...
Даже и не знаю где искать ошибку ?
Хотя что-то может и сам намудрил, но в качестве информативности с ошибками TSBrowse заметно уступает терминалке.
Вот такая ошибка:

Строка ошибки: oBrw:Refresh(.T.)
Ставлю перед ошибкой MsgDebug(oBrw:nLen) выдает 0 !
До этого такая ошибка была с наличием БИТОГО индекса, сейчас всё правильно: индекс удаляю, потом заново строю.
И где искать ошибку...
Как бы сделать проверку перед выводом TSBrowse что все в порядке: поля, индексы, фильтр и т.д.

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




Пост N: 3802
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.12.14 18:44. Заголовок: Andrey пишет: И где..


Andrey пишет:

 цитата:
И где искать ошибку...


Нашёл ошибку. Поставил свою проверку перед oBrw:Refresh(.T.)
IF oBrw:nLen == 0 // для отладки, чтобы искать ошибки
MsgDebug("Условие отбора TBROWSE == 0 !","DbSetFilter=",DBFILTER())
ELSE
//MsgDebug("Условие отбора TBROWSE == ", oBrw:nLen ,"DbSetFilter=",DBFILTER())
ENDIF
oBrw:Refresh(.T.)



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




Пост N: 3803
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.12.14 18:50. Заголовок: Подскажите пожалуйст..


Подскажите пожалуйста, какой параметр отвечает за фон при очистке ?


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




Пост N: 3818
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.12.14 21:49. Заголовок: Очень раздражает в н..


Очень раздражает в новом TBrowse мелькание при перерисовке цвета.
В Клипере, да и Харборе были операторы:
dispbegin()
.....
dispend()

Есть ли здесь такие же аналоги ?


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




Пост N: 3840
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.12.14 02:00. Заголовок: Как получить координ..


Как получить координаты TBROWSE в окне для отдельной функции ?
PUBLIC oBrw
DEFINE TBROWSE oBrw ;
AT 20,20 ;
WIDTH GetClientWidth(hWnd)-40 ;
HEIGHT GetClientHeight(hWnd)-10 ;
.....
///////////////////////////////
Function DopWin()

MsgDebug( oBrw:nLeft , oBrw:nTop )

Выдает ошибку:
Error BASE/1004 Метод не экспортирован: NLEFT
Called from NLEFT(0)


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




Пост N: 402
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 15.12.14 10:54. Заголовок: Andrey пишет: Как п..


Andrey пишет:

 цитата:
Как получить координаты TBROWSE в



все правильно , ни чё не перепутал ?

Andrey пишет:

 цитата:
Function DopWin()
MsgDebug( oBrw:nLeft , oBrw:nTop )



можно явно
MEMVAR oBrw
MsgDebug( oBrw:nLeft , oBrw:nTop ) `

или через GetProperty( "Form", "oBrw", "nTop" )




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




Пост N: 3841
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.12.14 16:28. Заголовок: Haz пишет: все прав..


Haz пишет:

 цитата:
все правильно , ни чё не перепутал ?



Перепутал.
Оказывается, пытаюсь получить координаты еще НЕ НАРИСОВАННОГО (не объявленного) TBROWSE.
Моя ошибка.
Спасибо !

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




Пост N: 4359
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.12.14 16:30. Заголовок: Andrey пишет: Переп..


Andrey пишет: ( Отправлено: Сегодня 02:00)

 цитата:
Перепутал.


Ну так в 2 часа ночи спать надо ;)

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




Пост N: 3842
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.12.14 17:06. Заголовок: Dima пишет: Ну так ..


Dima пишет:

 цитата:
Ну так в 2 часа ночи спать надо ;)


Покой нам только сниться... Все переводом на МиниГуи занимаюсь ! Днем не дают.

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




Пост N: 3849
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.12.14 19:01. Заголовок: Вот опять фигня полу..


Вот опять фигня получается.
Делаю по разному, один TBROWSE (простой) цвет фона рисует, другой основной нет.
Белизна достает, пока меня, но чую если заказчику отдам, то будут меня заказчики просто и сложно доставать.
Народ, подскажите как убрать белизну (цвет фона TBROWSE) если таблица не заполнена или записи фильтруются ?
Вот как на картинке:

Блин http://shot.qip.ru не доступен ....

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




Пост N: 4364
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.12.14 19:07. Заголовок: Andrey пишет: Народ..


Andrey пишет:

 цитата:
Народ, подскажите как убрать белизну


А Григорий что говорит по этому поводу ?

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