Форум » GUI » Снова TSBrowse » Ответить

Снова TSBrowse

krutoff: Режим ввода новой записи не работает! При вводе новой записи - Стрелка "Вниз" на последней записи происходит ввод только одной записи - а дальше (если есть индекс - выходит из режима ввода новой записи и позиционирует запись по индексу) - или, сколько не нажимай стрелку "Вниз" - ничего не происходит. Попробуйте на примере Sample2 отключить индекс или ввести в первое поле какой-нибудь код последний по индексу (например: mmmm) и дальше стрелка вниз уже не идет. Я проверил, что в этом случае работает блок (строка ~ 5120) h_tbrowse: If ! ::lHitBottom .and. ! ::lAppendMode .and. ::bChange != nil Eval( ::bChange, Self, ::oWnd:nLastKey ) EndIf Григорий, можете дать Янушу эту информацию?

Ответов - 25, стр: 1 2 All

gfilatov2002: krutoff пишет: Режим ввода новой записи не работает! Спасибо за информацию, но этот режим теперь работает немного по-другому. Есть небольшая хитрость, по-видимому введенная автором библиотеки для блокировки нежелательного добавления пустых записей нерадивыми пользователями, которые любят много раз нажимать Стрелка "Вниз" на последней записи Для корректного добавления новой записи в этом режиме теперь требуется сначала нажать кнопку End, а уже затем Стрелка "Вниз". В таком случае всегда происходит добавление новой записи Вот такая хитрость

krutoff: Спасибо Григорий! Вот уж действительно хитрость! Но когда надо сразу ввести много записей подряд - такая хитрость, мне кажется, может раздражать.

Dr. Oldwarez: Меня это тоже насторожило. Спасибо за помощь. Но вот дело именно в том, что надо вводить сразу много записей и необходимость одновременно нажимать две клавиши очень даже раздражает. Как это обойти?


i3t4j6: krutoff пишет: Вот уж действительно хитрость! Но когда надо сразу ввести много записей подряд - такая хитрость, мне кажется, может раздражать. Очень хотелось узнать - как Вы вышли из этой ситуации?!!

krutoff: По состоянию на 11.07.2012 в h_tbrowse.prg Закомментировал строчку 4049 //# _HMG_InteractiveCloseStarted := .F. и проблема была исправлена( пока исправлена...)

i3t4j6: Для примера - nSample = 6 из Advanced\TsBrowse\TsBtest.prg и в файле employee.dbf последнее поле Notes сделать Memo. Информация вводится , но не сохраняется. Помогите добиться правильного результата ?!!

gfilatov2002: i3t4j6 пишет: Для примера - nSample = 6 из Advanced\TsBrowse\TsBtest.prg и в файле employee.dbf последнее поле Notes сделать Memo. Проделал предложенные выше действия и успешно сохранил содержание поля ввода в мемо-поле после нажатия комбинации клавиш <Ctrl>+<Enter>

i3t4j6: gfilatov2002 пишет: ...и успешно сохранил содержание поля ввода.... Спасибо !!! Все получилось! Но, а если не нужно сохранять и пользователь по привычке нажимает Esc, то - происходит что-то непонятное и все виснет ???

gfilatov2002: i3t4j6 пишет: если не нужно сохранять и пользователь по привычке нажимает Esc Поправил эту бяку для следующей сборки Теперь при отказе от сохранения мемо надо будет нажимать клавишу <Tab> Оказывается, нажатие Escape для окон типа Edit приводит к немедленному закрытию окна (так работает WinApi )

serj: в TSBrowse, есть редактирование текущей ячейки по кл ENTER или клику мышки, можно ли сделать свое редактирование и что нужно применить

serj: Добрый день! в TSBrowse по ON CHANGE вызывается функция, которая содержит SetProperty( ThisWindow.Name,"statusbar","item",1,Ltrim(Str(Recno())) ) Данные выводятся почему то в главном окне DEFINE WINDOWS FORM1 statusbar, а не в текущем DEFINE WINDOWS FORM2 statusbar ,где открыт TSBrowse. Но если просто войти в режим изменения текущей ячейки и выйти, то данные выводятся правильно в окне FORM2 ,то есть управление передалось в окно FORM2. Как сделать чтобы сразу при открытии управление передавалость Form2.

i3t4j6: Для примера - nSample = 2 из Advanced\TsBrowse\TsBtest.prg При вводе любого символа - первый пропадает, а если активировать поле ввода при помощи Enter, то тогда все нормально. В предыдущих версиях было все в порядке, а впоследней 2.1.8 такое вот вылезло.

