[R] Déterminer l'item de treeview qui a le focus

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#21

Message par JujuLand46 »

Pour une action en temps réel (directement commandée par le check) il faut passer par un GuiRegisterMsg, dans ce cas c'est le clic de souris sur l'item qui commande l'action
J'ai trouvé une autre méthode qui m'évite toute cette gestion de la souris qui prend la tête, et peut-être aussi pas mal de ressources.
Lors de la création des items, je récupère dans un tableau multiple le controlID, et accessoirement le handle (mais j'évite de m'en servir, les controlID, et les fonctions de bases d'AutoIt me conviennent bien. Tant que je peux me passer des _fonctions)
Il me suffit donc dans autant de boucles que de treeview, d'associer les contrôles à la fonction qui va bien, ensuite, c'est un jeu d'enfant que de traiter...

Code : Tout sélectionner

;=========================
; Define GUICtrl functions
;=========================
;extension
for $rg=0 to $nbext
    GUICtrlSetOnEvent($ExtArray[$rg][3], "extension")
Next
;mime
for $rg=0 to $nbMime
    GUICtrlSetOnEvent($mimeArray[$rg][2], "mime")
Next
Etant donné que vous n'avez pas d'arborescence dans la treeview, il aurait été pas mal plus simple d'utiliser une listview qui est plus facile à gérer
Ca ne me parait pas bien plus difficile à gérer.
Pour la combo j'ai pas bien compris la question
Le bouton commande la lecture de l'item sélectionné dans la combo, et envoie ça dans une variable pour traitement...
Effectivement, comme j'ai un bouton pour traiter le choix du combo, c'est semble-t-il sans objet.

Par contre, j'ai encore un petit problème avec la mise à jour de l'affichage, lors de la mise à jour du texte d'un treeviewItem. Il faut que je clique quelque part dans la zone du treeview, ou que je change d'onglet pour que la mise à jour se fasse.
Je n'ai pas trouvé de méthode pour que la mise à jour soit automatique.
J'ai bien essayé un ControlClick, mais je n'ai pas su le faire fonctionner.

A+
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#22

Message par mikell »

Code : Tout sélectionner

 _WinAPI_RedrawWindow($votreGui, "", "", BitOR($RDW_INVALIDATE, $RDW_UPDATENOW))
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#23

Message par JujuLand46 »

Ca semble nickel, sauf qu'il me manque probablement l'include :)
J'ai essayr WinAPI.au3, mais ce n'est semble-t-il pas çà.
J'ai ajouté WindowsConstants.au3, plus d'erreur, mais aucun résultat probant.

Bon, c'est ok, j'utilisais le titre, et pas le controlID.
Merci

A+
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#24

Message par JujuLand46 »

Bon, tout çà progresse , mais j'ai quelques fois de petites difficultés dont je ne trouve pas la solution dans la doc installée.

Je crée des onglets, et je veux cacher et/ou invalider un des onglets. J'utilise les commandes suivantes:

;-----------------------------------------------
GuiCtrlCreateTabItem("Tux2Km")
;-----------------------------------------------
...
;-----------------------------------------------
$gnomeTab=GuiCtrlCreateTabItem("Gnome")
;-----------------------------------------------
GUICtrlSetState($gnomeTab, $GUI_HIDE + $GUI_DISABLE)
...
;-----------------------------------------------
GuiCtrlCreateTabItem($txt25)
;-----------------------------------------------

et l'onglet est visible et cliquable.
La doc ne stipule pas d'impossibilité hormis pour menu, et menuitem.

Merci
A+
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#25

Message par mikell »

