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





Пост N: 480
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 24.12.15 18:43. Заголовок: Как сохранить K_TAB внутри MEMOEDIT() ?


Добрый день.

Ситуация:
------------
1) Юзер копирует в буфер обмена windows несколько строк/столбцов информации из Excel.
2) Переключается в окно программы и в MENOEDIT() вставляет через Ctrl+V информацию из буфера обмена. Строки разделяются стандартными CRLF, столбцы - K_TAB = CHR(9). Редактор преобразует все символы табуляции на нужное кол-во пробелов.
3) Далее выходит из MEMOEDIT(), информация из этого окна передается на дальнейшую обработку как очень длинная текстовая переменная.
--
Вопрос: "съеденные" символы табуляции оооочень помогли-бы в разборе полученной информации. Нужно их как-то сохранить или заменить на что угодно - хоть CHR(0), хоть CHR(255) - внешний вид строк в окне редактора особо никого не волнует. Как к этому подступиться? Либо получить как-то сам буфер обмена и в нем сделать CHARREPL() перед вставкой в редактор. Либо пошаманить в редакторе. Посмотрел MEMOEDIT() -> HBEDITOR() -> Edit(nPassedKey) со всеми остановками...

Дописать свой класс канешно можно, но есть ли лучший вариант? Стыдно признаться, краем уха слышал про наследование, но так ни разу его и не использовал...

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


администратор




Пост N: 5428
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.12.15 18:58. Заголовок: В Memoedit не уверен..


В Memoedit не уверен что сможешь контролировать нажатие CTRL+V
В HbEditor можно. И вот в нем можно сделать что типа замены chr(9) в
hb_gtInfo( HB_GTI_CLIPBOARDDATA ) на что то свое
Какой нить charrepl над hb_gtInfo( HB_GTI_CLIPBOARDDATA ) и затем hb_keyins

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





Пост N: 481
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 24.12.15 19:04. Заголовок: Dima пишет: В Memoe..


Dima пишет:

 цитата:
В Memoedit не уверен что сможешь контролировать нажатие CTRL+V
В HbEditor можно. И вот в нем можно сделать что типа замены chr(9) в
hb_gtInfo( HB_GTI_CLIPBOARDDATA ) на что то свое



У меня стоит "глобальный" обработчик каждого нажатия: HB_GTInfo( HB_GTI_INKEYFILTER, { | nKey | KeyDriver(nKey) } )
В нем уже прописано:
 
FUNC KeyDriver(nKey) // обработчик всех кнопок в программе!
....
SWITCH nKey
//
CASE K_INS // проверяем на вставку из буфера
IF ShiftPressed() .OR. CtrlPressed() // Shift+Ins или Ctrl+V ?
// вставляем из буфера:
hb_GtInfo( HB_GTI_CLIPBOARDPASTE )
nKey := 0 // остальное не нужно
ENDIF
EXIT
...
Так что Ctrl+V или Shift+Ins работают во всей программе "как нужно", включая GET/MEMOEDIT/BROWSE и тп...

А вариант с hb_GtInfo(HB_GTI_CLIPBOARDDATA) - похоже то, что доктор прописал.

tmp := hb_GtInfo(HB_GTI_CLIPBOARDDATA)
hb_GtInfo(HB_GTI_CLIPBOARDDATA,CHARREPL(CHR(9),tmp,CHR(254)))
hb_GtInfo( HB_GTI_CLIPBOARDPASTE )

Спасибо!

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



Пост N: 169
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 24.12.15 19:09. Заголовок: буфер MEMOEDIT


Буфер легко получить и так..
переокрыть MEMOEDIT - по нужной клавише ,например
признаки lexit , lrepl - можно переопределять в пользовательской функции user_memo

cBufer:=...
lexit:=.f.
lrepl:=.f.
do while !lexit

cBufer:=MEMOEDIT(cBufer,,,"user_memo",,,)
if lrepl
// здесь замена cBufer
endif
lexit :=(lastkey()=K_ESC)// .or. ...
if lexit; exit;endif
enddo


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





Пост N: 482
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 25.12.15 00:44. Заголовок: petr707 пишет: Буфе..


petr707 пишет:

 цитата:
Буфер легко получить и так..
переокрыть MEMOEDIT - по нужной клавише ,например
признаки lexit , lrepl - можно переопределять в пользовательской функции user_memo



Либо я не понял идею, либо не получится.
MEMOEDIT(), да и в целом класс HBEDITOR() сразу заменяет табуляции на нужное число пробелов.
После выхода из MEMOEDIT() - как понять, в каком именно месте текстовой переменной должны быть табуляции ?

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



Пост N: 170
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 25.12.15 09:01. Заголовок: Тект примера для илююстрации


<Shift+F6> вставка с заменой K_TAB на "!"
<F2> сохранить в файл test.txt
Текст примера (форум немного испортил текстовые комментарии)
Скрытый текст


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

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