Page 19 of 50

Posted: Sat Jul 23, 2011 10:49 am
by DV
VladSh wrote:"текущее слово" должно определяться, если курсор вплотную к нему, точка ж ведь разделить, а не часть слова..
Сейчас (и уже довольно давно) сделано так:

Code: Select all

int nLine0, nLine1;

nLine0 = (int) SendMessage(hEdit, EM_EXLINEFROMCHAR, 0, cr.cpMin);
// cr.cpMin = (word begin)
cr.cpMin = (INT_X) SendMessage(hEdit, EM_FINDWORDBREAK, WB_LEFT, cr.cpMin + 1);
nLine1 = (int) SendMessage(hEdit, EM_EXLINEFROMCHAR, 0, cr.cpMin);
if ( nLine1 == nLine0 )
{
  // cr.cpMax = (word end)
  cr.cpMax = (INT_X) SendMessage(hEdit, EM_FINDWORDBREAK, WB_RIGHTBREAK, cr.cpMin);
  SendMessage( hEdit, EM_EXSETSEL_X, 0, (LPARAM) &cr );
}

Тонкость вот в чём: каретка может находиться где-то в середине слова - тогда начало слова будет левее, а конец - правее каретки. Ситуация с разделителем справа от текущего слова почему-то попадает в эту же категорию (EM_FINDWORDBREAK с WB_LEFT возвращает позицию начала слова слева от разделителя).
Начало слова может оказаться на другой строке - в этом случае мы ничего не делаем.

> Кстати, если ли такая настройка "Если ничего не выделено и курсор не стоит на "текущем слове", то искать по предыдущему поиску"?
Так ведь именно таким образом и работает (если ничего не выделено). Ну а если не хочется, чтобы подхватывалось новое выделенное слово, снимаем галочку "Подхватывать выделенный текст".

> Можно ли сделать так, чтобы в QSearch.ini можно было задавать цвет без этих 2-х нулей, а то оно жутко сбивает?..
Нет. Используется стандартная ф-ция AkelPad для чтения двоичных данных, а она читает или указанное число байт (4) или ничего. И в документации написано именно так:
QSearch-Rus.txt wrote: color_notfound = FFE0E000
Цвет фона, который устанавливается в случае, когда искомый текст не
найден. Этот цвет задается в виде "RRGGBB00", где RR, GG и BB - это
шестнадцатиричные значения красного, зеленого и синего цветов (от 00
до FF).

Posted: Sat Jul 23, 2011 5:54 pm
by VladSh
DV wrote:Тонкость вот в чём: каретка может находиться где-то в середине слова - тогда начало слова будет левее, а конец - правее каретки. Ситуация с разделителем справа от текущего слова почему-то попадает в эту же категорию...
Поведение того скрипта, что я приводил выше, лишено таких странностей, хотя он поддерживает все необходимые варианты выделения: в середине слова, с левой части слова (сразу перед словом) и с правой части слова (сразу после слова). Я видимо не понял, в чём тонкость...
DV wrote:> Кстати, есть ли такая настройка "Если ничего не выделено и курсор не стоит на "текущем слове", то искать по предыдущему поиску"?
Так ведь именно таким образом и работает (если ничего не выделено). Ну а если не хочется, чтобы подхватывалось новое выделенное слово, снимаем галочку "Подхватывать выделенный текст".
Как-то мы, наверное, не поняли друг друга..
Галка на "Подхвате" стоит, после поиска устанавливаю текст на строку на, которой ничего нет, жму F3 - ничего не происходит (не ищет). Так я и спрашиваю за это, есть ли настройка, которая будет либо так и делать - ничего не искать либо будет использовать предыдущий поиск? И если нет, то может как-то можно настроить "на куда-нибудь" горячую клавишу "поискать по предыдущему поиску"?

Ещё. Если F3 назначить на SelFindNext, то подхвата выделенного текста в окошко не происходит, хотя галка "Подхвата" включена. Что ожидается:
- при закрытом окне плага при нажатии F3 производится поиск (это есть);
- при нажатии F3, когда окно плага открыто, нажатие F3 будет перехватываться окном плага и работать так как бы не было назначено F3 на SelFindNext, т.е. производится бы подхват.
Это было бы удобно.

Posted: Sat Jul 23, 2011 6:21 pm
by DV
VladSh wrote:Если F3 назначить на SelFindNext, то подхвата выделенного текста в окошко не происходит, хотя галка "Подхвата" включена.
QSearch-Rus.txt wrote: "Поиск: Подхватывать выделенный текст"
srch_pickup_selection = 1
При вызове QSearch или при нажатии F3 в окне редактирования AkelPad,
в строку поиска QSearch вставляется текст, выделенный в окне
редактирования AkelPad.
srch_pickup_selection = 0
При вызове QSearch, текст в строке поиска не изменяется.

"Поиск: SelFind подхватывает выделенный текст"
srch_selfind_pickup = 0
Вызов SelFindNext или SelFindPrev не меняет текст в строке поиска
панели QSearch.
srch_selfind_pickup = 1
Вызов SelFindNext или SelFindPrev вставляет в строку поиска панели
QSearch текст, выделенный в окне редактирования AkelPad
.