Le 'hide-show' et le 'disable-enable' n'existent pas pour les tabitems
Seul moyen : détruire-recréer le tabitem :(

EDIT
En bidouillant on peut faire en sorte de désactiver les tabitems non sélectionnés, mais j'ai pas mieux à proposer Image
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#26

Message par JujuLand46 »

C'est un bien trop grosse usine à gaz comparé à la raison qui me poussait à vouloir cacher une tabulation.

Merci de toute façon pour l'effort.

Je vais prendre une autre solution.

A+
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#27

Message par JujuLand46 »

Bon, j'arrive presque à la fin de mon outil, et j'ai un dernier problème que je ne comprends pas.
J'ai créé le bouton $WineExt, j'ai assigné une fonction à ce bouton, mais si celui-ci est créé, il ne génère aucun évênement, et je n'exécute jamais la fonction. Pourtant, visuellement, je clique bien sur le bouton (effet de poussoir).

En changeant le nom ou le libellé du bouton, rien n'y fait. J'ai depuis créé le bouton GPLv2, et celui-ci fonctionne correctement.

Si quelqu'un a une idée ...

PS: j'ai posté en pièce jointe, car en code, çà dépasse la taille maxi autorisée pour les messages.
Merci
A+
Fichiers joints
Win2Tux.au3
(60.44 Kio) Téléchargé 63 fois
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#28

Message par mikell »

C'est une erreur d'inattention (classique dans les codes très volumineux) :wink:
Un GUISetOnEvent au lieu d'un GUICtrlSetOnEvent
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#29

Message par JujuLand46 »

Grrr... p..... de copier-coller, si j'avais choisi la ligne suivante comme modèle :)

Merci encore
A+
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Click bouton ne fonctionne que sur une partie du bo

#30

Message par JujuLand46 »

Voici un dernier outil ou j'ai quelque soucis:

Le bouton quit ne réagit au click que sur la partie située en dessous du texte du bouton, alors que le bouton situé au milieu à droite, qui est une copie juste renommée, fonctionne correctement.

Même problème pour les deux autres boutons situés en bas de la fenêtre.
► Afficher le textecode
Si quelqu'un a une idée ...

PS: devrait pouvoir être lancé sans risque, car il n'y a pas encore de RegWrite, jusque quelques RegRead qui ne devraient pas trop poser de problème pour une éventuelle exécution.

Marci
A+
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#31

Message par mikell »

Tiens ça aussi c'est un classique...
Tsss tss le manque de rigueur dans la construction de la gui, qui fait qu'une label mord sur les boutons :mrgreen:

Code : Tout sélectionner

$htitle=GuiCtrlCreateLabel("----------[ URL2Km " & $version & " (" & $datVers & ") ]-----------------------------------------------------------------------------------------------------------------",0,166,500,[color=#FF0000]14[/color])
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#32

Message par JujuLand46 »

Probablement un classique pour autoIt, mais ca ne semble pas évident, car quit est créé après, et donc aurait à mon avis du être au dessus du label.

De toute façon, merci

A+
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#33

Message par JujuLand46 »

Petite question: existe-t-il un controle qui permette d'afficher des fichiers xpm, çà m'éviterait d'utiliser ImageMagick pour les transformer en jpeg ?

A+
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#34

Message par JujuLand46 »

Bon, je vois que la question précédente n'inspire personne ... pas grave, j'utilise donc ImageMagick, c'est moins beau en jpg, mais çà fonctionne.

J'ai maintenant une fonction concernant une insertion dans un treeview

Code : Tout sélectionner

[b]$item= StringLower($extNew) & $sp1 & "Win2Tux.file"  & $sp2 & $sp3[/b] ; texte du nouveau treeViewItem
[b]$rg=SearchPosInExt($extNew)[/b]     ;retourne le rang du treeViewItem derrière lequel insérer le nouvel arrivant
[b]$handle=_GUICtrlTreeView_InsertItem($extensionView,$item,$extArray[$rg][4])[/b] ; extArray[$rg][4] contient le handle du treeviewItem derrière lequel insérer le nouvel arrivant.
Pas d'erreur à l'exécution, il me retourne un handle (pas 0) mais il ne m'insère rien ...
en fait, je ne suis pas sûr du paramètre à donner ... disponibles : le texte, le ID ou le handle ...

Merci de vos lumière ...

A+
Modifié en dernier par JujuLand46 le mar. 03 avr. 2012 09:14, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#35

Message par mikell »

Ta syntaxe a l'air correcte...
Mais je n'utilise jamais cette fonction _GUICtrlTreeView_InsertItem : sur mon pc, si je prends juste l'exemple de l'aide, l'item est bien inséré mais le texte affiché est illisible (ça affiche les carrés des caractères non reconnus)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#36

Message par JujuLand46 »

Merci,

Quel est le fichier d'exemple que tu as essayé ?

A+
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#37

Message par mikell »

Ben celui qui est là

Code : Tout sélectionner

$oIE=ObjCreate("Shell.Explorer.2")
$gui = GUICreate("", 700, 450, -1, -1, -1, 0x80) 
$gX = GUICtrlCreateObj($oIE, 0, 0, 700, 450)
GUISetState()
$oIE.Navigate("mk:@MSITStore:" & StringRegExpReplace(@Autoitexe, '(.+)\\[^\\]+', "$1") _  
    & "\UDFs3.chm::/html/libfunctions/" & "_GUICtrlTreeView_InsertItem.htm")
While GuiGetMsg()<>-3
Wend
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#38

Message par JujuLand46 »

Merci,
L'exemple est inutilisable sous Linux, mais çà m'a permis de m'intéresser au fichier UDFs3.chm que j'avais completement zappé...
Et l'exemple dedans est parlant et fonctionne. En fait, j'avais une erreur de syntaxe, et ce qui fonctionne est là:

Code : Tout sélectionner

[b]$item= StringLower($extNew) & $sp1 & "Win2Tux.file"  & $sp2 & $sp3[/b] ; texte du nouveau treeViewItem
[b]$rg=SearchPosInExt($extNew)[/b]     ;retourne le rang du treeViewItem derrière lequel insérer le nouvel arrivant
[b]$handle=_GUICtrlTreeView_InsertItem($extensionView,$item,[color=#FF0000]0,[/color]$extArray[$rg][4])[/b] ; extArray[$rg][4] contient le handle du treeviewItem derrière lequel insérer le nouvel arrivant.
Le paramètre inutilisé doit avoir la valeur 0. C'est dit dans les commentaires du source, mais pas très explicite.

Une petite question concernant les codages de string.
Je récupère une chaîne UTF8, que je voudrait transformer en ANSI pour édition et retransformer en UTF8 pour sauvegarde.

J'ai essayé avec çà:

Code : Tout sélectionner

$comment=IniRead($file,"Desktop Entry","Comment","")
$a = StringToASCIIArray($comment,0,StringLen($comment),1)
$comment = StringFromASCIIArray($a,0,StringLen($a),2)
mais la chaine présentée à l'édition est toujours en UTF8

Enfin, j'ai une autre petite question juste esthétique, celle-là:
Comme l'initialisation de mon prog peut être un peu long, j'ai créé une fenetre splash dont l'info évolue selon la phase de l'initialisation.

J'ai fait çà de cette façon:

Code : Tout sélectionner

Creation du splash avec quelques contrôles
affichage du splash
boucle
   Affichage de la phase en cours et modification du progress.
finBoucle
masquage du splash
affichage de mon écran
suppression du splash
Tout çà fonctionne bien sauf que lors de l'initialisation je crée un tab, et mon écran de splash semble pollué par ce tab. Voir la copie écran jointe

A+
(Pointilleux le monsieur, pour 2 x 3 lignes de code ...)
Fichiers joints
ecran_splash.png
ecran_splash.png (11.39 Kio) Vu 2424 fois
Modifié en dernier par JujuLand46 le lun. 02 avr. 2012 18:21, modifié 3 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#39

Message par Tlem »

@JujuLand46
Vous avez écrit dans ce sujet plusieurs messages en oubliant la balise de code. Merci de lire ceci http://www.autoitscript.fr/forum/viewto ... 896#p24896 , puis de corriger vos messages.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
JujuLand46
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 03 févr. 2012 23:03
Localisation : Cahors
Status : Hors ligne

Re: [..] Déterminer l'item de treeview qui a le focus

#40

Message par JujuLand46 »

Autre question:

Je n'ai pas pu utiliser _ArrayInsert(), car c'est malheureusement pour des tableaux mono-dimension, je bricole donc avec une boulcle for next, et çà fonctionne.

Par contre, je suis coincé par un détail:

Comment trouver in ID quand on n'a que le handle d'un contrôle, suite à l'utilisation d'un _GUICtrlTreeView_InsertItem() ?

Merci
A+
Répondre