Je cherche la commande pour tester si le titre (caption) d'un TListitem est selectionné (par double-clic par ex.) ou non après un :
ListView1.Selected.EditCaption.
Recherches infructueuses sur le net.
Merci,
Denis
Je cherche la commande pour tester si le titre (caption) d'un TListitem est selectionné (par double-clic par ex.) ou non après un :
ListView1.Selected.EditCaption.
Recherches infructueuses sur le net.
Merci,
Denis
On va dire que tu cherche un truc comme ça peut-être
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 procedure TForm1.ListView1Edited(Sender: TObject; Item: TListItem; var S: string); var I : Integer; begin for I := 0 to ListView1.Items.Count - 1 do if UpperCase(S) = UpperCase(ListView1.Items.Item[I].Caption) then if ListView1.Selected.Index <> I then begin ShowMessage('Un titre identique existe déjà !'); S := ListView1.Selected.Caption; Break; end; end; procedure TForm1.ListView1Editing(Sender: TObject; Item: TListItem; var AllowEdit: Boolean); begin ShowMessage(Format('Index N°: %d en édition',[ListView1.Selected.Index])); end; procedure TForm1.ListView1DblClick(Sender: TObject); begin ListView1.Selected.EditCaption; end;
Merci pour ta réponse, mais cela ne correspond pas à ce que je cherche.
Je m'explique davantage :
Lorsque le fait F2 je rentre dans le mode édition du TListItem cad que le titre est selectionné et près a être saisie.
Lorsque j'appuie sur la touche Entrée j'execute le programme associé au TListItem (à l'icone).
Lorsque je renomme mon titre je suis obligé de taper "Entrée" pour valider les modifs, et alors le programme s'execute mais ce n'est pas le but.
Je voudrais donc tester (dans onKeyPress ou onKeyUp) si le titre de l'item sélectionné en en mode édition alors ne pas lancer le programme associé lors de l'appuie sur la touche "Entrée".
Merci.
Justement tu as les infos qui vont bien...
ListView1Editing => lorsque tu entre pour modifier
ListView1Edited => lorsque tu en sort avec la touche Entrée
Et utiliser OnKeyDown avec la touche entrée (pour l'ordre des messages...)
Normalement tu devrais trouver avec ça...
@+
Effectivement, j'ai pensé faire ca :
Dans ListView1Editing, je met une variable boolean a True
dans ListView1Edited, je teste la variable puis je la met à False
Mais je voulais savoir si une commande/API permettait de tester directement.
Merci,
Denis
il existe IsEditing qui indique si un élément de la liste est en cours de modification...
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ListView1.IsEditing then
Bizarre, ca fonctionne pour la touche Entrée mais pas pour la touche DEL !
Dans tous les cas (true ou false) il execute "mnuDelClick(self)" au lieu de supprimer le caractère du libellé; Serais-ce un Bogue ?
Merci pour la commande.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 case Key of VK_RETURN: if ListView1.IsEditing then ListView1.OnDblClick(self); VK_F2: ListView1.Selected.EditCaption; VK_DELETE: if ListView1.IsEditing = False then Form1.mnuDelClick(self); end;
Denis
Normal, gestion des messages up,down...
J'ai dis dans un post plus haut KeyDown...
De plus d'après ton code ce serait
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TForm1.ListView1KeyDown... case Key of VK_RETURN: if not ListView1.IsEditing then ListView1.OnDblClick(self); VK_F2: ListView1.Selected.EditCaption; VK_DELETE: if not ListView1.IsEditing then Form1.mnuDelClick(self); end;
Désolé mais la gestion dela touche "Enter" marche mieux dans ListView1KeyDown(); que dans ListView1KeyUp();
Mais la touche DELete supprime l'item (mnuDelClick) et non le caractère au curseur en mode Edition...
C'est bizarre non ?
Des suggestions ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 procedure TForm1.ListView1KeyDown(); begin if ActiveControl is TListView then if Assigned(ListView1.Selected) then begin case Key of VK_RETURN: if not ListView1.IsEditing then ListView1.OnDblClick(self); VK_F2: ListView1.selected.EditCaption; VK_DELETE: if not ListView1.IsEditing then Form1.mnuDelClick(self); end; end; end;
Denis
Il ne te reste pas des bout de code dans OnKeyPress, OnKeyUp, Change...,qui font appel à cette procédure par hasard !
Met un point d'arrêt dans cette procédure mnuDelClick, mais aussi dans KeyDown ou il y a l'appel de mnuDelClick,
si mnuDelClick est appelée avant KeyDown, c'est donc qu'elle est appelée ailleurs...
Sinon poste en plus, car normalement le code marche !
@+
Effectivement, j'ai déterminé un raccourci clavier "DEL" dans mon menu déroulant.
Je l'ai supprimé et maintenant ça fonctionne !
Faut que je trouve comment la rajouter sans que ça interagisse
En tout cas Merci,
Denis
Lorsque je renomme le libellé (caption) de mon TlistView, la touche DEL ne fonctionne plus en mode édition pour effacer les caractères.
Dois je gerer moi même l'effacement du caractère au curseur (lourd) ou est-il possible que la touche gère nativement sa fonction d'origine (je crois qu'on peut mettre un inherited ???)
Merci,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 //Menu déroulant "Supprimer" : procedure TForm1.mnuDeleteItemClick(Sender: TObject); var ListItem : TListItem; begin ListItem := listview1.Selected; if Assigned(ListItem) and (ListView1.SelCount = 1) and (not ListView1.IsEditing) then begin if (MessageDlg('Voulez-vous supprimer DEFINITIVEMENT l''élément sélectionné ?',mtConfirmation,[mbYes, mbNo],0)=mrYes) then begin Dispose(PInfos(ListView1.Selected.Data)); Listview1.DeleteSelected; mnuAlignClick(Self); end //else begin // exit; //end; end; end;
Denis
Il n'y a aucune raison que la touche del ne fonctionne pas...
Vérifie les appels,tes procedures key du listview, les parent etc...
Sinon poste ton code, parce qu'on va y passer 15 plombes...
@+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager