Форум » [x]Harbour » Форма курсора в режиме вставки и замены? » Ответить

Форма курсора в режиме вставки и замены?

AndreyZh: Добрый день! Извините, если плохо искал... В досовом приложении разные курсоры в полях экранных форм, зависящие от режима вставки или замены. Для консольного на xHarbour они одинаковы... пробовал играться со шрифтами, но... Подскажите пожалуйста, как задать режим, что бы форма курсора менялась?

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

AlexMyr: harbour\tests\cursrtst.prg тестили?

AndreyZh: AlexMyr пишет: harbour\tests\cursrtst.prg тестили? Нет, но спасибо посмотрю.... хотя хотелось бы чего-то "самоочевидное" и "однократное"

AndreyZh: в догонку... в примере демонстрируются несколько форм курсора - это понятно! Вопрос в том, чтобы в зависимости от режима вставки и замены была разная форма курсора


AlexMyr: Проверил на клиппере, форма курсора меняется, на харборе нет.

AndreyZh: AlexMyr пишет: Проверил на клиппере, форма курсора меняется, на харборе нет. А что делать, что бы и на Харборе менялась?

AlexMyr: написал в харбор юзер лист, посмотрим что ответят.

AndreyZh: AlexMyr пишет: написал в харбор юзер лист, посмотрим что ответят Спасибо!

Петр: AlexMyr пишет: написал в харбор юзер лист, посмотрим что ответят. Читал вопрос и читал ответы.. Тестировал Clipper 5.3b, Clipper 5.2e, - все как в Harbour. Если спрашивающий, хочет менять форму курсора, то или пусть откомпилирует Harbour без HB_COMPAT_C53, или в tgetlist.prg заменит SetCursor( iif( ::nSaveCursor == SC_NONE, SC_NORMAL, ::nSaveCursor ) ) на SetCursor( iif( Set( _SET_INSERT ), SC_INSERT, SC_NORMAL ) )

AlexMyr: Петр пишет: Тестировал Clipper 5.3b, Clipper 5.2e, - все как в Harbour. тоже тестировал с clipper 5.3b - форма курсора меняеться, с одним из последних харбором - форма курсора не меняется. Петр пишет: HB_COMPAT_C53 это разве не указывает на совместимость харбора с клипером 5.3?

Петр: AlexMyr пишет: это разве не указывает на совместимость харбора с клипером 5.3? Вот именно, что указывает. А теперь откройте * Getsys.prg * Standard Clipper 5.3 GET/READ Subsystem * Version 5.3b. * Copyright (c) 1990 - 1997, Computer Associates International, Inc. * All rights reserved. и посмотрите реализацию, там же, что написано (не нужное опускаю) FUNCTION ReadModal ... nSaveCursor := SETCURSOR( SC_NONE ) ... saStatics[ SNSVCURSOR ] := SETCURSOR( SC_NONE ) // Added. !! т.е. saStatics[ SNSVCURSOR ] == SC_NONE ... тут вызов GetReader ... SETCURSOR( saStatics[ SNSVCURSOR ] ) // Changed. PROCEDURE GetReader // Apply keystrokes until exit WHILE ( oGet:exitState == GE_NOEXIT .AND. !saStatics[ SLKILLREAD ] ) SETCURSOR( IIF( saStatics[ SNSVCURSOR ] == SC_NONE, ; SC_NORMAL, saStatics[ SNSVCURSOR ] ) ) // Added IIF(). nKey := INKEY( 0 ) SETCURSOR( SC_NONE ) GetApplyKey( oGet, nKey, GetList, oMenu, aMsg ) nRow := ROW() nCol := COL() ShowGetMsg( oGet, aMsg ) DevPos( nRow, nCol ) ENDDO Вот вам и совместимость с Clipper 5.3b

Петр: Кстати, только заметил, что AndreyZh пишет: Для консольного на xHarbour они одинаковы... Так вот в xHarbour tgetlist.prg есть такие закомментированые строки [pre2] case K_INS //if ! lPassword Set( _SET_INSERT, ! Set( _SET_INSERT ) ) ::ShowScoreboard() //endif /* 2007/SEP/24 - EF - Toggle cursor shape at insert mode on/off * Uncomment it, if you want this behaviour. *if ::nSaveCursor != SC_NONE * ::nSaveCursor := if( Set(_SET_INSERT), SC_INSERT, SC_NORMAL ) *endif */ [/pre2]

AndreyZh: Спасибо Петр! Насколько понял - в xHarbour разработчики закоментировали механизм смены формы курсора в режиме вставки и замены? Подскажите, как возможно это вернуть не пересобирая систему xharbour из сырцов, а заменить "нюанс" в тексте своей программы?

Петр: Если есть доступ к к tgetlist.prg, изменить модуль и включить в состав своего приложения. bcc это позволяет делать по умолчанию,, если пользуетесь mingw - там нужно передать какой-то (сейчас уже не помню, на форуме, кажется, это уже обсуждали) параметр.

