![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Доброго времени суток.
Подскажите пожалуйста, как в RichEdit реализовать механизм, как в редакторе кода. То есть я пишу например SEL нажимаю Ctrl+Space и появляется список с возможными продолжениями SELECT допустим, я вибираю пункт списка и вместо SEL появляется в тексте SELECT. Заранее спасибо! |
|
#2
|
||||
|
||||
|
Вы хотите именно реализовать сами это действо или вам важен результат?
Если второе, то просто воспользуйтесь готовыми компонентами, например такой сервис реализован в TMS-компонентах |
|
#3
|
|||
|
|||
|
в событии онкейдаун отлавливаешь контрол+пробел
узнаешь позицию каретки получаешь слово перед кареткой до первого не буквенного символа заполняешь листбокс его значениями делаешь листбоксу визибле в трю в событии ончендж листбокса делаешь ему фальш в ричедит вставляешь с заменой текст из листбокса |
|
#4
|
||||
|
||||
|
[offtop]Эйнштейн, твою дивизию! Честно, заколебал писать не просто английские, а "программерские" слова на русской раскладке.[/offtop]
Voron, занимался я подобным. Ничего сложного нету, но в паре мест очень любопытные загвоздки бывают. Если любитель, то не советую лезть, юзай готовые решения, а если уже считаешь себя профессионалом - берись, тут поможем, если запутаешься. |
|
#5
|
|||
|
|||
|
можно посмотреть открытые ide типа pyscripter или rde
в первом используются компоненты вокруг tsynedit ещё есть какой-то synedit в lazarus и там он на первый взгляд по-мощнее Последний раз редактировалось Pyro, 05.09.2011 в 08:41. |
|
#6
|
||||
|
||||
|
Pyro, во-первых, SynEdit это редактор с поддержкой подсветки синтаксиса и кучей дополнительных фич, однако того, что хочет ТС, я в нём не видел.
Во-вторых, Lazarus, если на то пошло - аналог Delphi под Linux. И тут он всяко никаким боком. Так что не путай тут никого... |
|
#7
|
||||
|
||||
|
Цитата:
|
|
#8
|
||||
|
||||
|
В общем примерно так:
Код:
procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Coords: TPoint;
begin
if (Shift = [ssCtrl]) and (Key = VK_SPACE)
then begin
RichEdit1.Perform(EM_POSFROMCHAR, WPARAM(@Coords), RichEdit1.SelStart);
ListBox1.Left := RichEdit1.Left + Coords.X;
ListBox1.Top := RichEdit1.Top + Coords.Y;
ListBox1.Show;
ListBox1.SetFocus
end;
end;
procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
case Key
of VK_ESCAPE: ;
VK_RETURN: RichEdit1.SelText := ListBox1.Items[ListBox1.ItemIndex];
else Exit;
end;
ListBox1.Visible := False;
RichEdit1.SetFocus;
end;.Последний раз редактировалось Страдалецъ, 07.09.2011 в 15:43. |
|
#9
|
||||
|
||||
|
Цитата:
Благодарю!!! |