1 | |||||
Auteur | Messages | ||||
---|---|---|---|---|---|
caracole | #1 Posté le 4/1/2011 à 21:12:00 | ||||
Bonjour et Bonne année ! J'ai une base de données qui contient les emplacements d'images sur mon disque. je lis cette base et je veux afficher les photos sous forme de vignette et un texte associé. ca fonctionne "parfaitement" a ceci près: le formulaire s'affiche seulement quand la requete de la base de donnée est terminée. que faire pour que le formulaire s'affiche et les la listview aussi sans attendre la fin ? j'ai tout essayé: listView1.refresh() 'ne fonctionne pas, le ME.refresh() idem... Je pense qu'il y a d'autre solutions mais je ne comprend pas l'utilisation des controles datasource, databro merci de votre aide Pierre mon code. dans MMain.class
FMain.form un controle listview dans FMain.class
| |||||
linuxos | #2 Posté le 4/1/2011 à 23:13:00 | ||||
Un peu de sel, de poivre et la crevette sera... | Bonsoir caracole, En fait souvent il est nécessaire de redonner du temps au système pour qu'il puisse mettre a jour ou rafraichir certaines parties graphiques. Cela s'effectue par la commande suivante: WAIT <valeur en secondes> Ex: WAIT 0.001 est suffisant par exemple pour rafraichir un changement de curseur: Application.Busy = 1 Attention il ne faut pas utiliser a outrance la commande WAIT, car premièrement cela ralenti un programme et d'autre part le fait de redonner du temps au système il peut arriver que d'autre événement soient traités pendant ce temps la. Remarque: la commande WAIT seule, sans valeur, permet prendre en compte de nouveau événement, timer, process, etc... mais pas des entrées de clavier et autres. Se référer a la doc sur le Wiki pour le détail complet. Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. | ||||
caracole | #3 Posté le 4/1/2011 à 23:23:00 | ||||
Bonsoir caracole, Bonsoir Olivier, L'instruction Print que j'ai mis dans mon exemple fonctionne je la voie afficher rapidement, mais la listeview ne s'affiche seulement que lorsque la boucle est terminée. Je me souviens du temps où je programmai en VB6, il existait la méthode refresh qui justement evitait ce genre de PB. j'ai essayé le wait .avec ce parametre 0.001. c'est parfait j'ai donc appris quelque-chose. ceci dit, je ne sais pas comment récuperer de la listeview par exemple un doubleclick sur un item, la clé ou le filename ou l'image... tu peux m'aider ? Merci Pierre | |||||
linuxos | #4 Posté le 4/1/2011 à 23:43:00 | ||||
Un peu de sel, de poivre et la crevette sera... | Pour cela il faut utiliser l'evenement suivant du ListView
Voila Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. | ||||
caracole | #5 Posté le 4/1/2011 à 23:49:00 | ||||
Pour cela il faut utiliser l'evenement suivant du ListView Cela ne fonctionne pas ListView1.Item.Selected revoie toujours FALSE par contre la valeur de Listview1.Key correspond bien à la clé que j'ai mis dans la liste. | |||||
caracole | #6 Posté le 4/1/2011 à 23:59:00 | ||||
Il y a une chose que je ne comprends pas c'est la classe virtuelle .listviewItem comment la déclare-t-on ? dim litem as ListviewItem ca donne une erreur! | |||||
spheris | #7 Posté le 5/1/2011 à 20:00:00 | ||||
Caracole, DIM , c'est pour une variable. PUBLIC ou PRIVATE, c'est pour une classe. d'où : PRIVATE Mylistitem as Listitem | |||||
Prokopy | #8 Posté le 6/1/2011 à 18:37:00 | ||||
Kinder Pingui | Non Spheris, On peut très bien utiliser Dim pour instancier des classes. Exemple :
Si tu mets ça dans le code source d'un formulaire, ton bouton sera bien affiché. Public et Private sont utilisés pour créer des variables globales à ta classe (tu les déclares tout en haut). Avec Dim tu crées une variable locale à ta fonction : elle ne pourra être utilisée ailleurs. Si on utilise tout le temps Public ou Private avec des contrôles c'est parce que on a besoin d'y accéder partout dans le formulaire, à part peut-être pour des variables temporaires pour les For Each ou trucs du genre. Par exemple, ceci est valide :
Pour revenir au problème de caracole, si tu ne peux pas déclarer d'objet .ListViewItem c'est justement parce que c'est une classe virtuelle (d'où l'erreur). Le principe de ces classes est justement de ne pas avoir à les déclarer ni à les manipuler. Par exemple, si tu veux accéder au texte de l'Item courant de MaListView, il te faut juste faire MaListViwe.Current.Text. C'est en fait une manière d'organiser sa classe. Tu peux jeter un œil ici pour des infos plus poussées (mais attention c'est du hard ! ) : http://gambasdoc.org/help/def/virtual?fr La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi. | ||||
spheris | #9 Posté le 7/1/2011 à 21:53:00 | ||||
Prokopy, c'était un piège pour savoir si tu suivais Merci ,j'ai appris quelque chose. Tourner 7 fois la langues dans sa bouche av..... | |||||
1 |