On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
администратор




Пост N: 936
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.10.08 13:24. Заголовок: Memoedit


В Clipper этот код работает
repl prime with memoedit(prime,11,11,18,69,.t.,"myfunc",58)

*****************************
func myfunc()
local key:=lastkey()
do case
case key ==-1
keyboard chr(23)
return 0
endcase
return 0

Жмем F2 , окно редактирования закрывается и данные сохраняются.
В Xharbour ни чего не просиходит. Как решить проблемку ?

ЗЫ
Если нажать CTRL_W то работает , но хотелось бы запись повесить на свою кнопку

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 20 [только новые]


постоянный участник




Пост N: 694
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.10.08 16:46. Заголовок: Посмотри "мемоэд..


Посмотри "мемоэдит" по справке хХарбора !
У меня работает своя функция, тоже по F2.....

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 943
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.10.08 16:59. Заголовок: Andrey пишет: Посмо..


Andrey пишет:

 цитата:
Посмотри "мемоэдит" по справке хХарбора !
У меня работает своя функция, тоже по F2.....


Тогда пример покажи.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 504
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 05.10.08 17:33. Заголовок: Вот если верить этом..


Вот если верить этому самому примеру - вы должны написать что-то вроде

#include "Inkey.ch"
#include "Memoedit.ch"


FUNCTION myfunc() 
LOCAL nKey := LastKey()
LOCAL nRet := ME_DEFAULT

DO CASE
CASE nKey IN { K_ALT_W, K_CTRL_W, K_ESC }
nRet := ME_IGNORE // ignore default termination keys

CASE nKey == K_F2
nRet := K_ALT_W // Save with F2

CASE nKey == K_ALT_C
nRet := K_ESC // Cancel with Alt+C
ENDCASE
//
RETURN nRet


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 946
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.10.08 09:09. Заголовок: Петр Спасибо !!!!!!..


Петр
Спасибо !!!!!!!!

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 15
Зарегистрирован: 01.04.12
ссылка на сообщение  Отправлено: 07.04.12 19:15. Заголовок: to Andrey end Dima


Dima пишет:

 цитата:
repl prime with memoedit(prime,11,11,18,69,.t.,"myfunc",58)

*****************************
func myfunc()
local key:=lastkey()
do case
case key ==-1
keyboard chr(23)
return 0
endcase
return 0



Что-то подобное я читал у Рика Спенса "Программирование на клиппер", только там сложнее. Меня интересует не F2! Мне ОЧЕНЬ нужно, чтобы при нажатии esc введенные данные в мемополе сохранились в переменную, используемую далее с выводом на печать. Именно чтобы при Esc сохранялись данные! Не F2, не Ctrl-W, только ESC!!!

Нельзя ли прописать так?
case key ==23
keyboard chr (27)

Я хочу добиться одного, чтобы при нажатии Esc (23) в буфер уходила команда на запоминание мемополя (27), то бишь Ctrl-W. И еще, обязательно ли в начале подпрограммы прописывать #include ... ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 16
Зарегистрирован: 01.04.12
ссылка на сообщение  Отправлено: 07.04.12 19:27. Заголовок: to Петр


Петр пишет:

 цитата:
#include "Inkey.ch"
#include "Memoedit.ch"


FUNCTION myfunc()
LOCAL nKey := LastKey()
LOCAL nRet := ME_DEFAULT

DO CASE
CASE nKey IN { K_ALT_W, K_CTRL_W, K_ESC }
nRet := ME_IGNORE // ignore default termination keys

CASE nKey == K_F2
nRet := K_ALT_W // Save with F2

CASE nKey == K_ALT_C
nRet := K_ESC // Cancel with Alt+C
ENDCASE
//
RETURN nRet



или так, к примеру можно?


#include "Inkey.ch"
#include "Memoedit.ch"


FUNCTION myfunc()
LOCAL nKey := LastKey()
LOCAL nRet := ME_DEFAULT

DO CASE
CASE nKey IN { K_ALT_W, K_CTRL_W, K_ESC }
nRet := ME_IGNORE // ignore default termination keys

CASE nKey == K_ESC
nRet := K_CTRL_W // Save with ESC end cancel

CASE nKey == K_ALT_C
nRet := K_ESC // Cancel with Alt+C
ENDCASE
//
RETURN nRet

