Автор | Сообщение |
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:....
|
|
|
Ответов - 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]: ... Что конкретно - то интересует ?
|
|
|
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 и другие, которыми сами пользуетесь. С колонками, там вроде, понятнее. В примерах они отдельно обрабатываются.
|
|
|
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.) вот такой простой алгоритм :)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3183
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.12.13 16:04. Заголовок: А как поменять цвет ..
А как поменять цвет: скролинга и левого бока Tbrowsa ?
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3185
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.12.13 16:50. Заголовок: Haz пишет: изменени..
Haz пишет: цитата: | изменения метода WinNew() - никак ( |
| Как тогда изменить метод WinNew() ?
|
|
|
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 ЗЫ Сам не пробовал , но есть же все исходники и они на харбуре писаны, меняй не хочу ) выше про левый край дописал )
|
|
|
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 |
|
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 423
Зарегистрирован: 13.10.05
|
|
Отправлено: 20.12.13 20:26. Заголовок: И мне надо не заменя..
И мне надо не заменять значения , а определить при инициализации
|
|
|
Haz
|
| |
Пост N: 122
Зарегистрирован: 20.02.11
|
|
Отправлено: 20.12.13 22:44. Заголовок: понятно,в понедельни..
понятно,в понедельник отпишусь с работы . если сейчас и коротко , то обработку условий лучше задавать не в инициализации бровса а при исполнении. я инициализирую тбровсе из своей функции - упрощенный мой пример в samples\advanced\tsb_filter но для всех процедур по ON ... задаю одну определенную функцию пример ON CHANGE {|| TBRWChange( cBrw ) в самой TbrwChange организую CASE по имени объекта cBrw , где и проверяю все условие в понедельник нарисую пример ))))
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3191
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.12.13 20:44. Заголовок: Haz пишет: с левым ..
Haz пишет: цитата: | с левым краем (Selector) все оч просто - перед END TBROWSE определить нужный цвет oBrw:nClrHeadBack := RGB(255, 0, 0) // Пусть будет красный |
|
|
|
|
|
Haz
|
| |
Пост N: 123
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.12.13 11:04. Заголовок: как вариант сунуть с..
как вариант сунуть свою bmp с нужным фоном )
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3193
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.12.13 11:29. Заголовок: Haz пишет: сунуть с..
Haz пишет: цитата: | сунуть свою bmp с нужным фоном ) |
| А как ? И куда ? Допустим, сделал я свою bmp. Разместил в ресурс проекта. А дальше как ?
|
|
|
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.
|
|
|
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
|
|
|
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:...
|
|
|
Haz
|
| |
Пост N: 126
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.12.13 16:37. Заголовок: согласен, чтоб не пе..
согласен, чтоб не пестрило от макроподстановок можно и еще упростить ) oBrw := &cBrw и далее по тексту ...
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 424
Зарегистрирован: 13.10.05
|
|
Отправлено: 23.12.13 17:26. Заголовок: Ок Понятно, буду про..
Ок Понятно, буду пробовать Спасибо
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3201
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.01.14 14:01. Заголовок: Подскажите пожалуйст..
Подскажите пожалуйста, как сделать обработку по клавишам в TBROWSE ?
|
|
|
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 } |
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3202
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.01.14 16:11. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: Спасибо БОЛЬШОЕ !
|
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3220
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.01.14 12:50. Заголовок: a_sidorov пишет: Де..
a_sidorov пишет: цитата: | Делаете обработку ввода буковок в TBROWSE и пишете их из программы в поле вода: |
| То что надо ! Спасибо большое !
|
|
|
ММК
|
| постоянный участник
|
Пост 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
|
|
|
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 объекта
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3221
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.01.14 16:05. Заголовок: Haz пишет: ЗЫ: могу..
Haz пишет: цитата: | ЗЫ: могу поискать пример - когдато делал нечто похожее на комбо в TBrowse но по базе ис использованием подчиненного Tbrowse. назначал и буфер Get объекта |
| Пример в студию !
|
|
|
Haz
|
| |
Пост N: 130
Зарегистрирован: 20.02.11
|
|
Отправлено: 31.01.14 16:24. Заголовок: Andrey пишет: Приме..
Andrey пишет: поищу, завтра выложу
|
|
|
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
|
|
|
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
|
|
|
serj
|
| |
Пост N: 11
Зарегистрирован: 05.10.12
|
|
Отправлено: 18.02.14 05:13. Заголовок: Как вернуть фокус вв..
цитата: | Как вернуть фокус ввода обратно в TBROWSE после своей обработки ? |
| DoMethod( cForm, oBrw_1, 'setfocus' ) DoMethod( cForm, oBrw_1, 'refresh' )
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3235
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.02.14 10:24. Заголовок: serj пишет: DoMetho..
serj пишет: цитата: | DoMethod( cForm, oBrw_1, 'setfocus' ) |
| Это понятно. Я наверно неправильно поставил вопрос. Наверно нужно так: Как получить переменные cForm и oBrw_1 без передачи параметров в функцию MyAction() ?
|
|
|
|
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 ...
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3236
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.02.14 12:54. Заголовок: Спасибо БОЛЬШОЕ Serg..
Спасибо БОЛЬШОЕ SergKis ! Что-то забывать стал уже пройденные этапы освоения МиниГуи... Видно, когда урывками осваиваешь, материал плохо усваивается...
|
|
|
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
|
|
|
Haz
|
| |
Пост N: 133
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.02.14 14:28. Заголовок: Andrey пишет: OCAL ..
Andrey пишет: это не cBrw объявлена как PUBLIC, а та переменная, имя которой в локальной cBrw было на тот момент при определении бровса было cBrw := "ИМЯ" ( где строка "ИМЯ" из твоего исходника ) тогда и объявлять надо LOCAL oBrw := &"ИМЯ"
|
|
|
serj
|
| |
Пост N: 12
Зарегистрирован: 05.10.12
|
|
Отправлено: 18.02.14 15:30. Заголовок: может так GetPropert..
может так GetProperty (<cWindowName>[,<cControlName>] ,<cPropertyName>)--> PropertyValue GetProperty(cForm,'oBrw','width')
|
|
|
Haz
|
| |
Пост N: 134
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.02.14 15:41. Заголовок: serj пишет: GetProp..
serj пишет: цитата: | GetProperty(cForm,'oBrw','width') |
| по любому чтобы работать с методами объекта , нужно знать этот объект, проще будет не усложнять себе жизнь и передать cBrw параметром - MyAction( cBrw ) где без труда получить сам объект &cBrw и далее дергать его проперти, его методы или выдавать фокус, прятать и.т.д. А так это похоже на операцию на гландах через (_|_)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3238
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.02.14 22:38. Заголовок: Haz пишет: А так эт..
Haz пишет: цитата: | А так это похоже на операцию на гландах через (_|_) |
| Понял, что я совсем заработался или отупел...
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3242
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.02.14 18:18. Заголовок: Haz пишет: цвет скр..
Haz пишет: цитата: | цвет скрола определен в :WinNew() как локальные переменные которым назначаются системные значения nClrText := GetSysColor( COLOR_WINDOW ),; nClrBack := GetSysColor( COLOR_SCROLLBAR ),; следовательно без изменения системных значений или изменения метода WinNew() - никак ( |
| Григорий, а можно добавить в библиотеку TsBrowse возможность изменения этих переменных ? Есть ли у вас возможность связаться с автором этой библиотеки ? Я понимаю, что можно самому добавить эти переменные и перекомпилировать библиотеку, но хотелось бы иметь эту возможность в стандартной библиотеке.
|
|
|
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, то ...
|
|
|
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 ;
|
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 559
Зарегистрирован: 11.02.10
|
|
Отправлено: 24.02.14 12:01. Заголовок: Vlad04 пишет: может..
Vlad04 пишет: цитата: | может есть возможность переопределить Tbrowse так , чтобы он в программнике писался как Browse |
| В терминах библиотеки минигуи это называется альтернативный синтаксис. При этом становится удобнее написание текста программы, но неоптимальным - генерируемый код. Если для Вас это необходимо, то Вы можете добавить требуемое описание в заголовочный файл include\i_altsyntax.ch (сейчас там этого нет ).
|
|
|
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 А поле базы как здесь определить ?
|
|
|
Haz
|
| |
Пост N: 139
Зарегистрирован: 20.02.11
|
|
Отправлено: 03.03.14 16:00. Заголовок: Andrey пишет: А пол..
Andrey пишет: цитата: | А поле базы как здесь определить |
| через oBrw_1:aColumns[1]:bData
|
|
|
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 Опередил ;)
|
|
|
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 пишет: я не специально ))
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3255
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.03.14 16:22. Заголовок: Haz пишет: Haz Опер..
Haz пишет: Спасибо вам ОГРОМНОЕ ! Хорошо что есть кто отвечает на вопросы !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3256
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.03.14 16:25. Заголовок: Dima пишет: Как то ..
Dima пишет: цитата: | Как то так oBrw_1:aColumns[1]:bdata:=твой блок кода для выборки данных |
| А если нужно выводить поле по шаблону, то как делать ? FIELD->NTIME PICTURE - "99:99"
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3257
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.03.14 21:42. Заголовок: Чем больше делаешь, ..
|
|
|
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. )
|
|
|
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. ) - тоже не работает....
|
|
|
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) - в справке этих методов нет , а в исходнике есть это как " ... видишь суслика ? .... а он там есть " Андрей - найди время , посмотри исходники . Да они не маленькие , но там очень много интересного
|
|
|
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 Спасибо огромное за помощь !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3260
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.03.14 21:07. Заголовок: Haz пишет: нет ниче..
Haz пишет: цитата: | нет ничего проще oBrw_1:lNoChangeOrd := .T. |
| Не работает. Остается графический значок сортировки. 1) Как его убрать. Я конечно могу его закрасить фоном шапки таблицы и отдельной иконкой добавить в проект. Но это же не выход. Если нельзя убрать, то как тогда "передвинуть" всю эту красоту на 4 шапку таблицы: "Наименование события" ? Измененный проект тут - http://files.mail.ru/3784AE8B8AA3438C8CC0C8597D328584
|
|
|
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)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3261
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.03.14 16:34. Заголовок: Уже получается лучше..
Уже получается лучше ! http://files.mail.ru/710FE7B921CC4EAEB7BF0FF766551373 Haz пишет: цитата: | Следующий вопрос скорее всего будет - как показать мемо. |
| Хотелось бы сделать показ мемо в отдельном (дополнительном) окне, через CheckBox ! Как это сделать ? И еще возник вопрос, при перемещении курсора изменение позиции "Запись 0/0" в STATUSBAR - как сделать ?
|
|
|
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() назначает дефолтловый блок
|
|
|
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 бровса повесить нвзначение элемену статусбара строки вида |
| Спасибо ! Работает. Как мышкой нажмешь, то появляется (клавиши нормально работают) ! Что за фигня, где исправить ? Это у меня где-то в коде или это обычное поведение TBROWSA ?
|
|
|
Haz
|
| |
Пост N: 145
Зарегистрирован: 20.02.11
|
|
Отправлено: 08.03.14 10:55. Заголовок: Andrey пишет: смотр..
Andrey пишет: цитата: | смотрел, ни фига не понял. |
| не там смотрел, посмотри как это делается в самом методе (не в функции) Loadfield - там как раз используется ::AddColumn Andrey пишет: цитата: | Что за фигня, где исправить |
| первый элемент статусбара бровс без объявления войны забирает под свои сообщения делай его пустым, а свой вывод гони во второй
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3264
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.03.14 13:33. Заголовок: Haz пишет: первый э..
Haz пишет: цитата: | первый элемент статусбара бровс без объявления войны забирает под свои сообщения |
| Спасибо ! Заработало !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3265
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.03.14 21:54. Заголовок: Сделал доп окно пока..
Сделал доп окно показа мемо поля. Не активируется оно... Видать неправильный вариант с окнами делаю (до этого не работал с такими окнами)... При объявлении показа мемо-поля в другом окне: Form_1.Edit_Memo.Value := (oBrw_1:cAlias)->MEMO, компилятор не собирает, выдает ошибку: Скрытый текст Dbf_Log.prg(360) Error E0030 Syntax error "syntax error at '.'" 1 error No code generated. hbmk2[Dbf_Log]: Error: Running Harbour compiler (embedded). 1
| Что-то неправильно делаю, подскажите пожалуйста ? Проект тут - http://files.mail.ru/DF44C802FA1E4821BC2E5CE6E6ED1EFA
|
|
|
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 ) используй
|
|
|
Dima
|
| |
Пост N: 3864
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.14 11:41. Заголовок: Haz пишет: попытка ..
Haz пишет: цитата: | попытка создать окно за пределами экрана ( где-то в районе кнопки питания ) |
|
|
|
|
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 окнами сразу. Помогите эти окна разрулить....
|
|
|
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
|
|
|
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 |
|
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3268
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.03.14 15:35. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | и активировал его по команде |
| Ну как всегда, Григорий всё по полочкам разложит !!! Рука мастера, тут уж ничего по другому и не сделаешь. Спасибо БОЛЬШОЕ !!! А что за "зверь" - TOPMOST ? И как сделать чтобы Form_1 было всегда поверх других окон ?
|
|
|
Haz
|
| |
Пост N: 148
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.03.14 15:42. Заголовок: Andrey пишет: Вот и..
Andrey пишет: цитата: | Вот исходник, проверь пожалуйста его |
| проверил - все появляется при установке чекбокса "примечание"в true
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3269
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.03.14 15:51. Заголовок: Haz пишет: проверил..
Haz пишет: цитата: | проверил - все появляется при установке чекбокса "примечание"в true |
| Понял, спасибо ! После правки Григория окна заработали как надо ! Буду дальше делать ! Спасибо всем БОЛЬШОЕ !
|
|
|
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.
|
|
|
Haz
|
| |
Пост N: 149
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.03.14 20:11. Заголовок: Andrey пишет: Как з..
Andrey пишет: цитата: | Как закрыть окно Form_1 при завершении задачи |
| {|| domethod("Form_1","Release"), domethod("Form_0", "Release") }
|
|
|
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 была всегда поверх других окон ?
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3272
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.03.14 12:08. Заголовок: Haz пишет: в описан..
Haz пишет: цитата: | в описании команды DEFINE WINDOW есть TOPMOST |
| Есть. Только для другого окна. Исправил - получилось ! Спасибо !
|
|
|
Haz
|
| |
Пост N: 151
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.03.14 12:23. Заголовок: Andrey пишет: Есть...
Andrey пишет: цитата: | Есть. Только для другого окна. |
| тут не знаю можно попробовать повесить на событие LostFocus { || Form:Setfocus() } ( но не уверен в том что прокатит ) или копать в сторону процедуры _ChangeWindowTopmostStyle( FormHandle, Value ) из h_controlmisc.prg
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3273
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.03.14 13:44. Заголовок: Все нормально получи..
Все нормально получилось. Я TOPMOST повесил куда ты сказал и все заработало !!! Спасибо БОЛЬШОЕ за помощь ! Буду дальше делать...
|
|
|
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. Ладно, можно один раз перечислить. А когда новые поля в базу добавишь, нужно будет тогда ОПЯТЬ лезть в исходник и править его. ОЧЕНЬ НЕУДОБЕН этот метод. Хочется как на Клипере создавать бровс. Помогите пожалуйста.
|
|
|
ZAlex
|
| |
Пост N: 2
Зарегистрирован: 22.01.14
|
|
Отправлено: 15.03.14 17:59. Заголовок: А если скомпилироват..
А если скомпилировать с ключом -p и затем посмотреть, как препроцессор это делает? Не поможет?
|
|
|
Haz
|
| |
Пост N: 152
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.03.14 19:49. Заголовок: ZAlex пишет: А если..
ZAlex пишет: цитата: | А если скомпилировать с ключом -p |
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3276
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.03.14 20:42. Заголовок: ZAlex пишет: А если..
ZAlex пишет: цитата: | А если скомпилировать с ключом -p и затем посмотреть, как препроцессор это делает? Не поможет? |
| Блин, забыл ! Спасибо !
|
|
|
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" |
| А как с помощью клавиатуры то же сделать ?
|
|
|
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() Это то что я знаю пока. Может и не прав... Нужно ждать ответ от нашего ГУРУ...
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 431
Зарегистрирован: 13.10.05
|
|
Отправлено: 04.05.14 19:49. Заголовок: ок В примере есть от..
ок В примере есть ответ на поставленный вопрос цитата: | oBrw_1:aColumns[2]:bHLClicked:={||ChoiHeader(3)} //переключение индекса по шапке / switching index on the table header |
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3349
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.05.14 15:40. Заголовок: Vlad04 пишет: В при..
Vlad04 пишет: цитата: | В примере есть ответ на поставленный вопрос |
| Как сам пример ? Вам понравился ? Может чего не хватает ? Делал специально в качестве обучающего примера.
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 437
Зарегистрирован: 13.10.05
|
|
Отправлено: 21.05.14 07:14. Заголовок: Andrey Как сам прим..
Andrey цитата: | Как сам пример ? Вам понравился ? Может чего не хватает ? |
| Пример понравился (цветовой оформление, работа с директориями), но имеет свою специфику. Вопросы по TBROWS остались. 1) Как удалить запись ( не нашел в примерах или плохо искал) 2) Такая рабочая ситуация : - Перед открытием в таблице ищу нужную запись (таблица может быть индексирована или нет. Естественно поиск по индексу или Locate) - после открытия курсор должен быть на найденной записи.
|
|
|
Haz
|
| |
Пост N: 242
Зарегистрирован: 20.02.11
|
|
Отправлено: 21.05.14 09:50. Заголовок: Vlad04 пишет: 1) Ка..
Vlad04 пишет: (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.)
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 438
Зарегистрирован: 13.10.05
|
|
Отправлено: 21.05.14 10:22. Заголовок: ок С удалением все н..
ок С удалением все нормально. С поиском цитата: | Seek: oBrw:SetFocus() (oBrw:cAlias)->(oBrw:ExpSeek( cExp, FALSE )) |
| А найти нужную запись до открытия TBROWS , а потом спозиционировать TBROWS никак ?
|
|
|
Dima
|
| |
Пост N: 4021
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.05.14 11:04. Заголовок: Vlad04 пишет: А най..
Vlad04 пишет: цитата: | А найти нужную запись до открытия TBROWS , а потом спозиционировать TBROWS никак ? |
| А что при таком подходе курсор становится не туда ? Нашел , открыл бровс..........
|
|
|
Haz
|
| |
Пост N: 243
Зарегистрирован: 20.02.11
|
|
Отправлено: 21.05.14 11:20. Заголовок: Vlad04 пишет: найти..
Vlad04 пишет: цитата: | найти нужную запись до открытия TBROWS , а потом |
| можно так попробовать (oBrw:cAlias)->(DbGoto(nRec)) oBrw:Upstable() oBrw:Refresh(.T., .T.)
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 439
Зарегистрирован: 13.10.05
|
|
Отправлено: 21.05.14 11:46. Заголовок: А что при таком подх..
цитата: | А что при таком подходе курсор становится не туда ? |
| Не становится куда надо !. Есть у TBROWS переменная VALUE , если ей присваивать полученное Recno() после поиска , куда-то курсор перемещается при открытии , но не нату запись, которая найдена. Если VALUE не использовать , то на первую запись.
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 440
Зарегистрирован: 13.10.05
|
|
Отправлено: 21.05.14 11:51. Заголовок: Haz ОК И поиск полу..
Haz ОК И поиск получился
|
|
|
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) , если изменить мышкой вертикальный размер так, чтобы последняя строка была прорисована не полностью, то при движении курсора вверх она зависает и не перерисовывается. Видимо, при создании таблицы и перерисовке в этом случае считается разное количество строк. При создании таблицы строка, не умещающаяся полностью на экране, не должна была прорисовываться.
|
|
|
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
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3389
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.05.14 22:24. Заголовок: Vlad04 пишет: Незав..
Vlad04 пишет: цитата: | Независимо от раскладки клавиатуры всегда возвращает англиЦкие. Так должно быть ? |
| Делай свою обработку в функции MyLatRus() Но может можно и по другому, я пока не знаю (разбираюсь с этим). Надо спросить других. Не уж то нет стандарта обработки клавиш для TBROWSE ? Vlad04 пишет: цитата: | По TSBrows 2) При доступности редактирования ячейки, вход в ячейку по нажатию Enter или двойной клик. А можно клавиши в данном случае переназначить ? К примеру, редактировать по F4. |
| Я выше уже писал: "В нем есть функция обработки всех клавиш MyKeyAction(). Вот можете туда и вставить обработку своих клавиш. "
|
|
|
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) , если изменить мышкой вертикальный размер так, чтобы последняя строка была прорисована не полностью, то при движении курсора вверх она зависает и не перерисовывается. Видимо, при создании таблицы и перерисовке в этом случае считается разное количество строк. При создании таблицы строка, не умещающаяся полностью на экране, не должна была прорисовываться. |
| Да, да, есть такая фигня... Как с этим бороться ?
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 593
Зарегистрирован: 11.02.10
|
|
Отправлено: 23.05.14 14:49. Заголовок: Andrey пишет: Как с..
Andrey пишет: Есть вариант добавить функцию CorrectionFirstLast(oBrw) при обработке события ON CHANGE (см. пример в папке samples\Advanced\TSB_lastrow). Но при использовании этого пути возможны побочные эффекты Поэтому надо проверять это решение на Вашем конкретном приложении
|
|
|
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(), то иногда появляются глюки, обычно после достижения конца файла.
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 444
Зарегистрирован: 13.10.05
|
|
Отправлено: 28.05.14 13:28. Заголовок: Andrey Я выше уже п..
Andrey цитата: | Я выше уже писал: "В нем есть функция обработки всех клавиш MyKeyAction(). |
| Мне надо отловить события перемещения по Бровз : Up, Down и др. На них хочу повесить действие. А MyKeyAction их не отлавливает
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 445
Зарегистрирован: 13.10.05
|
|
Отправлено: 28.05.14 13:37. Заголовок: Достиг цели- повесил..
Достиг цели- повесил действие на событие ON CHANGE для TBROWS. По видимому оно всегда генерируется .
|
|
|
Haz
|
| |
Пост N: 245
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.05.14 13:37. Заголовок: Vlad04 пишет: Мне н..
Vlad04 пишет: цитата: | Мне надо отловить события перемещения по Бровз : Up, Down и др. На них хочу повесить действие. |
| Попробуй так, возможно подойдет , отлавливает не сами перемещения а последствия этих перемещения oBrw:bOnDraw := { || Action() }
|
|
|
Haz
|
| |
Пост N: 246
Зарегистрирован: 20.02.11
|
|
Отправлено: 28.05.14 13:56. Заголовок: Haz пишет: повесил ..
Haz пишет: цитата: | повесил действие на событие ON CHANGE |
| onchange не ловит перемещения по строке
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3399
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.05.14 20:15. Заголовок: Vlad04 пишет: Мне н..
Vlad04 пишет: цитата: | Мне надо отловить события перемещения по Бровз : Up, Down и др. На них хочу повесить действие. |
| А что за действие на эти клавиши хочешь отловить ?
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 446
Зарегистрирован: 13.10.05
|
|
Отправлено: 29.05.14 09:13. Заголовок: Andrey А что за дей..
Andrey цитата: | А что за действие на эти клавиши хочешь отловить ? |
| Очищать переменную с результатами поиска Обновлять на форме значения из таблица, которые не отображены в Бровзе
|
|
|
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 )
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 447
Зарегистрирован: 13.10.05
|
|
Отправлено: 01.06.14 20:03. Заголовок: a_sidorov Хорошая п..
a_sidorov Хорошая подсказка. Пример с бровз почти готов. Остались мелочи- стрелочки (порядок индексирования) на заголовках столбцов на изменения с клавиатуры - не геагирует.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3401
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.06.14 21:12. Заголовок: Vlad04 пишет: Остал..
Vlad04 пишет: цитата: | Остались мелочи- стрелочки (порядок индексирования) на заголовках столбцов на изменения с клавиатуры - не геагирует. |
| Возьми с примера Tsb_dir, я здесь где то выкладывал его.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3402
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.06.14 12:41. Заголовок: Есть хороший пример ..
Есть хороший пример :\MiniGUI\SAMPLES\BASIC\SavePos А как бы сделать настройку цветов для TBROWSE по такому же принципу ? Для начала - есть ли возможность вывести ВСЕ переменные цвета в TBROWSE ?
|
|
|
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() их назначает см исходник
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3405
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.06.14 04:39. Заголовок: Haz пишет: все цвет..
Haz пишет: цитата: | все цвета в данных :aColumns[] |
| А как их в цикле вывести допустим в файл или массив ?
|
|
|
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)) - весь массив цветов
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3406
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.06.14 11:42. Заголовок: SergKis пишет: это ..
SergKis пишет: цитата: | это я погорячился. в aColumns - объекты для каждой колонки. в объекте колонки есть методы SaveColor() и RestColor(). |
| Спасибо БОЛЬШОЕ ! Буду пробовать....
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 323
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.06.14 12:48. Заголовок: Andrey пишет:Буду пр..
Andrey пишет: смотри TsColumn.prg. обрати внимание - в методах SaveColor() и RestColor() не задействован oCol:aColorsBack[20], элемент oCol:nClrSpcHdActive - не знаю насколько он важен ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 594
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.06.14 15:02. Заголовок: SergKis пишет: в ме..
SergKis пишет: цитата: | в методах SaveColor() и RestColor() не задействован oCol:aColorsBack[20], элемент oCol:nClrSpcHdActive |
| Благодарю за сообщение! Поправил для следующей сборки
|
|
|
Vlad04
|
| постоянный участник
|
Пост N: 448
Зарегистрирован: 13.10.05
|
|
Отправлено: 07.06.14 08:17. Заголовок: Пример Почти рабочий..
Пример Почти рабочий пример(pass 654321) 3 базы открываются используя 1 программник Часть инструкций вынесены во внешний файл.В консоле я всё выносил полностью. Остались проблемы. Стрелочки на заголовках столбцов , ну и другие мелочи. Сортировка меняется по F3.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3529
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.08.14 11:17. Заголовок: Во многих примерах е..
Во многих примерах есть удобные кнопки навигации по TBROWSE. Какой лучше делать для своего ? Нужно с *.ICO и надпись !
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 377
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.08.14 13:39. Заголовок: Andrey пишет:Какой л..
Andrey пишет: цитата: | Какой лучше делать для своего ? |
| А что не так в примерах (для использования) \SAMPLES\BASIC\TOOLBAR, TOOLBAR_1, ..., ToolBarEx_2 ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3530
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.08.14 14:45. Заголовок: SergKis пишет: А чт..
SergKis пишет: цитата: | А что не так в примерах (для использования) |
| Да все нормально. Просто много всего интересного, не знаешь на чем остановиться. Что удобней всего использовать, чтобы потом не переделывать ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 378
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.08.14 15:45. Заголовок: Andrey пишет:чтобы п..
Andrey пишет: цитата: | чтобы потом не переделывать ? |
| переделывать придется ("лучшее - враг хорошего", "век живи, век учись") - вопрос цены - сколько времени надо на переделку ? сегодня делаешь так, завтра по другому - другие знания и возможности.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3531
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.08.14 16:19. Заголовок: SergKis пишет: сего..
SergKis пишет: цитата: | сегодня делаешь так, завтра по другому |
| Согласен полностью. Хотелось бы посмотреть как у других сделано ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3533
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.08.14 18:20. Заголовок: SergKis пишет: А чт..
SergKis пишет: цитата: | А что не так в примерах (для использования) ToolBarEx_2 ? |
| Не совсем понял ? Можно ли в этом примере подставить иконку ? И можно ли кнопку сделать разными цветами ? Что-то у меня не получается...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 379
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.08.14 19:40. Заголовок: Andrey пишет:Не совс..
Andrey пишет: цитата: | Не совсем понял ? Можно ли в этом примере подставить иконку ? |
| В данных примерах идет речь о стандартном ToolBar контроле и SplttBox ... Меняя размеры окна увидишь поведение их. То что показываешь на картинке - надо делать ручками (например на buttonEx-ах и др.контролах), но ничего не возможного нет. Как пример "ручками" варианты MsgMenu, \SAMPLES\BASIC\MsgMenu
|
|
|
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" , "Цвет активного спецхидера" }
|
|
|
Haz
|
| |
Пост N: 280
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.08.14 11:37. Заголовок: Andrey пишет: Или п..
Andrey пишет: цитата: | Или подскажите идею, как это сделать. |
| Через :SetColor(), куда в вместо массива цвета передавать блок кода который возвращает нужный цвет ( примеры в справке по TSBrowse ) ,а как пример выбора подойдет Minigui\Sample\Basic\Colortable
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3541
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.08.14 13:20. Заголовок: Haz пишет: а как пр..
Haz пишет: цитата: | а как пример выбора подойдет Minigui\Sample\Basic\Colortable |
| А можно сделать 3 колонки с разными цветами ? Типа: 1-колонка (описание) 2-цвет по умолчанию 3-цвет пользователя Т.е. GRID позволяет делать разными цветами колонки ?
|
|
|
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 ... вообщем будут конкретные вопросы - задавай
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3543
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.08.14 16:37. Заголовок: Haz пишет: вообщем ..
|
|
|
Haz
|
| |
Пост N: 282
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.08.14 19:11. Заголовок: Andrey пишет: не з..
Andrey пишет: опиши структуру массива не пойму что в нем
|
|
|
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 Получаю черный на красном ?
|
|
|
Haz
|
| |
Пост N: 283
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.08.14 07:46. Заголовок: Andrey пишет: прори..
Andrey пишет: цитата: | прорисовать цветом элемента aVar[5] |
| Андрей , я и хочу понять что значит aVar[x][5] там многомерный массив - поподробнее что имеется ввиду , как думаешь его в качестве цвета использовать ? или я тебе пример самодостаточный нарисую а свой массив - сам прикрутишь? По цветам отвечу с работы , как приеду где нить после 11 утра
|
|
|
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 }
|
|
|
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
|
|
|
Haz
|
| |
Пост N: 285
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.08.14 11:52. Заголовок: отправил пример на п..
отправил пример на почту из профиля
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3551
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.08.14 12:46. Заголовок: Вопрос по переводу н..
Вопрос по переводу на русский для пользователя. Правильный ли перевод по шрифтам в TBROWSE ? // nLevel 1 = Cells - Фонт ячеек в таблице // nLevel 2 = Headers - Фонт заголовков таблицы // nLevel 3 = Footers - Фонт нижнего колонтитула таблицы // nLevel 4 = SuperHeaders - Как перевести ???
|
|
|
Haz
|
| |
Пост N: 288
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.08.14 13:03. Заголовок: Andrey пишет: Super..
Andrey пишет: цитата: | SuperHeaders - Как перевести |
| переведи как сложный, составной или многоуровневый заголовок. А вообще лучше пользователя в эти детали не погружать , а то вместо работы весь день в раскраски играть будут
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3552
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.08.14 13:31. Заголовок: Haz пишет: а то вм..
Haz пишет: цитата: | а то вместо работы весь день в раскраски играть будут |
| Ну и пускай, это их время. Хоть с программой будут работать, а не в одноклассниках сидеть !
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 386
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.08.14 13:58. Заголовок: Andrey пишет:Ну и пу..
Andrey пишет: Ты рисковый парень. Они же скажут, в итоге, с программой невозможно работать - цвета постоянно меняются, прыгают, а мы ни на что не нажимаем. (придется делать log, что бы уличить их - работы будет не початый край)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3553
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.08.14 14:23. Заголовок: SergKis пишет: прид..
SergKis пишет: цитата: | придется делать log, что бы уличить их - работы будет не початый край |
| Да ладно, лог-файл уже есть, сделаем дописку смены шрифта и цвета. Меня юзера достают, то шрифт им не тот , то цвет не тот. Компы то старые...
|
|
|
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 ) Потом на кнопу "изменить фонты" делаю отдельную функцию смены фонтов. Как получить установленные фонты в виде массива имен и размеров ?
|
|
|
Haz
|
| |
Пост N: 289
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.08.14 14:41. Заголовок: Andrey пишет: Как п..
Andrey пишет: цитата: | Как получить установленные фонты в виде массива имен и размеров ? |
| Внимательно изучать примеры и тренировать память Здесь C:\MiniGUI\SAMPLES\Advanced\RichEditEx
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3555
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.08.14 15:25. Заголовок: Haz пишет: Внимател..
Haz пишет: цитата: | Внимательно изучать примеры и тренировать память Здесь C:\MiniGUI\SAMPLES\Advanced\RichEditEx |
| Спасибо за подсказку !
|
|
|
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 ) установленный шрифт. Что забыл или не так делаю ?
|
|
|
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")
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3558
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.08.14 13:27. Заголовок: Haz пишет: там есть..
Haz пишет: цитата: | там есть rr_getfonts() которая выдает список установленных в системе фонтов выбираешь нужное ИМЯ и РАЗМЕР |
| Эту менюшку я уже сделал ! Мне нужно передать в это меню ТЕКУЩИЕ ФОНТЫ и РАЗМЕР ФОНТА моего TBROWSE. Вот на этом я и споткнулся.
|
|
|
Haz
|
| |
Пост N: 292
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.08.14 14:05. Заголовок: может проще запомина..
может проще запоминать где нить какие шрифты назначил для бровса, чем по хендлу ( который кстати ранее назначается именно именем и размером ) получить тоже имя и размер
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3559
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.08.14 14:55. Заголовок: Haz пишет: может пр..
Haz пишет: цитата: | может проще запоминать где нить какие шрифты назначил для бровса, чем по хендлу |
| Ну этот вариант я не рассматривал, т.к. он самый простой... Хотел сделать по уму, как в других системах. Да и хотел понять, как делаются такие вещи в программах.
|
|
|
Haz
|
| |
Пост N: 293
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.08.14 15:16. Заголовок: Andrey пишет: Хотел..
Andrey пишет: ага, а потом будет вопрос как из TSb получить хендл шрифта по уму это когда максимально просто
|
|
|
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 ) установленный шрифт. Что забыл или не так делаю ?
|
|
|
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
|
|
|
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 ? Эх, значит нужно менюшку другую делать...
|
|
|
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 т.е. по хендлу получить параметры ( не проверял)
|
|
|
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} ------------------------ Что-то странное...
|
|
|
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
|
|
|
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" ) )
|
|
|
Haz
|
| |
Пост N: 297
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.08.14 11:14. Заголовок: гдето глюк :sm15: ..
гдето глюк i := AScan( _HMG_aControlHandles, FontHandle ) не находит хендл
|
|
|
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} Спасибо БОЛЬШОЕ !!! Теперь можно получать фонты.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3565
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.08.14 15:41. Заголовок: Вопрос по ширине кол..
Вопрос по ширине колонок в TBROWSE. Кто как их определяет ? Можно вручную задавать ширину колонки через переменные, а можно же сделать расчет ширины колонки (шрифт*на длину поля) ? Или можно для функции LoadFields( cBrw, ParentForm, lEdit, aPoleField) ничего не заполнять, а она сама заполнит ? Поделитесь опытом...
|
|
|
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) ?
|
|
|
Haz
|
| |
Пост N: 298
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.08.14 08:03. Заголовок: Andrey пишет: City-..
Andrey пишет: ИМХО это не прокатит если это подчиненная рабочая область ( не проверял но судя по коду не должно работать правильно )
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3567
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.08.14 10:31. Заголовок: Haz пишет: ИМХО это..
Haz пишет: цитата: | ИМХО это не прокатит если это подчиненная рабочая область |
| А как тогда сделать ?
|
|
|
Haz
|
| |
Пост N: 299
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.08.14 10:49. Заголовок: Andrey пишет: А как..
Andrey пишет: добавить столбец которому назначить блок выборки записи из/в City->City. :bData := {|| IF(Pcount() = 0, City->City, City->City := x )}
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3568
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.08.14 11:19. Заголовок: А по исходнику есть:..
А по исходнику есть: METHOD LoadRelated( cAlias, lEditable, aNames, aHeaders ) CLASS TSBrowse Только как прикрутить не знаю ?
|
|
|
Haz
|
| |
Пост N: 300
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.08.14 11:51. Заголовок: Судя по исходнику до..
Судя по исходнику должно вызываться явно oBrw:LoadRelated(.... ) Добавляет в бровс колонки с блоком выборки из указанной рабочей области Andrey пишет: цитата: | Только как прикрутить не знаю |
| что именно не понятно в вызове LoadRelated( cAlias, lEditable, aNames, aHeaders ) ?
|
|
|
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() ?
|
|
|
Haz
|
| |
Пост N: 302
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.08.14 12:59. Заголовок: LoadRelated - не зам..
LoadRelated - не заменяет, а добавляет через ::AddColumn( TSColumn():New() т.е. вместо - никак нужно использовать :DelColumn() и :InsColumn() руками или просто в нужной колонке отредактировать блок выборки записи на нужный
|
|
|
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 Работает !!!
|
|
|
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 шрифт завел для редактирования
|
|
|
Haz
|
| |
Пост N: 303
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.08.14 14:52. Заголовок: попробуй так obrw:a..
попробуй так obrw:aColumns[n]:hFontEdit := aFont[5]
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3574
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.08.14 15:01. Заголовок: Haz пишет: попробуй..
Haz пишет: Получилось !!! Спасибо !!!
|
|
|
Haz
|
| |
Пост N: 304
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.08.14 15:19. Заголовок: Andrey пишет: А кур..
Andrey пишет: не знаю, надо :oEdit ковырять
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3575
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.08.14 16:29. Заголовок: А как редактировать ..
А как редактировать ПОЛЕ при многопользовательском режиме ???? Там же сначала нужно блокировать запись, а потом редактировать, а потом снимать блокировку ! Или TBROWSE сам это делает ?
|
|
|
Haz
|
| |
Пост N: 305
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.08.14 16:50. Заголовок: Andrey пишет: Или T..
Andrey пишет: цитата: | Или TBROWSE сам это делает |
| делает в методе :PostEdit по умолчанию, PS. вообще блокировка записи это для ленивых еще в clipper делал обработку ошибки "требуется блокировка" - как блокировку и повтор операции , если блокировать не удавалось - сообщение что нужно подождать и опять повтор или отказ. После этого забыл что такое Rlock() Сейчас не пользую т.к. работаю с ADS через SQL запросы и блокировка теперь это проблема ADS сервера
|
|
|
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 переменную, я к ним привык....
|
|
|
Haz
|
| |
Пост N: 306
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.08.14 16:52. Заголовок: Andrey пишет: Подск..
Andrey пишет: цитата: | Подскажите пожалуйста про такую вещь... |
| Не совсем понял о чем речь
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3584
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.08.14 20:35. Заголовок: Haz пишет: Не совсе..
Haz пишет: цитата: | Не совсем понял о чем речь |
|
Andrey пишет: цитата: | // Как мне здесь закончить выбор из TBROWSE ???? // чтобы вернулось значение nRet |
| Т.е. нужно закрыть сам TBROWSE и окно на котором TBROWSE открывался. И вернуть значение nRet которое было выбрано в TBROWSE. Это обычный выбор из справочника (у меня в терминалке).
|
|
|
Haz
|
| |
Пост N: 307
Зарегистрирован: 20.02.11
|
|
Отправлено: 22.08.14 21:32. Заголовок: Andrey пишет: Т.е. ..
Andrey пишет: цитата: | Т.е. нужно закрыть сам TBROWSE и окно |
| понятно. Все правильно ... Выбор из Tbrowse запоминаем в переменной и ее возвращаем функцией которая создает окно и сам бровс. перед вызовом ThisWindow.Release эту переменную и назначаем ( эту переменную можно передавать в обработчик по ссылке - через @ )
|
|
|
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 - правильно ?
|
|
|
Haz
|
| |
Пост N: 308
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.08.14 08:01. Заголовок: Проще повесить на ON..
Проще повесить на ON CHANGE {|| nRetCode := FIELDGET(FIELDNUM("KCITY")) }. Это событие отрабатывает при перемещении по бровсу вверх низ и переменная всегда будет содержать значение из текущей строки ( а ведь ее нужно сделать текущей что б что то выбрать ). При отказе от выбора по ESC или кнопке CANCEL - обнулять переменную перед закрытием окна. PS/ уезжаю на несколько дней - м.б. не подскажу в это время - не знаю как с инетом
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3586
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.08.14 12:15. Заголовок: Haz пишет: Проще по..
Haz пишет: цитата: | Проще повесить на ON CHANGE {|| nRetCode := FIELDGET(FIELDNUM("KCITY")) }. |
| Вот это мне и нужно было ! Спасибо !
|
|
|
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 при перемещении МАРКЕРА(курсора) клавишами или мышкой в подвале нумерация записей НЕ МЕНЯЕТСЯ !!! Как исправить ?
|
|
|
Haz
|
| |
Пост N: 309
Зарегистрирован: 20.02.11
|
|
Отправлено: 27.08.14 11:11. Заголовок: Andrey пишет: Как и..
Andrey пишет: менять руками через присвоение :cFooting := 'новое значение'
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3597
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.08.14 13:15. Заголовок: Haz пишет: менять р..
Haz пишет: цитата: | менять руками через присвоение :cFooting := 'новое значение' |
| Не понял...
|
|
|
Haz
|
| |
Пост N: 310
Зарегистрирован: 20.02.11
|
|
Отправлено: 27.08.14 14:28. Заголовок: Andrey пишет: Не по..
Andrey пишет: это я не понял - не посмотрел что уже есть присвоение после него попробуй oBrw_5:DrawFooters()
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3598
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.08.14 16:09. Заголовок: Haz пишет: попробуй..
Haz пишет: цитата: | попробуй oBrw_5:DrawFooters() |
| Ура ! Заработало ! Спасибо БОЛЬШОЕ !!!
|
|
|
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 ?
|
|
|
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 ) } см как там сделано
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3600
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.08.14 20:44. Заголовок: Haz пишет: см как т..
Haz пишет: Спасибо БОЛЬШОЕ !!!
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3607
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.08.14 14:21. Заголовок: Привет всем. Вот опя..
Привет всем. Вот опять непонятка. Сделал контекстное меню для TBROWSE и после выбора из него это контекстное меню остается на экране. ТОЛЬКО после второго клика на этом меню, оно уходит. При использовании другого меню с MsgInfo() - нормально уходит, сразу после первого нажатия. Что в вызываемой функции нужно добавить ?
|
|
|
Haz
|
| |
Пост N: 317
Зарегистрирован: 20.02.11
|
|
Отправлено: 29.08.14 14:37. Заголовок: Andrey пишет: ТОЛЬК..
Andrey пишет: цитата: | ТОЛЬКО после второго клика на этом меню, оно уходит. |
| есть такой косяк, не разбираясь добавил в конец нужного действа информационное сообщение типа MsgBox('Включен показ удаленных записей')
|
|
|
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 не очень хочется. Проблему решить пока не смог, может быть есть идеи или решение проблемы?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3640
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.10.14 11:54. Заголовок: a_sidorov пишет: Ку..
a_sidorov пишет: цитата: | Курсор никак не хочет переключаться и остается по размером ячейки редактирования. |
| Я тоже бы хотел узнать как в TBROWSE нужно это делать ?
|
|
|
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.)
|
|
|
a_sidorov
|
| |
Пост N: 51
Зарегистрирован: 07.06.08
|
|
Отправлено: 07.10.14 13:30. Заголовок: Haz пишет: попробуй..
Haz пишет: Большое спасибо, работает!!! Нужно добавить, что перед переходом для редактирования (короткий курсор по ячейке) нужно поставить AEval( oBrw:aColumns, { |oColumn| oColumn:lFixLite := .f. } ) Иначе не работает второй переход на редактирование
|
|
|
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 ] := ? Как мне запомнить текущий Цвет линий между ячейками на время, а потом восстановить его ?
|
|
|
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 не проверял , но раз в методе есть - должно работать
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3650
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.10.14 12:49. Заголовок: Haz пишет: через oB..
Haz пишет: цитата: | через oBrw:Setcolor( {CLR_LINE}, { Rgb( 0,176,240)} ) попробуй PS не проверял , но раз в методе есть - должно работать |
| Это работает ! Спасибо. Как мне запомнить текущий Цвет линий между ячейками на время, а потом восстановить его ?
|
|
|
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} ) // восстановить цвет линий между ячейками таблицы
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3673
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.11.14 06:07. Заголовок: Опять руки дошли до ..
Опять руки дошли до TBROWSE и снова вопрос по нему. Как получить ширину колонок в TBROWSE после их изменением юзером ? Т.е. сохранить эту ширину в файле-настроек, а потом восстановить (установить) при других запусках.
|
|
|
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]
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3674
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.11.14 17:50. Заголовок: Haz пишет: И соотве..
Haz пишет: цитата: | И соответственно получить ширину колонки n можно oBrw:GetColSizes()[n] |
| Спасибо !!! При создании окна есть ON INIT. А где при создании (или после создания) TBROWSE можно также сделать ? Т.е. нужно восстановить все настройки допустим из ини-файла.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 427
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.11.14 12:47. Заголовок: Andrey пишет:А где п..
Andrey пишет: цитата: | А где при создании (или после создания) TBROWSE можно также сделать ? Т.е. нужно восстановить все настройки допустим из ини-файла. |
| сам же ответил: цитата: | При создании окна есть ON INIT. |
| там читаешь ini делаешь SetColWidth(...), расчитывашь новые (или из ini) размеры TsBrowse ... или между END WINDOW и ACTIVATE WINDOW
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 428
Зарегистрирован: 17.02.12
|
|
Отправлено: 04.11.14 12:50. Заголовок: Andrey SetColSize(...
Andrey SetColSize(...), надо, а не SetColWidth(...)
|
|
|
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 этот список шрифтов (с размерами и т.д.) ?
|
|
|
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]
|
|
|
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 ? Но тоже не работает...
|
|
|
Haz
|
| |
Пост N: 328
Зарегистрирован: 20.02.11
|
|
Отправлено: 04.11.14 19:28. Заголовок: Andrey пишет: А где..
Andrey пишет: цитата: | А где при создании (или после создания) TBROWSE можно также сделать ? Т.е. нужно восстановить все настройки допустим из ини-файла. |
| у TsBrowse объекта есть блок DATA bInit // code block to be evaluated on init может он ?
|
|
|
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 ? Но тоже не работает...
|
|
|
Haz
|
| |
Пост N: 329
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.11.14 14:07. Заголовок: Andrey пишет: hFont..
Andrey пишет: цитата: | hFont1 := oBrw:aColumns[ 1 ]:hFont ? Но тоже не работает... |
| что именно не работает ? Нормально возвращает хендл и GetFontParam() по нему дает правильные данные
|
|
|
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)
|
|
|
Haz
|
| |
Пост N: 330
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.11.14 14:48. Заголовок: Andrey пишет: Error..
Andrey пишет: цитата: | Error BASE/1004 Метод не экспортирован: ACOLUMNS |
| это в каком куске кода происходит ??? Похоже имеет место попытка получить шрифты с еще не инициализированного бровса. PS. как oBrw передается в функцию ? если никак то объявлен ли oBrw к примеру как PUBLIC oBrw перед созданием ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3682
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.11.14 14:58. Заголовок: Haz пишет: это в ка..
Haz пишет: цитата: | это в каком куске кода происходит ??? Похоже имеет место попытка получить шрифты с еще не инициализированного бровса. |
| Точно. Ж.. с ручкой - передача oBrw: между функциями неправильная !
|
|
|
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) ...............
|
|
|
Haz
|
| |
Пост N: 332
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.11.14 18:45. Заголовок: Andrey пишет: Как л..
Andrey пишет: цитата: | Как лучше менять шрифты в TBROWSе |
| через оBrw:ChangeFont( aFont[ 1 ], , 1 ) , т.к. aFont[] может быть кодовым блоком и соответственно шрифт в колонке может меняться от условий. К примеру - обслуженная заявка может отображаться перечеркнутым шрифтом, а черновик - курсивом
|
|
|
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] ) или нет ?
|
|
|
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 В итоге - цель то какая ?
|
|
|
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 ..............
|
|
|
Haz
|
| |
Пост N: 335
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.11.14 21:53. Заголовок: Andrey пишет: Что-т..
Andrey пишет: не обратил внимания у меня aFont из хендлов а твой массив параметров шрифта . тогда НЕ ДОСТАТОЧНО тогда пример richEditEx в помощь ( уже вроде говорили про него в этом контексте месяца три назад ) там как раз показано как использовать _SetFont(), и правильно что туда заглянул
|
|
|
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) Извиняюсь за повторные (тупые) вопросы. Память уже не та...
|
|
|
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 ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3693
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.11.14 18:28. Заголовок: Блин, разобрался... ..
Блин, разобрался... Нужно вместо nWidth := GetTextWidth( NIL, nLenPole, GetFontHandle(hFont) ) Задавать текст, а не число...
|
|
|
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 .... Что не так делаю ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3695
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.11.14 01:30. Заголовок: Andrey пишет: LoadF..
Разобрался. Мой косяк. Оказывается я два раза делал в программе загрузку файлов... LoadFields( oBrw, 'Form_0' ) oBrw:LoadFields( .F. ) // все поля НЕ редактируемые
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3697
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.11.14 17:38. Заголовок: Как можно вывести МЕ..
Как можно вывести МЕМО поле в TBROWSE в одну строчку, чтобы таблица не увеличивалась на две строки ?
|
|
|
Dima
|
| |
Пост N: 4254
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.11.14 17:48. Заголовок: написать свой блок к..
написать свой блок кода для вывода этого поля
|
|
|
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) Где неправ, подскажите пожалуйста...
|
|
|
Dima
|
| |
Пост N: 4255
Зарегистрирован: 17.05.05
|
|
Отправлено: 08.11.14 18:09. Заголовок: Примеры смотрел ? Ts..
Примеры смотрел ? TsB_Mdi.prg TsBtest.prg
|
|
|
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() + "№№") ..... А как я не знаю... Подскажите пожалуйста, может я и не прав.
|
|
|
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
|
|
|
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/
|
|
|
Haz
|
| |
Пост N: 337
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.11.14 12:00. Заголовок: Andrey пишет: Что-т..
Andrey пишет: цитата: | Что-то не получается это окно... |
| 1. EdtiBox value нужно присваивать не пустую строку а значение мемо поля 2. Forma_memo должна вернуть .F. чтоб не пустить в редактирование поля бровс
|
|
|
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/ Только базу удалить старую нужно.
|
|
|
Haz
|
| |
Пост N: 338
Зарегистрирован: 20.02.11
|
|
Отправлено: 09.11.14 22:24. Заголовок: Andrey пишет: А как..
Andrey пишет: цитата: | А как теперь сделать: 1) Возврат и запись отредактированного мемо-поля ? 2) Кнопочку маленькую (квадратненькую, в размер ячейки) повесить на активное мемо-поле в TBROWSE |
| 1. При закрытии окна если мемо поле редактировалось - запросить сохранение и если пользователь скажет ДА - то присвоить значение Value из Editbox в мемо поле ( возможно через RLock() ). 2. Посмотри в примерах TsBrowse использование метода :SetBtnGet() это и есть кнопочка
|
|
|
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 дернули ? Помогите пожалуйста разобраться.
|
|
|
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 появляется внутри ячейки редактируемой
|
|
|
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/
|
|
|
Haz
|
| |
Пост N: 341
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.11.14 15:01. Заголовок: Andrey пишет: Если ..
Andrey пишет: цитата: | Если убрать oBrw:aColumns[nI]:bPrevEdit := {|| FORMA_MEMO( &( bBlock2 ) ) } , то кнопка появляется ТОЛЬКО при редактировании. |
| так и должно быть это btnGET - т.е. кнопка в GET объекте , поэтому и писал что нужно не использовать PrevEdit (иначе GET не создается )
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3706
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.11.14 15:10. Заголовок: Haz пишет: так и до..
Haz пишет: цитата: | так и должно быть это btnGET - т.е. кнопка в GET объекте , поэтому и писал что нужно не использовать PrevEdit (иначе GET не создается ) |
| А как тогда быть ? Кнопка на МАРКЕРЕ НЕ ПОКАЗЫВАЕТСЯ, только при редактировании ? А я хочу показ кнопки без редактирования, а при редактировании чтобы срабатывала функция FORMA_MEMO( &( bBlock2 ) ? Или это сделать нельзя ?
|
|
|
Haz
|
| |
Пост N: 342
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.11.14 15:20. Заголовок: Andrey пишет: Или э..
Andrey пишет: похоже что невозможно , сам остановился на варианте с PrevEdit
|
|
|
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
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 685
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.11.14 13:42. Заголовок: Andrey пишет: Как с..
Andrey пишет: Ответ отправил по почте
|
|
|
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] ...
|
|
|
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]
|
|
|
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 ) }
|
|
|
Haz
|
| |
Пост N: 350
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.11.14 23:44. Заголовок: Andrey пишет: oBrw:..
Andrey пишет: Андрей, выведи чему равно значение ::cData для каждой колонки и у тебя появится четвертый вариант
|
|
|
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() координаты МАРКЕРА/КУРСОРА ? И длину маркера тоже как получить ?
|
|
|
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 и тд
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3720
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.11.14 13:26. Заголовок: Спасибо Haz за разъя..
Спасибо Haz за разъяснения ! Haz пишет: цитата: | и читаем его переменные oEdit:oWnd:nTop. oEdit:oWnd:nLeft и тд |
| НЕ читаются. Пишет Метод не экспортирован: OWND или другую хрень. Покажи пожалуйста как правильно прочитать для моего примера ?
|
|
|
Haz
|
| |
Пост N: 353
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.11.14 14:38. Заголовок: Andrey пишет: НЕ чи..
Andrey пишет: Похоже добраться до объекта oEdit можно только через :SetBtnGet(), а точнее через его bAction. Андрей , зачем тебе это , поделись что удумал. Может есть какой выход
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3730
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.11.14 15:58. Заголовок: Haz пишет: Андрей ,..
Haz пишет: цитата: | Андрей , зачем тебе это , поделись что удумал. Может есть какой выход |
| Хочу для юзеров сделать показ подсказки типа такой: А то при редактировании юзера не будут закрывать поле и данные не сохранятся. А еще есть всплывающие подсказки, их тоже можно прикрутить. Только координаты маркера нужны ! Как их получить ?
|
|
|
Haz
|
| |
Пост N: 354
Зарегистрирован: 20.02.11
|
|
Отправлено: 16.11.14 16:15. Заголовок: Andrey пишет: А то ..
Andrey пишет: цитата: | А то при редактировании юзера не будут закрывать поле и данные не сохранятся. |
| стандартными средствами похоже не сделать , надо менять исходники или TGetBox или TSBrowse. я для таких забывчивых пользователей так и делаю в каждом релизе HMG чтоб было как в Excel сдвинул фокус и данные уже сохранились
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3732
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.11.14 16:27. Заголовок: Haz пишет: стандарт..
Haz пишет: цитата: | стандартными средствами похоже не сделать , надо менять исходники или TGetBox или TSBrowse. я для таких забывчивых пользователей так и делаю в каждом релизе HMG чтоб было как в Excel сдвинул фокус и данные уже сохранились |
| А почему дополнительный флаг не сделать сразу в исходники ? Григорий бы внес и все пользовались бы ? Не только у меня проблемы такие, у всех....
|
|
|
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
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 432
Зарегистрирован: 17.02.12
|
|
Отправлено: 16.11.14 22:13. Заголовок: PS это делаешь в сво..
PS это делаешь в своем коде, после создания oBrw или всех колонок - смотря что выбрал для реализации
|
|
|
Haz
|
| |
Пост N: 355
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.11.14 14:16. Заголовок: SergKis пишет: это ..
SergKis пишет: цитата: | это делаешь в своем коде, после создания oBrw |
| Думаю, Андрей имел в виду "флаг" при переключении которого запись в редактируемую ячейку происходила бы при потере фокуса get объектом даже если LastKey() <> VK_ENTER (просто ткнули мышом в другую ячейку) . В TSB сейчас редактирование прерывается и значение не сохраняется ,Get закрыт и значение его буфера потеряно.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 433
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.11.14 18:46. Заголовок: Haz пишет:запись в р..
Haz пишет: цитата: | запись в редактируемую ячейку происходила бы при потере фокуса get объектом даже если |
| Я тоже это имел ввиду, т.е. если не хватает флага, то можно добавить на oBrw или на каждую колонку oTsColumn. Можно добавить новый или изменить сущест. метод объекта (см. Harbour для начинающих), без обращения к Григорию Я с TsBrowse не работаю, но GetBox использую, а в него из TsColumn передается блок LostFocus, а в нем (блоке) спокойно, получив oGet проделать операции по сохранению ...
|
|
|
Haz
|
| |
Пост N: 356
Зарегистрирован: 20.02.11
|
|
Отправлено: 17.11.14 19:32. Заголовок: SergKis пишет: полу..
SergKis пишет: цитата: | получив oGet проделать операции по сохранению ... |
| спасибо за идею, я просто менял исходники постояннно
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3739
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.11.14 22:28. Заголовок: Возвращаюсь дальше к..
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3741
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.11.14 14:22. Заголовок: Haz пишет: нет ниче..
Haz пишет: Не совсем получается. При обработке первой колонки по F9 попадаю в обработку 1-ой колонки. А остальные колонки - становятся закрытыми !!! Что-то не так делаю ? Исправленный пример там же.
|
|
|
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))
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3742
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.11.14 15:23. Заголовок: Haz пишет: там всег..
Haz пишет: Понял, разобрался. А как все-таки получить в функции MyEditPole() координаты курсора/маркера ? MsgDebug( "Right=", oBrw:aColumns[oBrw:nCell]:oEdit:nRight, "Left=", oBrw:aColumns[oBrw:nCell]:oEdit:nLeft ) Выдает ошибку : Error BASE/1004 Метод не экспортирован: NRIGHT
|
|
|
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. Но вот что с ними делать будешь ?
|
|
|
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
|
|
|
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 Не могу сообразить как выставить условие показа....
|
|
|
Haz
|
| |
Пост N: 362
Зарегистрирован: 20.02.11
|
|
Отправлено: 23.11.14 13:07. Заголовок: Andrey пишет: Как м..
Andrey пишет: цитата: | Как мне рас красить таблицу по строкам ? |
| не понял вопрос в oBrw_2:Setcolor( { 1 }, { nTextColor }, 1 ) вместо { nTextColor } укажи блок кода , который вернет массив цвета в зависимости от номера строки
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3746
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.11.14 13:39. Заголовок: Haz пишет: кажи бло..
Haz пишет: цитата: | кажи блок кода , который вернет массив цвета в зависимости от номера строки |
| Вот с этим блоком кода у меня и не получается....
|
|
|
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 )
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3747
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.11.14 15:03. Заголовок: Haz пишет: как то т..
Haz пишет: Нет, не получается.... Я файл на почту отправил. Посмотри пожалуйста.
|
|
|
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 свои значения ?
|
|
|
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 (индексы фильтры сортировка и пр)
|
|
|
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
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3751
Зарегистрирован: 12.09.06
|
|
Отправлено: 24.11.14 20:59. Заголовок: Haz Спасибо ! :sm36..
Haz Спасибо ! Еще можно и так: FOR nI := 1 TO oBrw_2:nLen
|
|
|
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] })
|
|
|
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 вопроса, письмо отправил.
|
|
|
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 ?
|
|
|
Haz
|
| |
Пост N: 368
Зарегистрирован: 20.02.11
|
|
Отправлено: 25.11.14 12:39. Заголовок: Andrey пишет: А поч..
Andrey пишет: цитата: | А почему не работает вот эта конструкция |
| Она не может не работать , bPostEdit автоматически выполняется после редактирования Проверь вызов , oBrwClr:aColumns[4]:bPostEdit := { || MsgDebug('ДО'), ViewColorTbrws(oBrwClr,4,aVar), MsgDebug('ПОСЛЕ') } Скорее в логике проблема.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3755
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.11.14 13:13. Заголовок: Спасибо, буду разбир..
Спасибо, буду разбираться. Еще вопрос, в программе делаю: oBrwClr:nAdjColumn := 3 // растянуть колонку 3 до заполнения пустоты в бровсе справа oBrw_2:nAdjColumn := 2 // растянуть колонку 2 до заполнения пустоты в бровсе справа Вот результат: Но это только при таких параметрах ХР: Как бороться с такой ситуацией ? Юзеров же не заставишь переключаться на обычный шрифт...
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3758
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.11.14 12:39. Заголовок: Т.е. я понял что ник..
Т.е. я понял что никто не знает как бороться с такой ситуацией. Есть ли для объекта TBROWSE такое же свойство как Enabled Property: <WindowName>.<ControlName>.Enabled [<nItemNumber>] := lEnabledState ? Т.е. запретить редактирование, да и переход тоже на TBROWSE. Или аналогичное свойство ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3764
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.11.14 18:07. Заголовок: Нашел метод. Метод E..
|
|
|
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 ?
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3766
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.11.14 21:21. Заголовок: Haz пишет: так само..
Haz пишет: цитата: | так самого Edit нет же т.к. PrevEdit туда и не пускает возвращая FALSE |
| Понял, считал что по другому. Спасибо БОЛЬШОЕ за разъяснение !
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3767
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.11.14 21:24. Заголовок: А как насчет вопроса..
А как насчет вопроса про растягивание колонок при крупном шрифте (120) ? В программе делаю: oBrwClr:nAdjColumn := 3 // растянуть колонку 3 до заполнения пустоты в бровсе справа oBrw_2:nAdjColumn := 2 // растянуть колонку 2 до заполнения пустоты в бровсе справа
|
|
|
Haz
|
| |
Пост N: 372
Зарегистрирован: 20.02.11
|
|
Отправлено: 26.11.14 22:41. Заголовок: Andrey пишет: крупн..
Andrey пишет: не знаю, не пользую
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 435
Зарегистрирован: 17.02.12
|
|
Отправлено: 27.11.14 12:41. Заголовок: Andrey пишет:А как н..
Andrey пишет: цитата: | А как насчет вопроса про растягивание колонок |
| можно определить из видимых колонок, колонку с max width и для нее устанавливать ширину на +разницу от width окна tsbrowse и суммы других видимых width колонок, используя методы IsColVisible/IsColVis2 (в чем разница не знаю) и SetColSize
|
|
|
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
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3783
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.11.14 17:10. Заголовок: Опять облом с этим T..
Опять облом с этим TSBrowse.... Взял рабочий пример, переделал на новую новую базу и вылет... Даже и не знаю где искать ошибку ? Строка ошибки: oBrw:Refresh(.T.) Ставлю перед ошибкой MsgDebug(oBrw:nLen) выдает 0 ! До этого такая ошибка была с наличием БИТОГО индекса, сейчас всё правильно: индекс удаляю, потом заново строю. И где искать ошибку... Как бы сделать проверку перед выводом TSBrowse что все в порядке: поля, индексы, фильтр и т.д.
|
|
|
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.)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3803
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.12.14 18:50. Заголовок: Подскажите пожалуйст..
Подскажите пожалуйста, какой параметр отвечает за фон при очистке ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3818
Зарегистрирован: 12.09.06
|
|
Отправлено: 08.12.14 21:49. Заголовок: Очень раздражает в н..
Очень раздражает в новом TBrowse мелькание при перерисовке цвета. В Клипере, да и Харборе были операторы: dispbegin() ..... dispend() Есть ли здесь такие же аналоги ?
|
|
|
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)
|
|
|
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" )
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3841
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.12.14 16:28. Заголовок: Haz пишет: все прав..
Haz пишет: цитата: | все правильно , ни чё не перепутал ? |
| Перепутал. Оказывается, пытаюсь получить координаты еще НЕ НАРИСОВАННОГО (не объявленного) TBROWSE. Моя ошибка. Спасибо !
|
|
|
Dima
|
| |
Пост N: 4359
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.12.14 16:30. Заголовок: Andrey пишет: Переп..
Andrey пишет: ( Отправлено: Сегодня 02:00) Ну так в 2 часа ночи спать надо ;)
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3842
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.12.14 17:06. Заголовок: Dima пишет: Ну так ..
Dima пишет: цитата: | Ну так в 2 часа ночи спать надо ;) |
| Покой нам только сниться... Все переводом на МиниГуи занимаюсь ! Днем не дают.
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 3849
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.12.14 19:01. Заголовок: Вот опять фигня полу..
Вот опять фигня получается. Делаю по разному, один TBROWSE (простой) цвет фона рисует, другой основной нет. Белизна достает, пока меня, но чую если заказчику отдам, то будут меня заказчики просто и сложно доставать. Народ, подскажите как убрать белизну (цвет фона TBROWSE) если таблица не заполнена или записи фильтруются ? Блин http://shot.qip.ru не доступен ....
|
|
|
Dima
|
| |
Пост N: 4364
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.12.14 19:07. Заголовок: Andrey пишет: Народ..
Andrey пишет: цитата: | Народ, подскажите как убрать белизну |
| А Григорий что говорит по этому поводу ?
|
|
|
Ответов - 301
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
All
[только новые]
|
|