![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В чем глюк?
Proud Berdiyan © (2002-05-01 14:54:00)-----------------------------------------------------------------
В чем глюк?
-----------------------------------------------------------------
Решил сделать алгоритм работающий как в
Internet Explorer, то есть если в Listbox-е встречается слово
совпадающее (частично или полностью) с введенным словом в Edite, то
в Edit вставляется текст из Listbox-а и выделяется вставленная часть текста.
Но начали сыпаться глюки!
Вот код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Edit1Change(Sender: TObject);
private
FPos:integer;
FCanSearch:boolean;
FSearching:boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
inherited;
Fpos:=-1;
FSearching:=false;
FCanSearch:=true;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Chr(Key) in ["A".."z","А".."Я","а".."я"] then FCanSearch:=true
else FCanSearch:=false;
inherited;
end;
procedure TForm1.Edit1Change(Sender: TObject);
var i,l:integer;
begin
inherited;
if FSearching then Exit;
if not FCanSearch then Exit;
if Text="" then exit;
l := Length(EDIT1.Text);
for i:=0 to LISTBOX1.items.Count-1 do
if Copy(LISTBOX1.items[i],1,l)=EDIT1.Text then begin
FSearching:=true;
FPos := i;
LISTBOX1.ItemIndex:=i;
FSearching := false;
EDIT1.SelStart := Length(EDIT1.Text);
EDIT1.Text := LISTBOX1.items[i];
EDIT1.SelLength := -(Length(LISTBOX1.items[i])-l);
end;
end;
end.
Теперь, в Listbox-е есть три строчки:
C:\
C:\Windows\System
SYSTEM
Запустим… все вроде нормально, когда я ввожу в edit букву S, то текст становится SYSTEM и все символы после S выделяются!
Тут проблем нету, но когда я в edit-е напишу C, то текст становится C:\Windows\System,
А ВЫДЕЛЯЕТСЯ ТОЛЬКО ДВА ЗНАКА ПОСЛЕ С - :\!!!
В чем глюк?
Помогите разобраться пожалуйста!
-----------------------------------------------------------------
Proud Berdiyan (2002-05-01 16:41:00) [21]Хорошая идея!
Только я сначала так и сделал :)
Скатал, исправил, но…после долгих часов мучений у меня так нечего и не получилось!
А жаль, ведь компонента работает, а у меня нет, что за хреновина!
Вопрос остается открытым!
Помогите, кто чем может!
Malder (2002-05-01 16:32:00) [22]Proud Berdiyan, ну так посмотри исходник IECombobox и спиши решение оттуда...
Proud Berdiyan (2002-05-01 16:27:00) [23]
> VID © (01.05.02 15:32)
Спасибо, но у меня есть такой компонент – IECombobox, но, дело в том, что он является потомком класса Tcombobox, и у него нету свойства BorderStyle, которое мне очень надо!
Правда если у тебя имеется такой компонентик отвечающий моим требованиям, то кидай на мыло – буду очень благодарен!
Вопрос остается открытым!
Помогите пожалуйста, кто чем может!
VID (2002-05-01 15:32:00) [24]слушай, может не будешь париться с этим , и я те компонент вышлю такой какой ты хочешь ? :)))
сам правда не проверял его, верю описанию