listview once again ...

0

Potrzebuje przykladu procedury ktora przemieszczala by mi elementy w listview. Chodzi o przesuwanie wpisow UP DOWN czyli przestawianie kolejnosci. Kombinowalem w ten sposob:
*przypisanie ListItem1 zawartosci zaznaczenia
Index := ListView.Selected.Index;
*nadanie wartosci zmiennej index
ListItem1 := ListView.Selected;
*przypisanie ListItem2 zawartosci pola znajdujacego sie
*pozycje wyzej
ListItem2 := ListView.Items[Index - 1];
*przypisanie polu znajdujacego sie pozycje wyzej zawartosci
*ListItem1
ListView.Items[Index - 1]:= ListItem1;
ListView.Items[Index]:= ListItem2;
Jest to kod dla przycisku UP czyli przesuwajacy wpis jedna pozycje do gory. Kod ten dziala tylko czesciowo. Nie bede sie zaglebial bo tylko zagmatwam.
Prosze o pomoc. Dzieki bardzo :)--Pozdrawiam {hello}
Tomasz K.

0

Nie mam zainstalowanego jeszcze Delphi, ale radzilbym Ci zadeklarowac jakas zmienna Temp i tam wrzucac na chwilke element z gory albo dolu (w zaleznosci od przesowania)... cos jak w sortowaniu metada babelkowa (sorka za brak kodu)--LSD - Discover The New Way Of Thinking

0

Tak wlasnie zrobilem. Utworzylem zmienne klasy TListItem i przydzielilem im wartosci z pozyzji w ListView ktore ulegna zamianie. Jesli o to Ci chodzi, niestety wciaz nie dziala. Moze zapomnialem o jakims drobiazgu ale wyczerpaly mi sie juz koncepcje.--Pozdrawiam {hello}
Tomasz K.

0

sprobuj cos takiego:
od razu mowie ze trzeba to jeszcze dopracowac :-)

{procedura UP}
var
S : String;
i : Integer;
begin
if ListView1.SelCount > 0 then
begin
i := ListView1.Selected.Index;
S := ListView1.Selected.Caption;
if i 0 then
begin
ListView1.Items.Item[i].Caption := ListView1.Items.Item[i-1].Caption;
ListView1.Items.Item[i-1].Caption := S;
end;
end;
end;

{procedura DOWN}
var
S : String;
i : Integer;
begin
if ListView1.SelCount > 0 then
begin
i := ListView1.Selected.Index;
S := ListView1.Selected.Caption;
if i ListView1.Items.Count -1 then
begin
ListView1.Items.Item[i].Caption := ListView1.Items.Item[i+1].Caption;
ListView1.Items.Item[i+1].Caption := S;
end;
end;
end;

ale to dziala tylko na caption :-)

-=-=[ Delphi 3, 6 ]=-=-
-=-=-==[ LKS ]==-=-=-
-=[ [email protected] ]=-

0

Genialne :D Dzieki LKS, z subitemami sobie juz chyba dam rade :)--Pozdrawiam {hello}
Tomasz K.

0

moze to co podam ponizej jest dobrym rozwiazaniem? :-)

{procedura UP}
var
Item : TListItem;
i : Integer;
begin
if ListView1.SelCount > 0 then
begin
i := ListView1.Selected.Index;
Item := ListView1.Selected;
if i <> 0 then
begin
ListView1.Items.Insert(ListView1.Items.Count);
ListView1.Items[ListView1.Items.Count-1] := ListView1.Items[i];
ListView1.Items[i] := ListView1.Items[i-1];
ListView1.Items[i-1] := ListView1.Items[ListView1.Items.Count-1];
ListView1.Items.Delete(ListView1.Items.Count-1);
end;
end;
end;

{procedura DOWN}
var
Item : TListItem;
i : Integer;
begin
if ListView1.SelCount > 0 then
begin
i := ListView1.Selected.Index;
Item := ListView1.Selected;
if i <> ListView1.Items.Count -1 then
begin
ListView1.Items.Insert(ListView1.Items.Count);
ListView1.Items[ListView1.Items.Count-1] := ListView1.Items[i];
ListView1.Items[i] := ListView1.Items[i+1];
ListView1.Items[i+1] := ListView1.Items[ListView1.Items.Count-1];
ListView1.Items.Delete(ListView1.Items.Count-1);
end;
end;
end;---=-=[ Delphi 3, 6 ]=-=-
-=-=-==[ LKS ]==-=-=-
-=[ [email protected] ]=-

0

Juz zrobilem subitemy , dzieki za pomoc. Nie wiem jeszcze jak zmienic zaznaczenie w komponecie zeby podarzalo za zamiana.--Pozdrawiam {hello}
Tomasz K.

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