AndreyZh: Петр пишет: Если есть доступ к к tgetlist.prg, изменить модуль и включить в состав своего приложения. bcc это позволяет делать по умолчанию,, если пользуетесь mingw - там нужно передать какой-то (сейчас уже не помню, на форуме, кажется, это уже обсуждали) параметр. В принципе данный приём знаком и им сдуру пользовался в "детстве" на клиппере... но должен буду затем отслеживать изменения исходников (смены версий xHarbour) или полностью контролировать баги данного модуля... не нравится кроме этого посмотрел исходник "у меня", где xharbour/source/wvwtools\tgetlist.prg от 2007 года и там вроде бы всё нормально: [pre2] CASE K_INS IF Set( _SET_INSERT ) Set( _SET_INSERT, .F. ) SetCursor( SC_NORMAL ) ELSE Set( _SET_INSERT, .T. ) SetCursor( SC_INSERT ) ENDIF EXIT [/pre2] Нет ли какого-нибудь способа это обойти не влазия в инструмент разработки?

Петр: AndreyZh пишет: Нет ли какого-нибудь способа это обойти не влазия в инструмент разработки? Я не знаю. AndreyZh пишет: должен буду затем отслеживать изменения исходников Это не проблема - diff, xdiff, VisualDiff, WinMerge позволят свести к минимуму ваши усилия. И раз пошла такая.., в корзинке у разработчиков Harbour (contrib), есть библиотека hbxdiff. Тут на днях один человек спрашивал, как ему обновляться с нета, так мне сильно хотелось подсказать ему. что не всегда нужно скачивать весь файл, а можно скачать так называемую заплатку (разницу, дельту) и пропатчить существующий файл (файлы). Так, с недавних пор, при обновлении поступает OS Suse, вместо традиционных rpm пакетов, для обновления используются drpm - delta-rpm ((не всегда!) Но ему и так материала для раздумий подкинули . Тем более, что на этом форуме знаю о библиотеке, наверное, только я

AndreyZh: Петр - конечно спасибо... буду знать об указанных Вами возможностях сопровоздения и обновления инструмента разработки... но, к сожалению являюсь больше спецом в прикладной области, где инструмент используется, как "черный ящик"... и надеялся, что помогут пока у одних пришлось нового технолога учить составлению технологических карт, а по другим изучать законы и пояснения по ним в плане ведения и отражения корректирующих счетов фактур... В общем спасибо за наколку - будет время детальнее разберусь и порешаю данную программисткую задачку, используя Ваши полезные примечания.

AndreyZh: Доброе утро! В общем, если кому интересно... решение проблемки, подсказанное Петром и проверенное мной: 1. Берём исходник tgetlist.prg из каталога xHarbour\source\rtl... я же ссылался на какой-то "левый" исходник tgetlist.prg каталога xHarbour\source\WvWTools 2. Копируем его в каталог проекта 3. Убираем комментарий (непонятно причину закоментированности блока, изменяющего форму курсора) - получилось: [pre2] case K_INS Set( _SET_INSERT, ! Set( _SET_INSERT ) ) ::ShowScoreboard() /* 2007/SEP/24 - EF - Toggle cursor shape at insert mode on/off * Uncomment it, if you want this behaviour.*/ if ::nSaveCursor != SC_NONE ::nSaveCursor := if( Set(_SET_INSERT), SC_INSERT, SC_NORMAL ) endif [/pre2] 4. Подключаю модули в проект, просто добавив его в сборку: [pre2] OBJFILES = $(OBJ)\LS.obj $(OBJ)\TGETLIST.obj $(OBJ)\ACCOUNT.obj $(OBJ)\CASH_ORD.obj .... PRGFILES = LS.PRG TGETLIST.PRG ACCOUNT.PRG CASH_ORD.PRG ... [/pre2] и усё! форма курсора начала переключаться.

TimTim: AndreyZh пишет: ... непонятно причину закоментированности блока, изменяющего форму курсора ... Возможно это, опять таки, для совместимости с Clipper, а в Clipper для совместимости с dBase-системами, исконное поведение которых, при нажатии клавиши Insert не в изменении формы курсора, а появлении сообщения об этом. А вот будет сообщение появляться или нет зависило от SET SCOREBOARD. Кстати, пример "наследования" исконного поведения - утилита DBU.

Softlog86: А у меня в HARBOUR + MiniGUI в полях ввода данных (EDITBOX , GETBOX) - форма курсора не меняется - поэтому вопросы : 1) Как сделать визуализацию режима ввода ( ВСТАВКА/ЗАМЕЩЕНИЕ) ? 2) Принудительная смена режима - какой командой ?

gfilatov2002: Softlog86 пишет: в HARBOUR + MiniGUI в полях ввода данных (EDITBOX , GETBOX) - форма курсора не меняется GETBOX поддерживает смену формы курсора (см. функцию _SetGetBoxCaret() ) при нажатии клавиши <Insert>



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