Форум » [x]Harbour » снова Memoedit » Ответить

снова Memoedit

Dima: Казалось бы простая задача , но.... 1. Нужен счетчик набранных символов 2. При достижении кол-ва набранных символов блочить дальнейший ввод. Есть у кого то наработки ? Спасибо !

Ответов - 10

Pasha: Вместо memoedit можно напрямую использовать класс HBEditor. MemoEdit - это рудимент из summer'87, по недоразумению унаследованный clipper 5. Вместо dbedit тогда дали нормальный класс tbrowse, а с заменой memoedit поленились. Но это дела давно минувших дней, а что касаемо наших баранов, то надо делать примерно так: oEd := HBEditor():New( cText, nTop, nLeft, nBottom, nRight, .f., nLen, nTab ) oEd:RefreshWindow() while ! oEd:ExitState() nKey := Inkey(0, 255) if bUser # nil nKey := Eval(bUser, nKey, oEd) endif // здесь можно проверить nKey - сделать счетчик и блокировать дальнейший ввод oEd:Edit( nKey ) enddo

Dima: Pasha Спасибо попробую !

Dima: Pasha пишет: if bUser # nil Пример блока кода bUser можешь привести а то мозК размяк от жары.... Сенкс.


Pasha: Я его использую к примеру для записи текста в файл. В xharbour можно сделать поиск в тексте (в Harbour - нет) Можно в word текст скинуть. Не знаю что там еще может понадобится А пример - просто проверка клавиши и какое-то действие if nKey == K_... ... Можно кстати bUser для того же счетчика использовать

Dima: А подскажи как ну скажем по нажатию F2 сохранить изменения в cText и выйти , пробовал не получилось.......

Pasha: можно примерно так: if nKey == K_F2 nKey := K_ALT_W lWrite := .t. // установить какую-то переменную endif после выхода ее проверить: if lWrite запись в файл

Dima: Для подсчета символов заюзал метод GetText() , вроде верно пашет. Его же и для записи если нужно oed:GetText() , хотя по началу пытался поймать cText

Dima: Вот что получилось . Ограничиваем ввод текста длиной не более 20 [pre2] #include "inkey.ch" proc main local oed local ctext:="" local nkey local lsave:=.f. setcolor("n/n") cls setcolor("n/w") oEd := HBEditor():New( cText, 10, 10, 20, 30, .t., 19,) oed:InsertState(.t.) oEd:RefreshWindow() while ! oEd:ExitState() nKey := Inkey(0) hb_DispOutAt(0,0,len(oed:GetText()),"n/w") if nkey==K_F2 nKey := K_ALT_W lsave:=.t. endif if (nkey>=32 .and. nkey<=255 .or. nkey==13 .or. nkey==9 ) .and. len(oed:GetText())>=20 loop endif oEd:Edit( nKey ) hb_DispOutAt(0,0,len(oed:GetText()),"n/w") enddo cls setcolor("n/w") if lsave .and. !empty(alltrim(memotran(oed:GetText()," "," "))) @ 0,0 say oed:GetText() color "gr+/r" inkey(0) endif return [/pre2] Вроде все правильно.

Dima: Косяки в последнем Memoedit и HBEditor. При наборе текста и достижении правой границы курсор не переходит на следующую строку и наборка продолжается с начала текущей строки. Получается полная каша...... Вернулся на последнюю версию с SVN ($Id: teditor.prg 18903 2013-03-07 11:39:47Z vszakats $)

Dima: Dima пишет: Косяки в последнем Memoedit и HBEditor. Починили [pre2] 2015-03-18 13:25 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rtl/teditor.prg ! resize missing text on line wrapping (issue #92) [/pre2]



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