Delphi Уроки: Компонент Edit внутри компонента ListBox

Опубиковано: 02.12.2008 г., автор: , просмотров: 27389

Delphi Уроки: Компонент Edit внутри компонента ListBox

Сегодня мы сделаем так что бы запись в компоненте ListBox можно было бы редактировать просто кликнув на неё. Грубо мы будем динамически создавать компонент Edit внутри компонента ListBox.

Ну что открываем Delphi, создаем новый проект, на форму кидаем компонент ListBox с закладки Standard.

Далее после ключевого слова private пишем

ListEdit : TEdit;
procedure ListEditKeyPress(Sender: TObject; var Key: Char) ;

Как вы наверно поняли здесь мы создали компонент Edit с именем ListEdit и обьявили процедуру KeyPress для компонента ListEdit

Нажимаем комбинацию клавиш CTRL+SHIFT+C для того что бы прописать код для процедуры ListEditKeyPress. Полный код процедуры будет выглядеть следующим образом (посмотрите как получилось у меня и допишите недостающие строки)

procedure TForm1.ListEditKeyPress(Sender: TObject; var Key: Char);
var
ii: Integer;
begin
if Key = #13 then
begin
ii := ListBox1.ItemIndex;
ListBox1.Items.Delete(ii) ;
ListBox1.Items.Insert(ii, ListEdit.Text) ;
ListEdit.Visible := False;
Key := #0;
end;
end;

Теперь выделяем форму и создаем на ней обработчик событий OnCreate (полный код обработчика представлен ниже)

procedure TForm1.FormCreate(Sender: TObject) ;
begin
ListEdit := TEdit.Create(self) ;
ListEdit.Visible := false;
ListEdit.Ctl3D := false;
ListEdit.BorderStyle := bsNone;
ListEdit.Parent := ListBox1;
ListEdit.Width := ListBox1.ClientWidth;
ListEdit.OnKeyPress := ListEditKeyPress;
end;

Немного поясню что я здесь написал, т.к компонент ListEdit мы создаем динамически то и необходимые свойства нам нужно задавать вручную. Чем мы сейчас и занимаемся.

Далее выделяем компонент ListBox, на нем создадим обработчик событий Onclick

procedure TForm1.ListBox1Click(Sender: TObject) ;
var
ii : integer;
lRect: TRect;
begin
ii := ListBox1.ItemIndex;
if ii = -1 then exit;
lRect := ListBox1.ItemRect(ii) ;
ListEdit.Top := lRect.Top + 1;
ListEdit.Left := lRect.Left + 1;
ListEdit.Height := (lRect.Bottom - lRect.Top) + 1;
ListEdit.Text := ListBox1.Items.Strings[ii];
ListBox1.Selected[ii] := False;
ListEdit.Visible := True;
ListEdit.SelectAll;
ListEdit.SetFocus;
end;

НА этом все можите запускаться!!!

До встречи DelphiExpert.ru !!!



Похожие материалы

Последние из рубрики

Илья 24 Фев 2012 в 00:00 #
Статья огонь, большое спасибо.
андрей 26 Окт 2011 в 00:00 #
чет не понятно.вот открыл я это дело в первый раз .хотелось бы как то по подробней ,может должен список какой то вылезти в листбоксе или что то еще
или это болезнь всех профессионалов ,в краце инфу кинуть
а что от куда как бы сами .
так получается
Dark 15 Апр 2011 в 00:00 #
Учитывайте, что если будите вешать на клаву (например на PageUp и PageDown), то после вызова процедуры нужно запретить дальнейшую обработку клавишь!
Sonne 27 Дек 2010 в 00:00 #
всё отлично работает..спасибо...разобралась со всем
mal 16 Сен 2010 в 00:00 #
А у меня всё прекрасно заработало!

ОтменитьДобавить комментарий