Петр: Вот так - можно.
Освежите свои знания о использовании оператора DO CASE.




Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2335
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.04.12 21:53. Заголовок: К сожалению, функция..


К сожалению, функция memoedit из xharbour не полностью совместима с клипперовским memoedit. С этой функцией в harbour дело обстоит еще хуже, чем в xharbour.
Но клипперовский mtmoedit - это атавизм от ранних версий клиппера, summer'87
В xHarbour/Harbour для просмотра/редактирования текста есть класс HBEditor. С помощью это класса в харборе делается попытка эмулировать поведение memoedit
Я сторонник немного другого подхода, а именно - использование непосредственно этого класса.

Вот небольшой пример:

oEd := HBEditor():New( ct, nTop, nLeft, nBottom, nRight, ;
.t., nLen, nTab )
//oEd:MemoInit()
oEd:RefreshWindow()
while ! oEd:lExitEdit
nKey := Inkey(0, 255)
if bUser # nil
nKey := Eval(bUser, nKey)
endif
oEd:Edit( nKey )
enddo


bUser - этот блок кода, которому в качестве параметра передается нажатая клавижа, для ее специальной обработки. Это вместо пользовательской функции memoedit

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 19
Зарегистрирован: 01.04.12
ссылка на сообщение  Отправлено: 08.04.12 12:27. Заголовок: to Петр


То есть я могу до вызова memoedit(), обратиться к "своей" функции myfunc() и она позволит завершить редактирование мемополя Esc-ом с сохранением занесенного в переменную?! Вот как ты тут мне подправил недавно... А на счет "освежите"... Побойтесь Бога! Я клиппер-то изучал на коленке методом "научного тыка"... А первые попытки были сделаны в возрасте за 30 на "Партнере ВЦ-01" у которого вместо винта был магнитофон кассетный, в вместо монитора - телевизор (отечественные, разумеется!)... Я уж год как пенсию получаю, освежать уже вообще скоро нечем будет!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1084
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 08.04.12 13:53. Заголовок: Додик пишет: То ест..


Додик пишет:

 цитата:
То есть я могу до вызова memoedit(), обратиться к "своей" функции myfunc()


К ней не нужно обращаться непосредственно - memoedit сама вызовет myfunc.
Самодостаточный пример
Скрытый текст



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1085
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 08.04.12 14:01. Заголовок: Додик пишет: А на ..


Додик пишет:

 цитата:
А на счет "освежите"...


Это все лирика - учиться никогда не поздно, мозг и память нужно тренировать в любом возрасте и в любой доступной форме.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 20
Зарегистрирован: 01.04.12
ссылка на сообщение  Отправлено: 08.04.12 15:59. Заголовок: спасибо!


Петр, спасибо. Буду пытаться. И освежать и писать. О результатах доложу. Если не задолбал, конечно!

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4750
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.04.15 16:04. Заголовок: В функции пользовате..


В функции пользователя MEMOEDIT необходимо каждые
10 секунд опрашивать некую базу.
Это работает пока кнопки нажимаются , кнопки не давяться
и нет опроса базы.
Не пойму как выкрутится.
Повесить перед MEMOEDIT что то типа HB_IDLEADD c функцией
опроса этой базы не предлагать

PS
Проехали. Переделал через HBEDITOR , в топку MEMOEDIT.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4117
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.04.15 22:21. Заголовок: Dima пишет: В Clipp..


Dima пишет:

 цитата:
В Clipper этот код работает


Я тоже с этим столкнулся. Переделал как в хелпе пишут:
#include "Inkey.ch"
#include "Memoedit.ch"
....
и т.д.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4751
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.04.15 15:31. Заголовок: Andrey пишет: Dima ..


Andrey пишет:

 цитата:
Dima пишет:

цитата:
В Clipper этот код работает


Ты не смотришь на дату когда вопрос был задан Это было 7 лет назад.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 201
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 27.03.19 12:44. Заголовок: Где можно посмотреть..


Где можно посмотреть документацию на класс HBEDITOR() ?
Можно в нем выделять фрагменты текста и перемещаться по строкам ?
Какой допустимый размер текста он поддерживает ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3834
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.03.19 13:23. Заголовок: Насчет доки не скажу..


