[ Brkic @ 18.02.2011. 17:38 ] @
Probao sa
tab.ItemFocused.EditCaption;
ali samo prvi red edituje,
kako ostale redove editovati ?
[ lan-mi @ 18.02.2011. 20:01 ] @
tab.Itemfocused.Subitems[0]:='izmeni';
[ Brkic @ 18.02.2011. 20:12 ] @
Pa ne tako, nego npr. dvoklik na red i da se iz tabele može direktno izmenuti Subitems-i na kojem je kliknuto.

Ovo što sam napisao u prvom postu omogućava izmenu samo 1 kolone=Caption a treba mi da tako mogu i sa ostalim Subitems-ima.
[ rambo @ 21.02.2011. 08:35 ] @
Standardni ListView nema mogućnost editovanja SubItema već samo Captiona. Ako ti to baš treba, preporučujem da pređeš na VirtualTreeView. Trebaće ti malo vremena da ukapiraš kako funkcioniše, ali nakon toga nećeš prestati da je koristiš. Pored toga što je edit moguć u svim kolonama, komponenta ti daje punu kontrolu nad time šta i kako korisnik može da radi, kao i mogućnost da zameniš običan edit sa nekom drugom kontrolom (ComboBox, DateTimePicker, ...).
[ Brkic @ 21.02.2011. 09:26 ] @
Hvala na savetu,
ListView mi je u ovom programu neka pomoćna tabelica pa sam mislio ubaciti mogućnost uzmene podataka, ali kada ne može ko ga šiša, neću sve menjati zbog toga.

Još jednom hvala.
[ tkaranovic @ 21.02.2011. 13:46 ] @
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;

[ Brkic @ 21.02.2011. 19:15 ] @
Probao sam i odlično je,
EndEdit treba staviti kao "boolean"
ubacio sam Edit1KeyDown i radi OK.


[Ovu poruku je menjao Brkic dana 23.02.2011. u 14:01 GMT+1]