Bir ListView'de, Öğeler "BGroup", "CGroup" ve "DGroup" gruplarına göre gruplandırılır (Bunlar grup üstbilgileridir). Şimdi, ListView'e yeni bir Öğe eklediğimde ve bu Öğeye "AGroup" başlığına sahip yeni bir grup atadığımda, "AGroup" grubu her zaman grupların sonuna eklenir; Yani yeni Gruplar sırası: BGroup, CGroup, DGroup, AGroup. Peki grupları doğru alfabetik sıraya göre nasıl alabilirim? Sipariş şöyle olmalıdır: AGroup, BGroup, CGroup, DGroup.ListView Gruplarını Sıralama?
cevap
Bu örnekteki gibi ListView_SortGroups
makrosunu kullanabilirsiniz. Bu makro, sizden LVGroupCompare
işlev prototipiyle tanımlanan kendi karşılaştırma işlevinize sahip olmanızı bekler. Aşağıdaki kodda gruplar, CompareText
işlevini kullanarak Header
özelliğine göre sıralanmıştır, ancak şimdi kendi karşılaştırmanızı oluşturmak üzeredir.
Unutulmaması gereken noktalar; pvData
parametresindeki LVGroupCompare
parametresinde makrosunun son Pointer
tür parametresine geçen her ne olursa olsun, bu, belirli bir liste görünümünün bir grup sıralama işlevi olacak, doğrudan doğruya Groups
Daha kolay manipülasyon için bu liste görünümünün toplanması. grup kimliğine göre bir liste görünümü grubu bulmak için doğrudan bir yol yoktur yana
, ben TListGroups
sınıf için aşağıdaki yardımcı işlevi kullanmak istiyorum:
type
TListGroups = class(ComCtrls.TListGroups)
public
function FindItemByGroupID(GroupID: Integer): TListGroup;
end;
implementation
function TListGroups.FindItemByGroupID(GroupID: Integer): TListGroup;
var
I: Integer;
begin
for I := 0 to Count - 1 do
begin
Result := Items[I];
if Result.GroupID = GroupID then
Exit;
end;
Result := nil;
end;
Sonra LVGroupCompare
bu yardımcı yöntemini kullanabilirsiniz Bu işlev çağrısı:
function LVGroupCompare(Group1_ID, Group2_ID: Integer;
pvData: Pointer): Integer; stdcall;
var
Item1: TListGroup;
Item2: TListGroup;
Groups: TListGroups;
begin
Result := 0;
Groups := TListGroups(pvData);
Item1 := Groups.FindItemByGroupID(Group1_ID);
Item2 := Groups.FindItemByGroupID(Group2_ID);
if Assigned(Item1) and Assigned(Item2) then
Result := CompareText(Item1.Header, Item2.Header);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Item: TListItem;
Group: TListGroup;
begin
Group := ListView1.Groups.Add;
Group.Header := 'AGroup';
Item := ListView1.Items.Add;
Item.Caption := 'Item X';
Item.GroupID := Group.ID;
ListView_SortGroups(ListView1.Handle, LVGroupCompare, ListView1.Groups);
end;
- 1. ListView sıralama performansı nasıl kullanılır?
- 2. İplik gruplarını jmeter
- 3. Panda gruplarını değiştirin
- 4. ListView
- 5. ListView.
- 6. ListView
- 7. ListView
- 8. , ListView
- 9. ListView
- 10. ASP.NET Gridview Sıralama sıralama
- 11. sıralama
- 12. Sıralama
- 13. sıralama
- 14. IntelliJ'teki açık sekmeler gruplarını nasıl kaydedebilirim?
- 15. Bir facebook kullanıcısı grubunun tüm gruplarını edinin
- 16. ajax istek gruplarını birbiri ardına yürütme
- 17. Baskı BÜYÜK PDF gruplarını sırayla sipariş edin
- 18. Regex ile harfler gruplarını bulmaya çalışıyor
- 19. Kullanıcı gruplarını Django-Rest-Framework ile serileştirme
- 20. F arasında sıralama sıralama F #
- 21. ListView öğesinin odağını devre dışı bırakma ListView
- 22. ListView adaptör veri değişikliği bildirilmeksizin ListView olmaksızın
- 23. Genişletilebilir ListView
- 24. Bir ListView
- 25. ListView öğeleri,
- 26. ListView düzgün
- 27. StartActivityForResult ListView
- 28. Android ListView
- 29. ListView görüntülenemiyor
- 30. güncelleme listview
Teşekkür ederiz. Ancak, derleyici 'ListView_SortGroups 'satırında bir hata gösterir: ' E2009 Uyumsuz Türler:' Düzenli yordam ve yöntem işaretçisi ' Ama "LVGroupCompare" önce bir "@" eklediğimde: @ LVGroupCompare' derleyici aynı satırdaki hatayı gösterir: 'E2036 Değişken gerekli ' – user1580348
Ve' LVGroupCompare 'normal bir yordam olarak tanımlanmış mı (sahip olduğum gibi)? Bu bir yöntem olamaz ve iç içe olmamalıdır. Bunu derhal Delphi 2009 ile test ettim (derhal Delphi XE2 elimde olmadığından). – TLama
xe2 ile sorun yok –