Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.09.2011, 14:45
Аватар для Voron
Voron Voron вне форума
Новичок
 
Регистрация: 16.09.2010
Сообщения: 61
Репутация: 10
По умолчанию Ctrl+Space в RichEdit?

Доброго времени суток.
Подскажите пожалуйста, как в RichEdit реализовать механизм, как в редакторе кода. То есть я пишу например SEL нажимаю Ctrl+Space и появляется список с возможными продолжениями SELECT допустим, я вибираю пункт списка и вместо SEL появляется в тексте SELECT.
Заранее спасибо!
Ответить с цитированием
  #2  
Старый 04.09.2011, 14:57
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вы хотите именно реализовать сами это действо или вам важен результат?
Если второе, то просто воспользуйтесь готовыми компонентами, например такой сервис реализован в TMS-компонентах
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 04.09.2011, 19:23
einstein einstein вне форума
Начинающий
 
Регистрация: 02.09.2010
Адрес: Город
Сообщения: 143
Репутация: -4653
По умолчанию

в событии онкейдаун отлавливаешь контрол+пробел
узнаешь позицию каретки
получаешь слово перед кареткой до первого не буквенного символа
заполняешь листбокс его значениями
делаешь листбоксу визибле в трю
в событии ончендж листбокса делаешь ему фальш
в ричедит вставляешь с заменой текст из листбокса
Ответить с цитированием
  #4  
Старый 04.09.2011, 20:43
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

[offtop]Эйнштейн, твою дивизию! Честно, заколебал писать не просто английские, а "программерские" слова на русской раскладке.[/offtop]

Voron, занимался я подобным. Ничего сложного нету, но в паре мест очень любопытные загвоздки бывают. Если любитель, то не советую лезть, юзай готовые решения, а если уже считаешь себя профессионалом - берись, тут поможем, если запутаешься.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #5  
Старый 05.09.2011, 08:36
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

можно посмотреть открытые ide типа pyscripter или rde
в первом используются компоненты вокруг tsynedit
ещё есть какой-то synedit в lazarus и там он на первый взгляд по-мощнее

Последний раз редактировалось Pyro, 05.09.2011 в 08:41.
Ответить с цитированием
  #6  
Старый 05.09.2011, 08:58
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Pyro, во-первых, SynEdit это редактор с поддержкой подсветки синтаксиса и кучей дополнительных фич, однако того, что хочет ТС, я в нём не видел.
Во-вторых, Lazarus, если на то пошло - аналог Delphi под Linux. И тут он всяко никаким боком.

Так что не путай тут никого...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #7  
Старый 05.09.2011, 10:14
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

я както мини-иде делал до авто-комплита дело не дошло, но tsynautocomplete где-то видел
lazarus это не kylix, а он открытый и кросс-платформенный и там насколько я понял ихний-же tsynedit используется самим-же lazarus-ом, поэтому должен быть круче дельфовского, но в лазарус с delphi я не решился переходить
Ответить с цитированием
  #8  
Старый 07.09.2011, 14:40
Аватар для Voron
Voron Voron вне форума
Новичок
 
Регистрация: 16.09.2010
Сообщения: 61
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Вы хотите именно реализовать сами это действо или вам важен результат?
Если второе, то просто воспользуйтесь готовыми компонентами, например такой сервис реализован в TMS-компонентах
Хочу реализовать сам. В принципе механизм понятен. Хотел бы просто знать как получить координаты корретки (позицию курсора) в RICHEDIT в пикселях.
Ответить с цитированием
  #9  
Старый 07.09.2011, 14:43
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

В общем примерно так:
Код:
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.
Ответить с цитированием
  #10  
Старый 07.09.2011, 16:54
Аватар для Voron
Voron Voron вне форума
Новичок
 
Регистрация: 16.09.2010
Сообщения: 61
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
В общем примерно так:
Код:
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;.

Благодарю!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:06.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter