Récupérer l'index d'un item d'un array constant

Récupérer l'index d'un item d'un array constant - Delphi/Pascal - Programmation

Marsh Posté le 07-06-2005 à 18:45:07    

Salut tout le monde, salut Antp, comment va ? :hello:  
 
J'ai un petit souci, normal :D
 

BufferSize : array [0..5] of Integer = (16384,32768,65536,262144,524288,1048576);


La sélection d'un élément d'une zone de liste affecte à une variable la valeur du tableau constant correspondant à l'indice de l'élément sélectionné :
 

TAILLE_BUFFER := BufferSize[cboBuffer.ItemIndex];


Sachant que dans la zone de liste on a pas les valeurs du tableau mais une représentation de la forme "16 ko", "32 ko", etc.
 
Tout ça marche très bien, sauf que j'aimerai faire l'opération inverse :sweat:.  C'est à dire, j'ai une valeur dans TAILLE_BUFFER qui correspond donc forcément à un élément du tableau BufferSize et donc j'aimerai pouvoir retrouver l'indice de cette valeur dans le tableau pour l'assigner à l'attribut ItemIndex de la zone de liste pour que l'élément soit automatiquement sélectionné. Charabia or not ? :D
 
Sachant que je pourrai faire ça avec une boucle mais je me demandais s'il n'existe pas une fonction du style IndexOf qui retourne directement le numéro d'un élément du tableau :D
 
Voilà, tout ça pour pas grand chose finalement avec du recul [:arg]

Reply

Marsh Posté le 07-06-2005 à 18:45:07   

Reply

Marsh Posté le 08-06-2005 à 11:30:15    

Pour les tableaux, la seule solution est une boucle.
Mais si ça peut te rassurer, IndexOf c'est juste une fonction qui encapsule une boucle :D (sauf pour les listes de chaînes triées, mais ça c'est une autre histoire)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-06-2005 à 11:39:49    

Bon ben c'est ce que j'ai fait en attendant d'avoir une réponse :D pi ben si c'est la seule solution ^^
 
Par contre je voulais faire un autre post, mais je vais continuer ici je crois. Ca concerne l'organisation du code.
 
Je me demande, comment un programme gère plusieurs format de fichier, l'ouverture, la sauvegarde des données dans les fichiers etc.. Je fais un programme qui doit être capable de traiter des fichiers d'une ancienne version mais je sais pas comment organiser le code efficacement.
 
Pour l'instant je suis parti avec des classes, une pour chaque format de fichier, mais après je sais pas comment faire faire les mêmes opérations sur des formats différents :S

Reply

Marsh Posté le 08-06-2005 à 11:58:10    

C'est un peu vague ta question :??: c'est quoi les "opérations" à faire ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-06-2005 à 12:14:03    

Ben on va faire simple :D
 
Il y'a 3 formats de fichier et chacun ont des informations stockées dans leur entêtes. Quand je parle d'opération, je veux dire par exemple, afficher dans une list box les données de chaque type de fichiers, ceux contenu dans l'entête.
 
j'imagine un truc du genre, on clique sur un bouton "Ouvrir un fichier", la boîte de dialogue s'ouvre, on choisit un fichier en fonction du filtre appliqué qui peut donc être de l'un des trois format proposé et on clique sur le bouton "Ouvrir". A partir de là, on retourne dans le programme et il faut pouvoir détecter le format du fichier sélectionné pour instancier un objet de la classe correspondant au format choisit.
 
C'est pas clair hein :D

Reply

Marsh Posté le 08-06-2005 à 12:17:51    

Regarde l'extension du fichier choisi, ou examine les premiers octets du fichier s'ils peuvent servir à identifier le type.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-06-2005 à 12:24:48    

Oui ça je sais faire, mais c'est après, comment ça marche le fait d'avoir un objet qui peut être de 3 type possible.
 
Par exemple :
 
Case Extension of
'.wav' : monObjet := TFichier1.Create;
'.mp3' : monObjet := TFichier2.Create;
'.ogg' : monObjet := TFichier3.Create;
End;
 
Est-ce que je peux faire un truc de ce style ? Si oui, monObjet doit etre de quel type à la déclaration ? Ou alors est-ce que je dois déclarer autant d'objet que de format disponible ?
 
En supposant que ce que j'ai mis fonctionne, si j'ai un bouton "Afficher info", dois-je standardiser les méthodes des classes de façon à pouvoir faire "monObjet.Afficher" quel que soit la classe de l'objet ?
 
Je me demande trop comment font les logiciels qui gèrent 15 mille format, comment il organise leur code :S

Reply

Marsh Posté le 08-06-2005 à 12:30:13    

Le principe c'est de faire une classe ancêtre commune, genre TFichier, dont dérivent les 3 autres.
Cette classe commune doit alors avoir une fonction Afficher déclarée comme virtual ou virtual abstract, et les 3 autres écrasent cette fonction via une fonction Affichée déclarée comme override.
Et donc au final tu as juste un objet TFichier à déclarer.


Message édité par antp le 08-06-2005 à 12:30:40

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-06-2005 à 12:38:45    

Ah ben c'est bon à savoir, c'est exactement ce que j'ai fait :D
 
Donc ça veut dire que la méthode Afficher de la class TFichier va utiliser les attributs commun aux sous-classes et les sous classe vont ajouter leur propre attribut à la méthode Afficher héritée. C'est bon à savoir :)
 
Par contre, y'a un truc qui me gène, c'est que les sous-classe ont une méthode qui n'a pas lieu d'être dans TFichier. Comment ça se passe dans ce cas ? Je créé quand même la méthode dans TFichier sans rien mettre dedans ?

Reply

Marsh Posté le 08-06-2005 à 13:51:17    

oui, en virtual abstract alors (ou bien en virtual normal et tu laisses l'implémentation vide)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-06-2005 à 13:51:17   

Reply

Marsh Posté le 08-06-2005 à 14:00:29    

C'est ça l'intérêt de déclarer une méthode en Virtual ? Elle existe virtuellement uniquement pour le besoin des sous-classe ? Si c'est ça, je suis content putain j'ai découvert un concept de la POO par moi-même :D
 
La différence entre Virtual et Virtual Abstract keske ? :)

Reply

Marsh Posté le 08-06-2005 à 14:40:22    

f: TFichier;
 
f.Affiche -> si Affiche est abstract, il appellera l'Affiche réel de la classe (même si "f" est déclaré comme TFichier le fait qu'il soit créé comme TFichier1 fera que c'est l'Affiche de TFichier1 qui sera appelé).
Et "virtual; abstract;" c'est juste pour ne pas avoir à définir l'implémentation (pour éviter de laisser une méthode vide par exemple)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-06-2005 à 21:13:28    

yes c'est pile poil ce qu'il me faut alors :)
 
woa chui trop content d'avoir affaire à ce genre de truc...je progresse ! POO, serre les fesses j'arrive :D
 
Edit : un ENORME merci antp, premier sur Delphi [:powa]


Message édité par Inekman le 08-06-2005 à 21:45:40
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed