ListView, edycja, aktualizacja

0

Mam problem :)
Na formie mam LV (vs: Report) z kolumnami Imię i Nazwisko...
No chcę zrobić edycję ale przez pokazanie takiego paska (TPanel) z polami TEdit (edtImie i edtNazwisko + btnOK i btnCancel) zaraz pod zaznaczoną linią... ,o ile nie mam problemy z pobraniem i pokazaniem danych w editach tak nie mogę ugryźć jak wyświetlić ten panel z tymi editami pod zaznaczoną linią... (,a po edycji schować go -> to wystarczy TPanle.Visible := False; potem)

Tak to częściowo zrobiłęm:

procedure TForm1.lvMainEditing(Sender: TObject; Item: TListItem;
  var AllowEdit: Boolean);
begin
   pnlEdit.Visible := True;
   edtNazwisko.Text := Item.Caption;
   edtImie.Text := Item.SubItems.Strings[0];
end;

A może jest jakiś LV co ma coś takiego??
</delphi>

0

Weź napisz wyraźniej, o co ci chodzi.

0

Mam problem
Na formie mam LV (vs: Report) z kolumnami Imię i Nazwisko...
No chcę zrobić edycję ale przez pokazanie takiego paska (TPanel) z polami TEdit (edtImie i edtNazwisko + btnOK i btnCancel) zaraz pod zaznaczoną linią... ,o ile nie mam problemy z pobraniem i pokazaniem danych w editach tak nie mogę ugryźć jak wyświetlić ten panel z tymi editami pod zaznaczoną linią... (,a po edycji schować go -> to wystarczy TPanle.Visible := False; potem)

HEHE NIEŹLE ZASZYFROWANE 2 RAZY PRZECZYTAŁEM I NADAL NIC NIE ROZUMIEM :)

0

Ja podejmę te ryzyko i powiem, że chyba zrozumiałem o co chodzi.

Po pierwsze - zabierasz się za to od d**y strony.
Ja bym to zobił tak (pewnie są inne sposobu, ale ten mi wpadł pierwszy do głowy):
Pobierasz współrzędne myszki w LV poprzez OnMouseDown i wrzucasz je do jakiejś globalnej zmiennej. Gdy zaskoczy OnDblClick to wczytujesz położenie myszki, dodajesz do tego pozycję LV na formie i wg tego pozycjonujesz panel.

0

DObrze rozszyfrowałeś :) tylko ,iż raczej to nie będzie na klik (źle się wyraziłęm) ,a na [Enter] i nie mam pomysłu jak pobrać pozycję itema zaznaczonego (lini z LV)

Myślałęm aby wykorzystać onEditing...

0

Genralnie tak:

procedure TForm1.ListView1KeyPress(Sender: TObject; var Key: Char);
begin
 if (key=#13) and (ListView1.ItemIndex<>-1) then
   Panel1.Top:=ListView1.Top+ListView1.Items[ListView1.ItemIndex].GetPosition.Y;
end;

dodaj tylko wysokość jednego wiersza bo tak jak jest wyświetla na górnej a nie dolnej krawędzi zaznaczonego.

dołóż tez sprawdzenie, czy zaznaczony ListItem jest w ogóle widoczny - popatrz na ListView.TopItem i ListView.VisibleRowCount.

jeśli zaznaczony Item jest wysunięty poza widoczną częśc listy, użyj TopItem do odfpowiedniego ustawienia listy.

0

Niom oooooooo tototo chyba styknie :D
Jak mi nie podejdzie to sie w ku... i picne edycję w formie.
-- DOPISANE --
Tak to se zrobiłem i działa suuuper :D

   if Key = #13 then begin
      pnlEdit.Visible := True;
      pnlEdit.Top := lvMain.Top + lvMain.Items[lvMain.ItemIndex].GetPosition.Y+15;
   end;

Ukrywanie po kliknięciu na OK :). No ale teraz mam drugi problem...

procedure TFOrm1.EdytujItem(ItemIndex : integer);
begin
   Label1.Caption := 'X: '+inttostr(Item.Position.X)+' - Y: '+inttostr(Item.Position.Y);
   if lvMain.ItemIndex = -1 then Exit;
   if not pnlEdit.Visible then exit;
   edtNazwisko.Text := Item.Caption;
   edtImie.Text := Item.SubItems.Strings[0];
   edtNazwisko.SetFocus;
end;

I problem... Buuu nie działa mi Focus tego Edita.... tzn. Focus pozostaje dalej na LV... ?? jak to przetrawić??

// use F1, George - Ł

0

It's working!!!! Działa D jak chce lece z resztą D

BIG THX ALL

1 użytkowników online, w tym zalogowanych: 0, gości: 1