Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question// Delphi XE2 // "Optimisation" du TListView // Utilise StrBefore et StrAfter de jclAnsiStrings unit UMdf_ListView; interface uses Vcl.ComCtrls, System.Classes, jclAnsiStrings; type TListView = Class(Vcl.ComCtrls.TListView) Private lvSeparator : Char; // Séparateur de chaine public Constructor Create (Aowner: Tcomponent); override; Destructor Destroy; Published // nb : Je ne sais pas si ces fonctions présenteront un // quelconque intéret dans un autre mode que ViewStyle = vsReport property Separator : char read lvSeparator write lvSeparator default ';'; // séparateur de chaine function getLineStrList(iIndex : Integer) : TStrings; // Renvoie les valeurs d'une ligne sous forme de stringlist function getLineString(iIndex : Integer) : string; // Renvoie les valeurs d'une ligne sous forme de string function AddLine(sLine : string) : integer; // Ajoute une ligne (sous forme d'une chaine séparée par le séparateur) et renvoie son index End; implementation // Creation du composant Constructor TListView.Create(Aowner: Tcomponent); begin inherited; // initialisation lvSeparator := ';'; end; // Destruction du composant destructor TListView.Destroy; begin inherited Destroy; end; // Renvoie les valeurs d'une ligne sous forme de stringlist function TListView.getLineStrList(iIndex : Integer) : TStrings; var i : Integer; begin Result := TStringList.Create; // si l'index choisi existe et est supérieur à -1 // sinon retour d'une liste vide if (iIndex > -1) and (iIndex < Items.Count) then begin // Ajout de l'item principal Result.Add(Items[iIndex].Caption); for I := 0 To Items[iIndex].SubItems.Count - 1 do Result.Add(Items[iIndex].subItems[i]); // ajout des subitems end; end; // Renvoie les valeurs d'une ligne sous forme de string function TListView.getLineString(iIndex : Integer) : string; var i : Integer; sReste : string; // reste de la chaine à ajouter begin Result := ''; // si l'index choisi existe et est supérieur à -1 // sinon retour d'une chaine vide if (iIndex > -1) and (iIndex < Items.Count) then begin Result := Items[iIndex].Caption; for I := 0 to Items[iIndex].SubItems.Count - 1 do Result := Result + lvSeparator + Items[iIndex].SubItems[i]; end; end; // Ajoute une ligne (sous forme d'une chaine séparée par le séparateur) et renvoie son index function TListView.AddLine(sLine : string) : Integer; var i : Integer; sReste : string; // reste de la chaine à ajouter itAjout : TListItem; // item à ajouter begin Result := -1; // Sans effet si la chaine est vide if sLine <> '' then begin // Ajout de l'item principal itAjout := Items.Add; itAjout.Caption := StrBefore(lvSeparator, sLine); sReste := StrAfter(lvSeparator, sLine); // Ajout des subitems for i := 1 To Columns.Count - 1 do begin itAjout.SubItems.Add(StrBefore(lvSeparator, sReste)); sReste := StrAfter(lvSeparator, sReste); end; // retour de l'index de l'ajout Result := itAjout.Index; end; end; end.