[Delphi] FileListBox sorteren op extensie?

Pagina: 1
Acties:
  • 151 views sinds 30-01-2008
  • Reageer

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 04-09 14:27
Is het mogelijk om (in Delphi 3) een FileListBox te sorteren op extensie?
Delphi sorteert standaard op naam, wat totaal niet handig is

Full-stack webdeveloper in Groningen


Verwijderd

Ik heb even gekeken in Delphi 5 en het lijkt mij niet echt mogelijk ;(

Je kunt er natuurlijk altijd zelf eentje maken, dat is helemaal niet moeilijk, als je hulp nodig hebt daarbij...

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 04-09 14:27
Het zou me denk ik wel alleen lukken, als ik de source had! Die schijnt bij Delphi Client/Server te zitten maar bij mij niet :'(

Dus als je me daarmee zou kunnen helpen, graag! :)

Full-stack webdeveloper in Groningen


  • freddifish
  • Registratie: November 2000
  • Laatst online: 29-01 09:15

freddifish

schnappi !

Ik heb hier Delphi C/S versie 1 tm 5 dus...(o nee delphi 5 heet Enterprise ;-)) => mail :+

'people say I'm a drinker, but I'm sober half the time' - Mick Jagger | mail: freddifish_AT_gmx.net


  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 04-09 14:27
www.delphi32.com geeft bagger, www.torry.net ook. Het mailtje leverde ook niet het gewenste resultaat.
Is het wel mogelijk? Ik ben een vrij ervaren Pascal programmeur, en in TP7 kan het echt niet! In Delphi dan ook niet? De component TFileListBox werkt met FindFirst en FindNext, die hetzelfde werken als in Pascal. Is het echt niet mogelijk?

Full-stack webdeveloper in Groningen


  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 17:56
het makelijkst is denk ik zelf een compnent maken dat overerft van TFileListBox

A software developer is someone who looks both left and right when crossing a one-way street.

Dé antenne-innovatie voor de korte golf


  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 04-09 14:27
Hm... Tja, ik heb niet echt veel ervaring met nieuwe componenten maken :(

Welke idioot bij Borland heeft bedacht om het sorteren maar weg te laten?
In Turbo Pascal 3 kon het al niet, dan zou je toch denken dat ze naar een jaar of 10 het wel hebben kunnen programmeren!!!

Full-stack webdeveloper in Groningen


Verwijderd

Volgens mij werkt dit [getest in Delphi6]
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
unit FileCtrlEx;

interface

uses
  FileCtrl;

type
  TFileListBoxEx = class(TFileListBox)
  private
    FExtensionSort: Boolean;
    procedure SetExtensionSort(const Value: Boolean);
  protected
    procedure ReadFileNames; override;
  public
    procedure SortByExt;
  published
    property ExtensionSort: Boolean read FExtensionSort write SetExtensionSort;
  end;

procedure Register;

implementation

uses
  Classes, SysUtils;

function ExtCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := CompareText(ExtractFileExt(List[Index1]),
    ExtractFileExt(List[Index2]));
end;

{ TFileListBoxEx }

procedure TFileListBoxEx.ReadFileNames;
begin
  inherited;
  if ExtensionSort then SortByExt;
end;

procedure TFileListBoxEx.SetExtensionSort(const Value: Boolean);
begin
  if Value <> FExtensionSort then
  begin
    FExtensionSort := Value;
    Sorted := Sorted and not FExtensionSort;
    ReadFileNames;
  end;
end;

procedure TFileListBoxEx.SortByExt;
var
  TmpList: TStringList;
  i: Integer;
begin
  Sorted := False;
  TmpList := TStringList.Create;
  try
    TmpList.Assign(Items);
    TmpList.CustomSort(ExtCompare);
    Items.Assign(TmpList);
  finally
    TmpList.Free;
  end;
end;

procedure Register;
begin
  RegisterComponents('Win 3.1', [TFileListBoxEx]);
end;

end.

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Waarom niet een gewone listview waar je alle filenamen in zet??

Een listbox heeft een onCompare event (als je sorttype op stdata zet tenminste).
code:
1
2
3
4
5
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
  Data: Integer; var Compare: Integer);
begin

end;

En vergelijk dan bijv de Item1.caption en item2.caption met elkaar. Als item1 groter is dan item2 moet je compare op 1 zetten, -1 als item1 kleiner is dan item2, en 0 als ze gelijk zijn.

Ah.. en om de sorteer routine maar helemaal af te maken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
  Data: Integer; var Compare: Integer);
var ext1, ext2: string;
begin
     ext1:=extractfileext(item1.caption);
     ext2:=extractfileext(item2.caption);

     if ext1 < ext2 then
      compare:=1
     else if ext1 > ext2 then
      compare:=-1
     else
      compare:=0;
end;

Moet je alleen nog de items van de listview vullen..

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 04-09 14:27
DiFool, hartstikke bedankt!
Het werkt perfect, en ik zal je naam noemen in het helpbestand van mijn programma

Full-stack webdeveloper in Groningen


Verwijderd

Kijk vooral ook ff bij linschke. Goed tree/list component waar volgens mij ook een file-versie bijzit, want wat je nu gebruikt is echt uit de prehistorie [lees ca 3 jaar oud]

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Op zaterdag 18 mei 2002 02:37 schreef DiFool het volgende:
Kijk vooral ook ff bij linschke. Goed tree/list component waar volgens mij ook een file-versie bijzit, want wat je nu gebruikt is echt uit de prehistorie [lees ca 3 jaar oud]
Daarom zei ik ook al: waarom niet een gewone listview met een eigen oncompare handler??

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 04-09 14:27
Ja, maar het werkt wel :)
Alleen jammer van die icoontjes... Die wil ik ook nog veranderen

(Ja, ik weet het... ik zeur en ik ben ontzettend lastig)

Full-stack webdeveloper in Groningen

Pagina: 1