Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ComboBox [D5]


Sergey-ZZZ ©   (2002-09-12 14:20:00) 

Подскажите. Нужно сделать так чтобы при вводе буквы в ComboBox лист ComboBox скортировался и указатель становился на первое вхождение этой буквы и так по второй и т.д.


Демонов Е.В.   (2002-09-12 16:16:00) [1]

Не довелось мне на D5 работать


Alx2   (2002-09-12 16:13:00) [2]

>Демонов Е.В. © (12.09.02 16:10)
У человека D5


Демонов Е.В.   (2002-09-12 16:10:00) [3]

Такое поведение стандартно
// надо только некоторые свойства .... вспомнил
AutoComplite // кажеться так и ещё такм одно свойство было, в итнспекторе рядом находиться // они както в паре работают


Smithson   (2002-09-12 16:06:00) [4]

У меня это сделано так:

var S,s1: String;
i: Integer;
bBegin
// Если объект не в фокусе - не надо нам клавиатуры!
if not (Sender as TWinControl).Focused then exit;
// Вводят начало строки....... идиоты
if Upper(Sender.ClassName) = "TCOMBOBOX" then begin
// Ну ладно уж....
if (Key = #13) and (TComboBox(Sender).DroppedDown) then begin // Enter нажали
I := TComboBox(Sender).ItemIndex;
TComboBox(Sender).DroppedDown := False;
TComboBox(Sender).Text := TComboBox(Sender).Items[I];
end;
if (Key < " ") then exit;

s1 := TComboBox(Sender).SelText;
S := TComboBox(Sender).Text+Key;
if s1 > "" then begin
System.Delete(S,Pos(s1,s),Length(s1));
end;

if not TComboBox(Sender).DroppedDown then TComboBox(Sender).DroppedDown := True;
for i := 0 to TComboBox(Sender).Items.Count-1 do
if CmpLines(S,TComboBox(Sender).Items[i]) then begin
TComboBox(Sender).ItemIndex := i;
Key := #0;
TComboBox(Sender).Text := S;
TComboBox(Sender).SelStart := 300;
exit;
end;
end;
End;

function CmpLines(L1,L2: String): Boolean; // True, если начало одной строки равно другой
var i, j: Integer;
begin
j := Length(L1);
if j > Length(L2) then j := Length(L2);

Result := False;
if J < 1 then exit;

L1 := Upper(L1);
L2 := Upper(L2);

for i := 1 to J do
if L1[i] <> L2[i] then exit;

Result := True;
end;


Kaban   (2002-09-12 14:53:00) [5]

на королевсетве такой компонент видел, что-то типа IECombobox


Alx2   (2002-09-12 14:49:00) [6]

В D6 такое поведение наблюдается у стандартного комбобокса.
Если хочешь, вышлю stdctrls от D6, где посмотришь как это делается на прмере TCustomComboBox.


Наверх

Титульная страница Поиск, карта сайта Написать письмо