gfilatov2002: i3t4j6 пишет: В предыдущих версиях было все в порядке, а впоследней 2.1.8 такое вот вылезло. Спасибо за сообщение! Да, появилась такая проблемка именно в последней версии, но библиотека TsBrowse и Харбор тут ни при чем. Надо искать, что было внесено в ядро Минигуи, что дало такой эффект...

gfilatov2002: gfilatov2002 пишет: Надо искать, что было внесено в ядро Минигуи Ошибка локализована и исправлена Надо внести небольшое исправление в исходник h_events.prg, а именно дополнить проверку в следующем коде: IF _HMG_aControlType == 'GETBOX' .AND. ! ISOBJECT( oGet ) _PushKey ( VK_HOME ) ENDIF затем пересобрать библиотеку, и все заработает нормально

sashaBG: Вопрос в TSBrowse есть аналог внутренней переменной из терминального объекта Tbrowse :stable Моя проблема состоит в том , что иногда при работе через сеть особенно , нужно дожидатся до стабилизации объекта, иначе редко но программа вылетает . вот пример кода после которого нужно ето: //------------------------------------------------ STATIC PROCEDURE _SEARCH( oBrw , AFIELDS , aBGNames ) LOCAL i := oBrw:nCell - 1, cFilter, cFlt, bFlt cFilter := InputBox( " Введете значение :" , "Фильтр по -> " + aBGNames[ i ], '' ) cFilter := UPPER( TRIM( cFilter ) ) cFlt := '{||[' + cFilter + '] $ upper( hb_valtostr(' + AFIELDS[ i ] + '))}' bFlt := IIF( EMPTY( cFilter ), { || .t. }, &( cFlt ) ) IF EMPTY( cFilter ) DbClearFilter() ELSE Dbsetfilter( bFlt ) ENDIF DBGoTop() oBrw:Reset() //Здесь RETURN

alex_II: Поделитесь решением, кто сталкивался с такой проблемой: Необходимо при работе решать вопрос о запрете или нет для пользователя редактировать некоторые поля. Я использовал для этого PREEDIT в описании колонки для TBROWSE. Все прекрастно рабоет при входе в редактирование по Enter'у или двойному клику миши. Но если начинать редактирование сразу вводом с клавиатуры любых данных, то никакого контроля из PREEDIT не происходит и данные пишутся в ячейку что не есть хорошо. Ниже привожу кусок кода: DEFINE TBROWSE Br1 AT 0,0 GRID ALIAS 'oplto' WIDTH wbr HEIGHT hbr ; ON CHANGE {|| oInf() } ... ADD COLUMN TO Br1 HEADER 'Лицевой' SIZE wls ; DATA FieldWBlock('ls', SELECT('oplto')) ; PREEDIT {|| IF(ltoRee,.T.,.F.)} ; POSTEDIT {|| opl()} ; EDITABLE ADD COLUMN TO Br1 HEADER '.....' SIZE woto ; DATA FieldWBlock('opl3', SELECT('oplto')) ; EDITABLE MOVE DT_MOVE_DOWN ; PREEDIT {|| IF(lFind .AND. ltoRee,.T.,.F.)} ; POSTEDIT {|| recTipl(3,toTip,Br1))} ; FOOTER {|| f_str(soto,12,2) } ....

gfilatov2002: alex_II пишет: если начинать редактирование сразу вводом с клавиатуры любых данных Для блокировки ввода с клавиатуры можно использовать пользовательский блок bUserKeys // blocking activation of edition by character key oBrw:bUserKeys := { |nKey,nFlags,oBrw| if(nKey>30 .and. nKey<255,.F.,nKey) } Отпишитесь, если помогло

Панченко: Не знаю всех зависимостей задачи. Поэтому попробуйте так: 1. Для "Лицевой" editable = .F. 2. При наступлении события, разрешающего изменение, устанавливаем editable для "лицевой" в .T. 3. В postedit для "лицевой" editable = .F. PS. Колонка(и), которая(ые) могут разрешить редактирование "Лицевой" должна (ы) стоять левее.

alex_II: gfilatov2002 пишет: Для блокировки ввода с клавиатуры можно использовать пользовательский блок bUserKeys Прошу прощения Забыл написать в своем сообщении что зтот вариант тоже не помог, ввод с клпвиатуры благополучно попадал в ячейку TBROWSE