Posted: Sat Jul 23, 2011 6:33 pm
by VladSh
DV
То дёргаешь RTФакинг (на самом деле приличный) Мануал, а то забываешь.. и когда надо бы не забыть, то вот, нате вам )))
По этому вопросу srch_selfind_pickup = 1 помог спасибо :)

Posted: Sun Jul 24, 2011 10:25 am
by DV
VladSh wrote:"текущее слово" как-то так должно определяться: WordCaretSelect.js
Вроде, работает, в рот мне ноги. Похоже, что при реализации данной фичи в QSearch этот скрипт ещё не был доведен до совершенства, и мне пришлось выдумывать что-то своё. Теперь буду использовать код скрипта.

Posted: Tue Jul 26, 2011 1:55 pm
by DV
QSearch v.4.4
+ улучшена реализация doSelectCurrentWord для SelFindNext/Prev (взята из "WordCaretSelect.js" by FeyFre & VladSh)

Posted: Thu Nov 17, 2011 8:59 am
by Cuprum
Кнопка "Панель поиска" в панели инструментов позволяет только включить поисковую строку снизу окна. При повторном нажатии на кнопку строка поиска поиска не исчезает. Хотелось бы, чтобы с помощью этой кнопки можно было и включать и выключать поисковую строку (по аналогии с кнопкой "Панель проводника").

Posted: Thu Dec 15, 2011 7:56 pm
by DV
QSearch v.4.6
* для AkelPad 4.7.1+
+ поддержка внутреннего языка AkelPad

Posted: Tue Feb 07, 2012 9:51 am
by Infocatcher
Что-то у меня после сворачивания-разворачивания окна стала чернеть кнопка закрытия панели поиска.

Запускаемся.
Показываем панельку хоткеем.
Переводим фокус обратно на документ.
Снова запускаем поиск хоткеем (фокус переходит на панельку).
Сворачиваем окно AkelPad'а и сразу же разворачиваем обратно – кнопка черная.

Хоткей назначен в диалоге настройки плагинов.

Code: Select all

[Options]
srch_onthefly_mode=1
srch_from_beginning=0
srch_use_specialchars=1
srch_pickup_selection=1
srch_stop_eof=0
srch_wnd_dockedtop=0
edit_focus_selectall=1
catch_main_f3=0
catch_main_esc=0
hotkey_closes_wnd=0
dock_rect_disabled=0
dock_rect=00000000700200001C0200001A000000
color_notfound=FFE0E000
srch_selfind_pickup=0
color_highlight=FFFF9900
highlight_mark_id=1001
highlight_state=10
color_eof=E4FFE400
use_alt_hotkeys=1
alt_match_case=67
alt_whole_word=87
alt_highlight_all=72
find_history_items=15
history_save=1
editor_autofocus=10

Posted: Tue Feb 07, 2012 11:50 am
by DV
Infocatcher wrote:Что-то у меня после сворачивания-разворачивания окна стала чернеть кнопка закрытия панели поиска
Магия? По описанию не воспроизводится (под Windows 7). Хорошо бы увидеть видеозапись проблемы - например, через UVScreenCamera.

Posted: Tue Feb 07, 2012 12:00 pm
by Instructor
DV
В 4.7.3:
AkelDLL.h wrote:AKD_SETBUTTONDRAW
_________________

Draw icon or bitmap on button.

(HWND)wParam == button handle. Button must have BS_OWNERDRAW style.
(BUTTONDRAW *)lParam == pointer to a BUTTONDRAW structure. If NULL, button draw processing will be removed.

Posted: Tue Feb 07, 2012 12:30 pm
by DV

Code: Select all

CONTROL "", IDC_BT_CANCEL, "Button", WS_VISIBLE | WS_CHILD | BS_FLAT | 
            BS_BITMAP | BS_PUSHBUTTON | BS_OWNERDRAW | BS_CENTER | BS_VCENTER, 4, 3, 10, 10
Может, сама структура BUTTONDRAW поменялась?

Posted: Tue Feb 07, 2012 12:53 pm
by Instructor
DV
Флаг BS_BITMAP не требуется.

Posted: Tue Feb 07, 2012 1:07 pm
by DV
Instructor wrote:Флаг BS_BITMAP не требуется.
В смысле, убрать его - и это решит дефекты прорисовки?

Posted: Tue Feb 07, 2012 1:24 pm
by DV
Похоже на то, что AKD_SETBUTTONDRAW в 4.7.3 почему-то стал конфликтовать с btnWndProc в QSearch.

добавлено: Хотя нет, дело не в этом. Выглядит так, будто кнопка не полностью перерисовывается, появляясь при показе диалога QSearch на том месте, где только что была кнопка промотки горизонтального скроллбара AkelEdit.

добавлено позднее: Хотя нет :) Похоже, дело в BM_SETSTYLE в коде QSearchDlg.c, который не содержит BS_OWNERDRAW.