VirtualTreeView je dobra preporuka... ali pošto ćeš zadržati ListView evo kako može:
Code:
procedure TNekaForma.ListView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
ListItem: TListItem;
Column, Len: Integer;
Edit: TEdit;
i: Integer;
begin
ListItem := ListView1.GetItemAt(X, Y);
if not Assigned(ListItem) then
Exit;
Column := 0;
Len := X;
while Len > ListView1.Columns[Column].Width do
begin
Len := Len - ListView1.Columns[Column].Width;
Inc(Column);
end;
Dec(Column);
Edit := TEdit.Create(ListView1);
try
Edit.Parent := ListView1;
Edit.Left := X;
Edit.Top := y;
if (Column > -1)and(Column < ListItem.SubItems.Count) then
Edit.Text := ListItem.SubItems[Column]
else
if (Column = ListItem.SubItems.Count)and(Column < ListView1.Columns.Count) then
Edit.Text := '';
EndEdit := False;
//Edit.OnKeyDown := Edit1KeyDown;
Edit.SetFocus;
i := 0;
while i < 100 do
begin
Application.ProcessMessages;
if EndEdit then
break;
Inc(i);
sleep(100);
end;
if (Column > -1)and(Column < ListItem.SubItems.Count) then
ListItem.SubItems[Column] := Edit.Text
else
if (Column = ListItem.SubItems.Count)and(Column < ListView1.Columns.Count) then
ListItem.SubItems.Add(Edit.Text);
finally
Edit.Free;
end;
end;
Ovo, naravno, ima nedostataka tako da bi morao da je doradiš. U Edit1KeyDown može da bude:
Code:
if Key = VK_RETURN then
EndEdit := True;