Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > SynUniHighlighter и SynEdit > Заморочки с SynCompletionProposal. |
Автор: Fenix 13.7.2006, 21:31 |
Доброго вромени суток. У меня возникла маленькая проллемка с SynCompletionProposal. В общем когда вызываю сочитанием кнопок все норм... А когда хочу програмно вызвать это окошко, то выскакивает ошибка, или оно неправильно работате... То не заменят символы, то выкидывает ошибку... в общем я вызываю так SynCompletionProposal1.Activate. Может подругому надо вызывать? или доп действия надо перед вызовом? Подскажите кто с этим сталкивался ![]() |
Автор: Sep. 14.7.2006, 17:49 |
я вызываю через acNames.ActivateCompletion; InsertList и ItemList заполнены заранее, компилится на основе SynMix работает вроде нормально. |
Автор: Fenix 14.7.2006, 22:27 |
У меня возник еще один вопрос. Где в компоненте SynCompletionProposal1 хранятся символы введенные с клавиатуры? Просто когда я пишу SunEdit1.SelText='<'; то SynCompletionProposal1 игнорирует..... значит он внутри себя хранит их... |
Автор: Fenix 15.7.2006, 14:49 |
С этой проблемой разобрался, но всеравно но всеравно надо узнать какое событие срабатывает, когда нажимаю кнопку и SynCompletionProposal1 активен. Т.к. у SynEdit KeyDown несрабатывает в это время... А onCodeCompletion срабатывает только после закрытия. Хотя и хранит все введенные символы... |
Автор: Sep. 16.7.2006, 09:27 |
Перехватывать последнюю введеную кнопку можно только подправя исходники SynEdit. Нажатия обрабатываются в форме CodeCompletitionList'a и текущая строка в SynEdit всегда отстает на одну букву. Поэтому тут onKeyDown не поможет, хоть в SynEdit, хоть на форме. Если очень надо, то можно ловить через WinAPI но зачем? Подменить InsertList в то время как он выводится ты не сможешь, его все равно надо будет рефрешить. Расскажи что ты хочешь сделать, тогда тебе будет проще помочь. |
Автор: Fenix 16.7.2006, 09:37 |
В общем что я хочу... Я делаю прогу для создания HTML страниц... Сделал, что бы он автоматически открывался когда пользователь нажимает '<'. И хочу сделать что бы автоматически закрывался когда пользователь нажмет '>'. Т.е. я его делаю как помошник, как в делфи окно... но без нажатия на Enter... Тоесть пользователь может выбрать из списка, или если не хочет то просто ввести с клавиатуры... Но когда вводишь с клавиатуры, окно после > не закрывается, и следовательно при следующем теге не открывается.... Мне надо отследить символ > и вызвать SynCompletionProposal1.CancelCompletion. Подскажи как можно это реализовать... |
Автор: Sep. 19.7.2006, 14:34 |
А ты пробовал просто в SynCompletionProposal.EndOfTokenChar добавить символ '>' ? =) |
Автор: Fenix 19.7.2006, 14:50 |
Не подходит.... Т.к. допустим у меня не все теги будут в SynCompletionProposal. И например у меня там не будет тега <b> (но будет тег <br>) а мне надо его ввести.... и получится откроется окошко я ввожу <b и когда введу символ '>', то он не закроет просто окно, а заменит тег <b> на <br>..... так что мне надо просто закрыть окно, без замены.... Добавлено @ 14:55 А можно какнить узнать сколько в данный момент отображается во всплывающем окне строк? Просто допустим поставить условие, когда 0, то закрыть... |
Автор: Sep. 20.7.2006, 12:59 |
То что ты хочешь можно только правя SynEdit. Точно место не подскажу, но например я в procedure TSynBaseCompletionProposalForm.KeyPress убрал срабатывание AutoComplete по Space (#32). Можешь начать оттуда, это файл SynCompletionProposal.pas |