Форум » GUI » TsBrowse в Минигуи » Ответить

TsBrowse в Минигуи

Vlad04: TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру [quote] 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 [/quote] Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....

Ответов - 301, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All

Andrey: gfilatov2002 пишет: По-видимому, как то так Спасибо БОЛЬШОЕ ! А как еще сделать ввод (буквенный) в поле поиска (Search for:) но чтобы фокус оставался на маркере TBROWSE ?

a_sidorov: Делаете обработку ввода буковок в 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: a_sidorov пишет: Делаете обработку ввода буковок в TBROWSE и пишете их из программы в поле вода: То что надо ! Спасибо большое !


ММК: 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: обработка буковок уже есть в методе ::Seek( nKey ) класса TBrowse остается только через определение своего блока bSeekChange присваивать что-то типа этого Form_0.Text_1.Value:= oBrw:cSeek все лично проверено давно и работает, но есть парочка "НО" 1) должен быть индекс по полю по которому на буковки надо реагировать 2) не помню точно, но вроде в исходнике ::cSeek всегда в верхнем регистре и лечится убиранием UPPER( ЗЫ: могу поискать пример - когдато делал нечто похожее на комбо в TBrowse но по базе ис использованием подчиненного Tbrowse. назначал и буфер Get объекта

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

Haz: Andrey пишет: Пример в студию ! поищу, завтра выложу

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: Как вернуть фокус ввода обратно в 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: Как вернуть фокус ввода обратно в TBROWSE после своей обработки ? DoMethod( cForm, oBrw_1, 'setfocus' ) DoMethod( cForm, oBrw_1, 'refresh' )

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

SergKis: Andrey пишет:Как получить переменные Func My() oBrw := &cBrw // ты же делал PUBLIC &cBrw cForm := oBrw:cParentWnd cBrwName := oBrw:cControlName ...

Andrey: Спасибо БОЛЬШОЕ SergKis ! Что-то забывать стал уже пройденные этапы освоения МиниГуи... Видно, когда урывками осваиваешь, материал плохо усваивается...

Andrey: 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: Andrey пишет: OCAL oBrw := &cBrw это не cBrw объявлена как PUBLIC, а та переменная, имя которой в локальной cBrw было на тот момент при определении бровса было cBrw := "ИМЯ" ( где строка "ИМЯ" из твоего исходника ) тогда и объявлять надо LOCAL oBrw := &"ИМЯ"

serj: может так GetProperty (<cWindowName>[,<cControlName>] ,<cPropertyName>)--> PropertyValue GetProperty(cForm,'oBrw','width')

Haz: serj пишет: GetProperty(cForm,'oBrw','width') по любому чтобы работать с методами объекта , нужно знать этот объект, проще будет не усложнять себе жизнь и передать cBrw параметром - MyAction( cBrw ) где без труда получить сам объект &cBrw и далее дергать его проперти, его методы или выдавать фокус, прятать и.т.д. А так это похоже на операцию на гландах через (_|_)

Andrey: Haz пишет: А так это похоже на операцию на гландах через (_|_) Понял, что я совсем заработался или отупел...

Andrey: Haz пишет: цвет скрола определен в :WinNew() как локальные переменные которым назначаются системные значения nClrText := GetSysColor( COLOR_WINDOW ),; nClrBack := GetSysColor( COLOR_SCROLLBAR ),; следовательно без изменения системных значений или изменения метода WinNew() - никак ( Григорий, а можно добавить в библиотеку TsBrowse возможность изменения этих переменных ? Есть ли у вас возможность связаться с автором этой библиотеки ? Я понимаю, что можно самому добавить эти переменные и перекомпилировать библиотеку, но хотелось бы иметь эту возможность в стандартной библиотеке.

gfilatov2002: Andrey пишет: можно добавить в библиотеку TsBrowse возможность изменения этих переменных ? Это только значения по умолчанию для параметров функции WinNew() Вот полный вызов этой функции со всеми параметрами: WinNew( nMin, nMax, nPgStep, lVertical, oWnd, bUpAction,; bDownAction, bPgUp, bPgDown, bPos, nClrText, nClrBack,; lUpdate, bWhen, bValid ) Если Вы передадите при вызове этой функции свои параметры nClrText, nClrBack, то ...



полная версия страницы