Насчет доки не скажу, может где-то и есть. Если нет - то смотреть сырцы, хотя бы список методов.
В классе HBEDITOR работы с фрагментами текста нет. Этот класс конечно бедноват.
См. contrib\xhb\xhbredit.prg, класс XHBEditor, аналогичный класс из xHarbour. Там есть и выделение текста, и еще много чего есть.
Насчет допустимого размера - вряд ли сейчас есть какое-то ограничение. Разве что 4Г для 32-х битных систем.
Размер текста безграничен в пределах разумного.

Спасибо: 1 
ПрофильЦитата Ответить
moderator


Пост N: 1172
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 28.03.19 09:26. Заголовок: Pasha пишет: См. co..


Pasha пишет:

 цитата:
См. contrib\xhb\xhbredit.prg, класс XHBEditor, аналогичный класс из xHarbour. Там есть и выделение текста, и еще много чего есть.


Выделение текста есть, но какими клавишами он копируется в clipboard, так и не понял (в исходниках не искал). "Много чего еще" тоже не заметил).
Ни help'а встроенного, ни меню. Просто чуь-чуть расширенная версия Memoedit.
Тема эта мне близка, сам пишу сейчас консольный редактор на Harbour - чтобы можно было и в приложение встроить, и использовать как реальный редактор - замену Far, mc и др. Много функций ведь и не надо, нужны только те, что реально нужны).

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 202
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 31.03.19 07:22. Заголовок: alkresin пишет: Выд..


alkresin пишет:

 цитата:
Выделение текста есть, но какими клавишами он копируется в clipboard, так и не понял (в исходниках не искал)




в исходниках:
#ifdef HB_EXT_INKEY

CASE K_CTRL_A // Select all
::SetTextSelection( "ALL" )
EXIT

CASE K_CTRL_C // Copy
hb_gtInfo( HB_GTI_CLIPBOARDDATA, ::GetTextSelection() )
// ::ClrTextSelection()
EXIT

CASE K_CTRL_X // Cut
hb_gtInfo( HB_GTI_CLIPBOARDDATA, ::GetTextSelection() )
IF ::lEditAllow
::DelTextSelection()
ENDIF
EXIT

CASE K_CTRL_V // Paste
IF ::lEditAllow
::AddText( StrTran( hb_gtInfo( HB_GTI_CLIPBOARDDATA ), Chr( 0 ), " " ), .T. )
::ClrTextSelection()
ENDIF
EXIT


а что такое #ifdef HB_EXT_INKEY ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1173
Зарегистрирован: 06.07.06
ссылка на сообщение  Отправлено: 31.03.19 13:36. Заголовок: MIKHAIL пишет: а чт..


MIKHAIL пишет:

 цитата:
а что такое #ifdef HB_EXT_INKEY ?


2013-04-26 14:31 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
+ contrib/xhb/xhbinkey.ch
+ contrib/xhb/xhbkey.c
* contrib/xhb/xhb.hbp
* contrib/xhb/xhb.hbx
+ added support for xHarbour compatible extended Inkey() key codes
This functionality works with GTs which can operate on Harbour
extended key codes which are translated at runtime to xHarbour
extended keys (HB_EXT_INKEY).

Но все равно непонятно, зачем в xhbredit.prg стоит эта проверка.
В Harbour можно вызвать Inkey() таким образом: Inkey( 0, HB_INKEY_ALL + HB_INKEY_EXT ) - в этом случае будут ловиться и события от мыши, и фиксироваться, нажаты ли вместе с основной клавишей Shift, Ctrl, Alt. В xHarbour, как я понимаю, что-то такое тоже есть, но сделано по-другому.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3835
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.04.19 16:34. Заголовок: alkresin пишет: Но ..


alkresin пишет:

 цитата:
Но все равно непонятно, зачем в xhbredit.prg стоит эта проверка.



В xHb и Harbour по разному реализована поддержка расширенных кодов.
В xHb в inkey.ch просто тупо сделаны другие коды, если определен макрос HB_EXT_INKEY. Дешево и сердито, но нет совместимости с клиппером по кодам.
В Harbour сделана отдельная расширенная кодировка: см. hbinkey.ch, и надо использовать не коды K_*, а HB_K_*
Но в сырцах модуля contrib\xhb\xhbredit.prg осталась проверка на HB_EXT_INKEY, которую Harbour не поддерживает.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 643
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет