Форум » 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 ... Всё заработало



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