Der Tile-Modus ist ebenfalls aus dem Explorer bekannt. Man sieht dabei das Icon, und rechts daneben steht der Dateiname, und darunter (abhängig vom Typ) noch zusätzliche Infos. Zur Benutzung müssen wir der List-View erst mitteilen, wie wir uns den Kachelmodus vorstellen. Dazu gibt´s das Record
TLVTileViewInfo, das wir am besten im "OnCreate" der Form füllen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
tileview : TLVTileViewInfo; // CommCtrl_Fragment.pas
begin
// Recordgröße initialisieren
tileview.cbSize := sizeof(TLVTileViewInfo);
// was wollen wir beeinflussen? die Anzahl der zusätzlichen Zeilen
tileview.dwMask := LVTVIM_COLUMNS;
// die Tiles sollen sich möglichst automatisch anpassen
tileview.dwFlags := LVTVIF_AUTOSIZE;
// wie viele zusätzliche Zeilen sollen es denn sein?
tileview.cLines := 2;
// und ab damit zur List-View
ListView_SetTileViewInfo(lv1.Handle,tileview);
end;
Wichtig erscheint mir diese Zeile:
tileview.cLines := 2;
Damit wird der List-View mitgeteilt, wie viele
zusätzliche Zeilen im Kachelmodus zu sehen sein sollen. Das bedeutet:
zusätzlich zum Itemnamen (TListItem.Caption), der ja sowieso und in jedem Darstellungsmodus angezeigt wird!
Nehmen wir als Beispiel einen kleinen Explorer, der die Dateien des aktuellen Ordners anzeigt. Im Reportmodus zeigt er außerdem in der Spalte #1 die Dateigröße und in Spalte #2 das Datum. Was wir davon im Kachelmodus sehen, hat ursächlich mit diesen Spalten im Reportmodus zu tun.
Anzumerken ist noch, dass der Kachelmodus für jedes Item separat eingestellt werden muss. Das hört sich umständlich an, bietet aber auch den Vorteil, die Ansicht direkt zu beeinflussen. Ich zeige ein Mini-Beispiel aus dem "OnCreate" der Form:
Delphi-Quellcode:
res := FindFirst(ExtractFilePath(paramstr(0)) + '*.*',
faAnyFile,ds);
while(res = 0) do begin
if(ds.Attr and faDirectory = 0) then begin
// wie gehabt, füllen wir die List-View
lv := lv1.Items.Add;
lv.Caption := ds.Name;
lv.ImageIndex := 0;
lv.SubItems.Add(inttostr(ds.Size) + ' Bytes');
lv.SubItems.Add(FormatDateTime('',FileDateToDateTime(ds.Time)));
// JETZT KOMMT DER TILE-MODUS -->
// wir initialisieren das TLVTileInfo-Record
tile.cbSize := sizeof(TLVTileInfo);
// welches Item ist´s?
tile.iItem := lv1.Items.Count - 1;
// wie viele zusätzliche Zeilen sollen es für
// dieses spezielle Item sein?
tile.cColumns := 2;
// welche Spalten sollen angezeigt werden?
tile.puColumns := @ca[0];
// an die List-View übergeben
ListView_SetTileInfo(lv1.Handle,tile);
end;
res := FindNext(ds);
end;
FindClose(ds);
Wichtig hierbei ist diese Anweisung:
tile.puColumns := @ca[0];
"ca" ist dabei ein Integer-Array, das die Indexwerte der anzuzeigenden Spalten enthält:
Delphi-Quellcode:
var
ca : array[0..1]of integer = (1,2);
Wenn wir davon ausgehen, dass -wie oben erwähnt!- die erste Spalte die Dateigröße und die zweite das Datum enthält, dann würden wir im Tile-Modus also auch unter dem Dateinamen erst die -größe und dann das Datum sehen. Tauschen wir die Angabe um, etwa
Delphi-Quellcode:
var
ca : array[0..1]of integer = (2,1);
dann sähen wir erst das Datum und dann die Größe. Abhängig von den Spalten, die ihr im Reportmodus habt (oder generell: falls ihr versteckte Subitems habt, die in keiner Spalte auftauchen!), könnt ihr mit dem Array beeinflussen, was im Tile-Modus zu sehen sein soll.
That's all.
(PS: Fehler mit "Code" vs. "Delphi" im Text gefixt.)