alex_II: Панченко пишет: 1. Для "Лицевой" editable = .F. 2. При наступлении события, разрешающего изменение, устанавливаем editable для "лицевой" в .T. 3. В postedit для "лицевой" editable = .F. Спасибо за идею, но реализовать её получилось немного по другому В событии ON CHANGE для TBROWSE поставил процедуру анализа в которую поместил команды: ... IF lFnd .AND. ltoRee ENABLE EDIT oBr COLUMN 1 ENABLE EDIT oBr COLUMN 2 ENABLE EDIT oBr COLUMN 3 ENABLE EDIT oBr COLUMN 4 ENABLE EDIT oBr COLUMN 5 ELSE DISABLE EDIT oBr COLUMN 1 DISABLE EDIT oBr COLUMN 2 DISABLE EDIT oBr COLUMN 3 DISABLE EDIT oBr COLUMN 4 DISABLE EDIT oBr COLUMN 5 IF ltoRee ENABLE EDIT oBr COLUMN 2 ENDIF ENDIF ... Всё заработало

gfilatov2002: alex_II пишет: ввод с клавиатуры благополучно попадал в ячейку TBROWSE Благодарю за отклик! Это будет исправлено в следующей сборке

Haz: DbAppend в Tbrowse Может кому пригодиться ) Долго (ну очень) боролся с корректным отображением в бровсе после DbAppend() - оставался мусор на экране в виде старых значений , который при движении курсора перерисовывался на правильные значения. Использовал следующий алгоритм: (есть индекс по Recno() - "RECNO" ) Примерный код по кнопке: 1) Dbappend() 2) nRec := RecNo() 3) nOrder := OrdSetFocus("RECNO") 4) oBrw:ExpSeek( NTOC(nRec), .F. ) 5) OrdSetFocus(nOrder) и были дальше безуспешные пляски со всякими Upstable, Reset и прочее .... пока не впихнул между строками 3 и 4 oBrw:SetFocus() и все заработало как надо. Чтоб больше не не мучиться добавил в исходник метода ExpSeek и ExpLocate строку ::SetFocus() в начале кода после ::lValidating := .T. и пересобрал библиотечку. Теперь добавление новой записи по кнопку в Tbrowse рисуется корректно PS. Месяца 4 бился , а так просто оказалось )

Haz: Устал биться с :SetBtnGet в TsBrowse при редактировании колонки 4 кнопку рисует, но нажатие на нее не отрабатывает ткните пальцем, что не так в примере ? #include "minigui.ch" #include "tsbrowse.ch" EXTERN TBBTNEVENTS FUNC Connection() LOCAL aArr := {} AADD( aArr, {"Ena ", "Art01", "Mod01", "200"} ) AADD( aArr, {"Tria ", "Art03", "Mod01", "200"} ) AADD( aArr, {"Tessera ", "Art04", "Mod01", "200"} ) DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 600 ; HEIGHT 200 ; TITLE "" ; MAIN ; NOSIZE DEFINE TBROWSE Grid ; AT 35, 0 ; OF Form_1 ; WIDTH (Form_1.Width - 10) ; HEIGHT (Form_1.Height - 70); FONT "Verdana" ; SIZE 9; CELL; EDIT END TBROWSE Grid:SetArray( aArr, .T. ) Grid:nHeightHead := 35 Grid:nHeightCell := 22 Grid:aColumns[1]:nWidth := 120 Grid:aColumns[1]:cHeading := "Col1" Grid:aColumns[2]:nWidth := 70 Grid:aColumns[2]:cHeading := "Col2" Grid:aColumns[3]:nWidth := 170 Grid:aColumns[3]:cHeading := "Col3 " Grid:aColumns[4]:nWidth := 170 Grid:aColumns[4]:cHeading := "Col4" Grid:SetBtnGet( 4, "", { |oEdit, xVar| MsgBox('AAAAAA') }, 26 ) END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 RETURN NIL

gfilatov2002: Haz пишет: при редактировании колонки 4 кнопку рисует, но нажатие на нее не отрабатывает Да, подтверждаю эту ошибку Решил так: заменил в методе Command класса TBtnBox строку case nNotifyCode == 0 .And. nID == 0 на case nNotifyCode == 512 .And. nID == 0 Прошу подтвердить правильность этого исправления на своем компьютере

Haz: Григорий , спасибо за оперативность ! gfilatov2002 пишет: Прошу подтвердить правильность этого исправления на своем компьютере ПОДТВЕРЖДАЮ - отрабатывает вызов блока



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