Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Новый взгляд на выделение текста, По крайней мере для меня 
:(
    Опции темы
AlexLogos
Дата 30.10.2010, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Доброго времени суток! Сегодня субота а у меня мозги уже набекрень сьехали от работы.
Хочу сделать следующую вещь: в комбобокс ввожу значение, по мере набора буковок из базы данных выбираются похожие слова, они записываются в итемсы этого комбобокса. Первая запись подставляется в текст комбобокса при чем виделяется та часть которая еще не введена.
Вот текст процедуры на изменение текста в комбобоксе:
Код

procedure TForm1.CBLookValueChange(Sender: TObject);
var i:integer;
begin
  textn:=Length(CBLookValue.Text)-CBLookValue.SelLength;
  Memo2.Lines.Add(IntToStr(textn));
  if (textn>0)and(CBLookValue.SelLength=0) then
  with OQTemp do
   begin
     Active:=False;
     SQL.Clear;
     SQL.Add('select text from '+Clas+' where text like '''+CBLookValue.Text+'%'' group by text order by text');
     Memo2.Lines.Add(SQL.Text);
     ExecSQL;
     if RecordCount>0 then
      begin
        CBLookValue.Items.Clear;
        First;
        for i := 0 to RecordCount - 1 do
         begin
          CBLookValue.Items.Add(Fields[0].AsString);
          Next;
         end;
        CBLookValue.Text:=CBLookValue.Items.Strings[0];
        CBLookValue.SelStart:=textn;
        CBLookValue.SelLength:=Length(CBLookValue.Text)-textn;
        Memo2.Lines.Add(IntToStr(Length(CBLookValue.Text)-textn));
        Memo2.Lines.Add(IntToStr(CBLookValue.SelStart));
      end;
   end;
end;

В чем проблема? Проблема в том что курсор после выделения становится в конец текста. При этом возникают трудности с вводом текста в комб - стереть запись, если найдены данные для подстановки, бекспейсом трудновато. Подскажите как это решить, как постаить курсор на свое место. И еще: при CBLookValue.Text:=CBLookValue.Items.Strings[0]; опять возникает собитие на изменение текста - это тоже не нужно. Вот мозги запарились - нифига уже и не могут. Помогите плиз...
PM MAIL   Вверх
CROTishka
Дата 3.11.2010, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: 1
Всего: 2



а) такие вещи делаются ТОЛЬКО отдельным потоком!
б) новый поток запускай только после выполнения или насильственной остановки старого (чтобы не долбать базу запросами "в молоко")
в) (опционально) еще повесь таймер после изменения на запуск потока (300-500мс), чтобы если что-то быстро стирается, или вводится, чтобы не мешать

Добавлено через 7 минут и 41 секунду
еще нюансы (просто придираюсь): 
в нотифай эвентах обращайся к объекту только по сендеру (в твоем случае по TComboBox(Sender) )
лучше создай класс-потомок от TComboBox с блэкджэком со своей собственной кверей и т.д.
а еще лучше поищи готовое решение на http://torry.net/ или где-нибудь ещё - такую задачу однозначно уже решали до тебя, и допили под себя.
PM MAIL   Вверх
MacTep
Дата 4.11.2010, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Мне было бы тоже интересно узнать решение данного вопроса.
И если честно, вручную изобретать бы не хотелось, конечно. Реально, думаю, есть какие-нибудь компоненты уже под это дело. Вот только как бы их найти smile


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
AlexLogos
Дата 5.11.2010, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Хорошо, попробую. С потоками еще не работал, поэтому как-то мне сложно все это представить. Поищу решение - когда найду - сюда выложу.
PM MAIL   Вверх
MacTep
Дата 5.11.2010, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: 4
Всего: 4



Цитата(AlexLogos @  5.11.2010,  10:41 Найти цитируемый пост)
Поищу решение - когда найду - сюда выложу. 

Это было бы просто мега!


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.