ListView에서 항목은 그룹 "BGroup", "CGroup"및 "DGroup"(그룹 머리글)로 그룹화됩니다. 이제 ListView에 새 Item을 추가하고 "AGroup"헤더가있는 새 그룹을이 Item에 할당하면 그룹 "AGroup"이 항상 그룹의 끝에 삽입됩니다. 새로운 그룹 주문은 BGroup, CGroup, DGroup, AGroup입니다. 그렇다면 어떻게 그룹을 올바른 알파벳순으로 정렬 할 수 있습니까? 순서는 다음과 같아야합니다 : AGroup, BGroup, CGroup, DGroup.ListView 그룹 정렬?
5
A
답변
8
예를 들어 ListView_SortGroups
매크로를 사용할 수 있습니다. 이 매크로는 LVGroupCompare
함수 프로토 타입으로 정의 된 자체 비교 함수를 가질 것으로 기대합니다. 다음 코드에서 그룹은 Header
속성에 따라 CompareText
함수를 사용하여 정렬되지만 이제는 자신 만의 비교를 구성 할 차례입니다.
잊어 버린; 어떤 pvData
매개 변수의 LVGroupCompare
함수에서받을 ListView_SortGroups
매크로의 마지막 Pointer
유형 매개 변수에 전달하면 특정 목록보기의 그룹 정렬 기능이 될 것이므로 직접 전달하는 것이 가장 좋습니다 Groups
쉽게 조작 할 수있는 목록보기 모음. 그룹 ID로 목록보기 그룹을 찾을 수있는 직접적인 방법이 없기 때문에
, 나는 TListGroups
클래스의 다음 도우미 함수를 사용하십시오 :
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;
그런 다음 당신은 LVGroupCompare
이 도우미 방법을 사용할 수 있습니다 함수 콜백은 다음과 같습니다.
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 그룹 제외
- 2. ListView 정렬
- 3. ListView 정렬
- 4. 그룹 및 제목별로 정렬 정렬
- 5. NativeScript에서 ListView 정렬
- 6. 안드로이드에서의 ListView 정렬
- 7. asp.net ListView 열 정렬
- 8. 정렬 된 ListList ListView
- 9. Listview Vb.net에서 열 정렬?
- 10. ListView 컨트롤에서 정렬 적용
- 11. ListView 내에서 항목 정렬
- 12. ListView 항목 정렬?
- 13. Listview 열 정렬
- 14. asp.net ListView 정렬 화살표
- 15. Delphi-xml-listview 및 그룹
- 16. Wpf ListView 그룹 항목을 그룹 머리글과 다르게 정렬 할 수 있습니까?
- 17. postgresql 그룹 및 정렬
- 18. SSRS에서 그룹 정렬 보고서
- 19. HTML 이미지 그룹 정렬
- 20. 그룹 이름순으로 정렬
- 21. 팬더 그룹 단위로 정렬
- 22. MySQL 정렬 행 그룹
- 23. 그룹 전에 mysql 정렬
- 24. 정렬 서브 그룹 ggplot
- 25. SSRS 보고서 정렬 우선 순위 그룹 정렬
- 26. 기본 정렬 방법 wpf listview
- 27. Windows 8의 ListView 정렬 문제
- 28. 드래그 정렬 ListView 가로형 항목
- 29. ListView 사용자 지정 정렬 논리
- 30. Crystal Reports를 정렬 하위 그룹
감사합니다. 'E2009 호환되지 않는 유형 : 그러나, 컴파일러는'ListView_SortGroups' 라인에 오류 표시 '일반 절차 및 방법 pointer' 그러나 나는 "는 LVGroupCompare"전에 "@"를 추가 할 때'LVGroupCompare' @의 컴파일러는 같은 줄에 오류를 보여줍니다 : 'E2036 변수가 필요합니다 .' – user1580348
그리고'LVGroupCompare'는 정규 절차로 정의되어 있습니까? 메서드가 될 수 없으며 중첩 되어서도 안됩니다. 필자는 컴파일러가 만족 스러웠던 델파이 2009 (지금 당장 델파이 XE2를 가지고 있지 않으므로)를 테스트했습니다. – TLama
xe2에 문제가 없습니다 –