Recherche partielle dans un listview

toupil34 Messages postés 11 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 6 mars 2009 - 24 févr. 2009 à 15:18
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 6 mars 2009 à 14:08
bonjour a tous

est il possible de faire une recherche partielle dans un listview par l'intermediaire d'un edit,


merci

11 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
25 févr. 2009 à 14:26
Bonjour,
 F1 sur le composant et voir la méthode FindData

cantador
0
toupil34 Messages postés 11 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 6 mars 2009
25 févr. 2009 à 16:29
bonjour cantador

merci de ta reponsz mais etant debutant en delphi j'avoue ne pas comprendre la methode 'finddata'pourrais tu m'aider

voici le code que j'utilise pour ajouter les elements dans ma listview (vsreport,5 items + images bitmaps)


procedure Tfiche1.BitBtajouterClick(Sender: TObject);
var ListAjout : TListItem;
begin
ListAjout := Lvaffichage.Items.Add;
ListAjout.Caption := Editnom.Text;
ListAjout.SubItems.Add(Editprenom.Text);
ListAjout.SubItems.Add(Edittelfixe.Text);
listajout.SubItemImages[1] := 1;
ListAjout.SubItems.Add(Editmail.Text);
listajout.SubItemImages[2] := 2;
ListAjout.SubItems.Add(Edittelmobile.Text);
listajout.SubItemImages[3] := 3;
editnom.Text:= '';
editprenom.Text:='';
edittelfixe.Text:='';
editmail.Text:='';
edittelmobile.Text:='';

end;
je voudrais maintenant (a l'aide d'un panel et d'un edit),quand je tape la lettre 'g'dans l'edit,que la listview me mette en surbrillance le nom commencant par la lettre 'g'.
j'espere que cela est asses comprhensible.
merci
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
25 févr. 2009 à 21:12
Voilà un exemple qui va te permettre de t'en sortir :
http://files.codes-sources.com/fichier.aspx?id=40907&f=principale.paso

Pour récupérer la frappe de la lettre sers toi du OnKeyPress et tu récupères le paramètre key.http://files.codes-sources.com/fichier.aspx?id=40907&f=principale.pasTon idée devra cependant être affinée car si deux mots commencent par la même lettre ?

à toi de jouer

cantador
0
toupil34 Messages postés 11 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 6 mars 2009
26 févr. 2009 à 08:52
merci pour le lien (exemple tres interessant,(desolé j'ai du mal m'exprimer)en fait je voudrais simplement que lorsque je tappe 'g' dans l'edit, le listview me selectionne le nom commencant par la lettre 'g'sans mettre la cllule en couleur (recherche sur le 1° item)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
toupil34 Messages postés 11 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 6 mars 2009
26 févr. 2009 à 10:03
bonjour a tous

toujours avec mon probleme de recherche dans un listview
en cherchant un peu j'ai trouve ce code

procedure Tfiche1.EditrechercheChange(Sender: TObject);

Var I : Integer;
begin
For I := 1 To Lvaffichage.Items.Count Do
Begin
If Copy(LowerCase(Lvaffichage.Items[I-1].caption),1,Length(LowerCase(Editrecherche.Text)))
= LowerCase(Editrecherche.Text)
Then Begin
Lvaffichage.ItemIndex := I-1;
Break;
End;
End;
end;

mais il ne fonctionne pas (rien ne se passe)
quelqu'un aurait 'il une solution
merci
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
26 févr. 2009 à 10:28
Mais si ça marche..

unit Unit1;


interface


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


type
  TForm1 = class(TForm)
    Button1: TButton;
    Editrecherche: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;


var
  Form1: TForm1;
  NewColumn: TListColumn;
  ListItem: TListItem;
  ListView: TListView;
implementation


{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);


const
  Names: array[0..5, 0..1] of string = (
    ('Rubble', 'Barney'),
    ('Michael', 'Johnson'),
    ('Bunny', 'Bugs'),
    ('Silver', 'HiHo'),
    ('Simpson', 'Bart'),
    ('Squirrel', 'Rocky')
    );


var
  i: Integer;


begin
  ListView := TListView.Create(Self);
  with ListView do
  begin
    Parent := Self;
//    Align := alClient;


    ViewStyle := vsReport;


    NewColumn := Columns.Add;
    NewColumn.Caption := 'Dernier';
    NewColumn := Columns.Add;
    NewColumn.Caption := 'Premier';


    for i := Low(Names) to High(Names) do
    begin
      ListItem := Items.Add;
      ListItem.Caption := Names[i, 0];
      ListItem.SubItems.Add(Names[i, 1]);
    end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 1 to ListView.Items.Count do
  begin
    if Copy(LowerCase(ListView.Items[i - 1].caption), 1, Length(LowerCase(EditRecherche.Text)))
      = LowerCase(Editrecherche.Text) then
    begin
      ListView.ItemIndex := i - 1;
      Break;
    end;
  end;
end;
end.

Tape Bunny dans ton edit et clique et tu verras qu'il passe sur le break
Maintenant, il faut lui dire ce que tu veux faire à ce moment..
(j'aurais mis UpperCase..)

Je sens que tu voudrais faire une recherche incrémentale ce qui est très difficile à mettre en place dans ce type de composant..

cantador
0
toupil34 Messages postés 11 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 6 mars 2009
26 févr. 2009 à 10:41
condator (merci pour ta rapidite) a premiere vue c'est ce qu'il me faut
je regarderai ce soir plus le temps (boulot)
a bientot et encore merci
0
toupil34 Messages postés 11 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 6 mars 2009
26 févr. 2009 à 16:37
j'ai tester ton code qui fonctionne tres bien a la creation de la listview mais
j'ai toujours le meme probleme pour la recherche
je joint un exemple qui sera plus explicite(du moins j'espere)


//+++++composants utlises++++
//listview
//edit1 (recherche)
//edit2(taper nom a entrer dans la listview)
//boutton1(ajouter dans la listview)

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
ListView1: TListView;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
//ajoute les elements dans la listview
procedure TForm1.Button1Click(Sender: TObject);
var listajout: tlistitem;
begin
listajout:=listview1.Items.Add;
listajout.Caption:=edit2.Text;
edit2.Text:='';
end;
//recherche (tape'r' dans edit1 doit selectionner les noms correspondants dans la listview)
procedure TForm1.Edit1Change(Sender: TObject);
begin
listview1.ItemIndex:=sendmessage(listview1.Handle,lb_findstring,-1,integer(edit1.Text));
end;
end.

cela fonctionne nickel avec un listbox,mais pas avec une listview (quand je tape la lettre dans l'edit1 il ne me selectionne pas les noms correspondants dans la listview
serait ce un probleme de propriete de la listview?
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
26 févr. 2009 à 19:35
Essaie avec l'évènement OnCustomDrawSubItem

cantador
0
toupil34 Messages postés 11 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 6 mars 2009
6 mars 2009 à 11:20
que veut tu dire par essai avec l'evenement 'oncustomdrawsubitem' ?
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
6 mars 2009 à 14:08
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin

parce que cet évènement compte tenu de ses paramètres permet de modifier
un item à ta guise.

cantador
0
Rejoignez-nous