मैं डेल्फी 6 का उपयोग कर रहा हूं और एक सूची दृश्य को सॉर्ट करने की कार्यक्षमता जोड़ना चाहता हूं, जैसे कि यह विंडोज एक्सप्लोरर में किया जाता है।सॉर्टिंग सूची तीर के साथ कॉलम देखें
एक पहला परीक्षण में, मैं (त्वरित & गंदा) में कुछ स्रोतों से कुछ स्रोत कोड की नकल की है, और किया कुछ छोटे समायोजन:
यह वही है मैं अब के लिए अब तक (केवल त्वरित & गंदा है):
uses
CommCtrls;
var
Descending: Boolean;
SortedColumn: Integer;
const
{ For Windows >= XP }
{$EXTERNALSYM HDF_SORTUP}
HDF_SORTUP = $0400;
{$EXTERNALSYM HDF_SORTDOWN}
HDF_SORTDOWN = $0200;
procedure ShowArrowOfListViewColumn(ListView1: TListView; ColumnIdx: integer; Descending: boolean);
var
Header: HWND;
Item: THDItem;
begin
Header := ListView_GetHeader(ListView1.Handle);
ZeroMemory(@Item, SizeOf(Item));
Item.Mask := HDI_FORMAT;
Header_GetItem(Header, ColumnIdx, Item);
Item.fmt := Item.fmt and not (HDF_SORTUP or HDF_SORTDOWN);//remove both flags
if Descending then
Item.fmt := Item.fmt or HDF_SORTDOWN
else
Item.fmt := Item.fmt or HDF_SORTUP;//include the sort ascending flag
Header_SetItem(Header, ColumnIdx, Item);
end;
procedure TUD2MainForm.ListView3Compare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
begin
if SortedColumn = 0 then
Compare := CompareText(Item1.Caption, Item2.Caption)
else
Compare := CompareText(Item1.SubItems[SortedColumn-1], Item2.SubItems[SortedColumn-1]);
if Descending then Compare := -Compare;
end;
procedure TUD2MainForm.ListView3ColumnClick(Sender: TObject;
Column: TListColumn);
begin
TListView(Sender).SortType := stNone;
if Column.Index<>SortedColumn then
begin
SortedColumn := Column.Index;
Descending := False;
end
else
Descending := not Descending;
ShowArrowOfListViewColumn(TListView(Sender), column.Index, Descending);
TListView(Sender).SortType := stText;
end;
कॉलम को ऊपर और नीचे क्रमबद्ध किया जा सकता है, लेकिन मैं तीरों को नहीं देख सकता।
this question के अनुसार, मेरा फ़ंक्शन ShowArrowOfListViewColumn() समस्या को हल करना चाहिए था।
क्या यह संभव है कि डेल्फी 6 इस सुविधा का समर्थन नहीं करता है, या मेरे कोड में कोई समस्या है? दूसरी तरफ, लिस्ट व्यू आईआईआरसी Windows control है, और इसलिए मैं उम्मीद करता हूं कि WinAPI तीर ग्राफिक्स प्रस्तुत करता है, न कि (बहुत पुराना) वीसीएल।
मैंने German website पर पढ़ा है कि तीर ग्राफिक्स को मैन्युअल रूप से जोड़ा जाना है, लेकिन उस वेबसाइट के समाधान में डेल्फी के CommCtrl.pas को बदलने की आवश्यकता है (कॉलम का आकार बदलते समय गड़बड़ की वजह से)। लेकिन मैं वास्तव में वीसीएल स्रोत को संशोधित करना नापसंद करता हूं, खासकर जब से मैं ओपनसोर्स विकसित करता हूं, और मैं नहीं चाहता कि अन्य डेवलपर्स अपने डेल्फी स्रोतों को बदल दें/दोबारा बदलें।
नोट है कि मैं अपने द्विआधारी करने के लिए एक XP प्रकट जोड़ नहीं था, इसलिए एप्लिकेशन Win9x तरह दिखता है।
क्या आप comctl v6, यानी XP विषयों का उपयोग कर रहे हैं? इसके लिए माइक लिस्के के थीम मैनेजर की आवश्यकता है। –
मैंने अपनी बाइनरी में एक एक्सपी मैनिफेस्ट नहीं जोड़ा, इसलिए ऐप Win9x जैसा दिखता है। –