PDA

View Full Version : دو سوال در مورد listview



Mask
پنج شنبه 06 خرداد 1389, 15:30 عصر
با سلام
سواله اولم اینه که چطوری میشه وقتی بر رویه لبه های جدول listview کلیک کنیم. بر اساس مقدار اون ستون اطلاعات سورت بشه.
و سوال دوم :
در برنامه ایی یه سری اطلاعات در listview ریخته میشه و این اطلاعات حدود چند ثانیه طول میکشه.
چطوری باید تشخیص داد که چنج شدن listview تموم شده.
ممنون از دوستان.

Mask
جمعه 07 خرداد 1389, 12:35 عصر
دوستان یه مرحمتی....

مصطفی ساتکی
جمعه 07 خرداد 1389, 21:59 عصر
این همه الگوریتم sort تو وب شما دیگه یه سرچ هم نمی کنید.


unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;

type
TCustomSortStyle = (cssAlphaNum, cssNumeric, cssDateTime);

TForm2 = class(TForm)
ListView1: TListView;
procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);
private
public
end;

var
Form2: TForm2;
LvSortStyle: TCustomSortStyle;
LvSortOrder: array[0..4] of Boolean;

implementation
uses Math,DateUtils;
{$R *.dfm}

function CustomSortProc(Item1, Item2: TListItem; SortColumn: Integer): Integer; stdcall;
var
s1, s2: string;
i1, i2: Integer;
r1, r2: Boolean;
d1, d2: TDateTime;

begin
Result := 0;

if (Item1 = nil) or (Item2 = nil) then Exit;

case SortColumn of
-1 : begin
s1 := Item1.Caption;
s2 := Item2.Caption;
end;
else begin
s1 := '';
s2 := '';
if (SortColumn < Item1.SubItems.Count) then
s1 := Item1.SubItems[SortColumn];
if (SortColumn < Item2.SubItems.Count) then
s2 := Item2.SubItems[SortColumn]
end;
end;
case LvSortStyle of
cssAlphaNum : Result := lstrcmp(PChar(s1), PChar(s2));
cssNumeric : begin
r1 := TryStrToInt(s1, i1);
r2 := TryStrToInt(s2, i2);
Result := ord(r1 or r2);
if Result <> 0 then
Result := CompareValue(i2, i1);
end;
cssDateTime : begin
r1 := TryStrToDate(s1, d1);
r2 := TryStrToDate(s2, d2);
Result := ord(r1 or r2);
if Result <> 0 then
Result := CompareDate(d1, d2);
end;
end;

if LvSortOrder[SortColumn + 1] then
Result := - Result;
end;


procedure TForm2.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
begin
if Column.Index = 0 then
LvSortStyle := cssAlphaNum
else
LvSortStyle := cssNumeric;

ListView1.CustomSort(@CustomSortProc, Column.Index -1);

LvSortOrder[Column.Index] := not LvSortOrder[Column.Index];

end;

end.