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

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

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 !!!



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

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

эээ 10 Jun 2010 в 00:00 #
Нефига не работает....сделайте нормальный исходник, что бы можно было скачать и посмотреть.....
эээ 10 Jun 2010 в 00:00 #
Нефига не работает....сделайте нормальный исходник, что бы можно было скачать и посмотреть.....
neys 14 Jan 2010 в 00:00 #
А выход из режима редактирования??
ListEdit.OnExit := ListEditExit;
procedure TForm.ListEditExit(Sender: TObject);
begin
ListEdit.Visible := False;
end;
mbmx 01 Jul 2009 в 00:00 #
Из-за вот этой строки: ListBox1.Selected[ii] := False;
в процедуре TForm1.ListBox1Click
это вот выражение всегда равно -1: ii := ListBox1.ItemIndex; (процедура TForm1.ListEditKeyPress). Т.о. надо убрать строку ListBox1.Selected[ii] := False;
Va-Bank 03 Jun 2009 в 00:00 #
Да какая разница? Просто элемент ListEdit и процедура будут доступны только для этого юнита...

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