IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

passage d'un tableau structuré en parametre


Sujet :

Delphi

  1. #1
    Membre du Club Avatar de babou54
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 137
    Points : 57
    Points
    57
    Par défaut passage d'un tableau structuré en parametre
    bonjour,
    j'ai un petit souci, je suis en train de programmer un dictionnaire dans lequel on pourra ajouter un mot en enlever le modifier...
    j'utilise donc pour chaque type d'opérations des procedures.
    et la je sur le passage de parametre de mon tableau

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      jpeg, ExtCtrls, StdCtrls;
     
    type
      TForm1 = class(TForm)
        ajoutnom: TButton;
        recherchetype: TButton;
        modifdef: TButton;
        modifortho: TButton;
        supprmot: TButton;
        recherchenom: TButton;
        Label1: TLabel;
        Image1: TImage;
        Image2: TImage;
        nbmot: TEdit;
        Nbmot2: TLabel;
        nbmax: TEdit;
        mot: TEdit;
        Label2: TLabel;
        procedure ajoutnomClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    type TTypeDico = record      // structure typedico
                   nom:string;
                   typnom:string;
                   def:string;
    end;
     
    TMot = array[1..100] of TTypeDico;
     
    var nom,typnom,def: TTypeDico;
     
     
     
    implementation
     
    {$R *.DFM}
     
    procedure recherche (mot,nbmot:string;ind:integer;trouve:boolean;TMot :array of TTypedico);
    // recherche un mot dans le dico
    var
    arret:boolean;
    begin
    trouve:= false;
    arret:= false;
    ind:=1;
    while (not arret) and (ind < strtoint(nbmot)) do
    begin
          if TMot[ind].nom >= mot
             then begin
                  arret:= true;
                  if TMot[ind].nom= mot
                     then trouve:= true
                  end
             else ind:=ind+1;
    end;
    end;
     
    procedure TForm1.ajoutnomClick(Sender: TObject);
    var
    trouve:boolean;
    ind:integer;
    begin
    ajoutnom.visible:=false;
    recherchetype.visible:=false;
    modifdef.visible:=false;
    modifortho.visible:=false;
    supprmot.visible:=false;
    recherchenom.visible:=false;
     
    if nbmot=nbmax
       then showmessage('tableau plein')
       else begin
            recherche(mot.text,nbmot.text,ind,trouve,TMot[i]);
            if trouve=true
               then showmessage ('mot existe déjà')
               else begin
                    for i:=nbmot to ind do
                        begin
                        TMot[i+1]:= TMot[i];
                        end;
                    end;
     
     
     
    end.
    merci d'avance pour vos réponses

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure recherche (mot,nbmot:string;ind:integer;trouve:boolean;TMot :array of TTypedico);
    1- une Variable ne doit pas commencer par un T sauf si c'est le mot qui le veut TotalPerte par exemple ...

    2- tu as déjà déclaré TMot, pourquoi cherche midi à 14h...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure recherche (mot,nbmot:string;ind:integer;trouve:boolean;MesMots: TMot );
    ou mieux à mon avis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type
      TTypeDicoDynArray = array of TTypedico;
     
    procedure recherche (mot,nbmot:string;ind:integer;trouve:boolean; MesMots: TTypeDicoDynArray);
    ensuite je programmerais simplement, en m'inspirant des classes existantes comme la TStringList ou TList

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function IndexOf(MesMots: TTypeDicoDynArray; LeMot: string): Integer;
    begin
      for Result := Low(MesMots) to High(MesMots) do
        if MesMots[Result] = LeMot then
          Exit; 
     
      Result := -1;
    end;
    Enfait tu devrait remplacer ton tableau par une TStringList et remplacer ton TTypeDico structure en TTypedico classe qui serait en Objects de la StringList ... tu aurais ainsi en plus un tri des mots ...

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Suggestion, pour te simplifier encore davantage la vie :

    Au lieu de remplacer le type TTypeDico = record par une seule stringList voiçi ce que donne son remplacement par un Objet comportant trois StringList :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    unit uODico;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;
     
    type
      TForm1 = class(TForm)
        ajoutEnregistrement: TButton;
        edNom: TEdit;
        edType: TEdit;
        edDef: TEdit;
        labNombreDEnregistrements: TLabel;
        bModifierNom: TButton;
        bAfficher: TButton;
        bSupprimerEnregistrement: TButton;
        bAfficherSuivant: TButton;
        procedure ajoutEnregistrementClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure bModifierNomClick(Sender: TObject);
        procedure bAfficherClick(Sender: TObject);
        procedure bSupprimerEnregistrementClick(Sender: TObject);
        procedure bAfficherSuivantClick(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.DFM}
     
    type TTypeDico = object
                         ListeNoms  : tStringList;
                         ListeTypes : tStringList;
                         ListeDefs  : tStringList;
                         ind : integer;
                         procedure  Initialiser;
                         function   Trouves(nom : string) : boolean;
                         procedure  Ajouter(nom,leType,Def : string);
                         procedure  AfficherEnreg(nom : string);
                         //<: pour ré-afficher nom + leType + Def dans les Edit
                         procedure  AfficherSuivant;
                         procedure  CorrigerNom(AncienNom,NouveauNom : string);
                         procedure  SupprimerEnreg(nom : string);
                         //<: pour supprimer l'enregistrement nom + leType + Def
                   end;
     
    procedure TTypeDico.Initialiser;
    begin     ListeNoms  := tStringList.create;
              ListeTypes := tStringList.create;
              ListeDefs  := tStringList.create;
              ListeNoms.Sorted:=false;
              ListeTypes.Sorted:=false;
              ListeDefs.Sorted:=false;
              ind:=-1;
    end;
     
    function TTypeDico.Trouves(nom : string) : boolean;
    begin    Result := listeNoms.IndexOf(AnsiUpperCase(nom)) >=0;
    end;
     
    procedure TTypeDico.Ajouter(nom,letype,Def : string);
    begin     if Trouves(AnsiUpperCase(nom))
              then begin showMessage('nom existe déjà'); EXIT; end;
              ListeNoms.Add(AnsiUpperCase(nom));
              ListeTypes.Add(AnsiUpperCase(letype));
              ListeDefs.Add(AnsiUpperCase(Def));
              ind:=ListeNoms.count-1;
              Form1.labNombreDEnregistrements.caption:=IntToStr(ListeNoms.count);
    end;
     
    procedure TTypeDico.AfficherEnreg(nom : string);
    begin     ind:=ListeNoms.indexOf(AnsiUpperCase(nom));
              if ind<0 then begin showmessage(Nom+' : n''existe pas'); EXIT; end;
              Form1.edNom.text:=AnsiLowerCase(ListeNoms[ind]);
              Form1.edType.text:=AnsiLowerCase(ListeTypes[ind]);
              Form1.edDef.text:=AnsiLowerCase(ListeDefs[ind]);
    end;
     
    procedure TTypeDico.AfficherSuivant;
    begin     if ind<ListeNoms.Count-1 then
              begin inc(ind);
                    Form1.edNom.text:=AnsiLowerCase(ListeNoms[ind]);
                    Form1.edType.text:=AnsiLowerCase(ListeTypes[ind]);
                    Form1.edDef.text:=AnsiLowerCase(ListeDefs[ind]);
              end else showMessage('Atteint Fin du Dico');
    end;
     
    procedure TTypeDico.CorrigerNom(AncienNom,NouveauNom : string);
    begin     ind:=ListeNoms.indexOf(AnsiUpperCase(AncienNom));
              if ind>=0 then ListeNoms[ind]:=AnsiUpperCase(NouveauNom)
                        else showmessage(AncienNom+' : n''existe pas')
    end;
     
    procedure TTypeDico.SupprimerEnreg(nom : string);
    begin     ind:=ListeNoms.indexOf(AnsiUpperCase(nom));
              if ind<0 then begin showmessage(nom+' : n''existe pas'); EXIT; end;
              ListeNoms.Delete(ind);
              ListeTypes.Delete(ind);
              ListeDefs.Delete(ind);
              Form1.labNombreDEnregistrements.caption:=IntToStr(ListeNoms.count);
    end;
     
    // Utilisation de l'objet Dico
     
    var Dico1 : TTypeDico;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin     Dico1.Initialiser;
    end;
     
    procedure TForm1.ajoutEnregistrementClick(Sender: TObject);
    begin     Dico1.Ajouter(edNom.text,edType.text,edDef.Text);
    end;
     
    procedure TForm1.bAfficherClick(Sender: TObject);
    begin     Dico1.AfficherEnreg(edNom.text);
    end;
     
    procedure TForm1.bAfficherSuivantClick(Sender: TObject);
    begin     Dico1.AfficherSuivant;
    end;
     
    procedure TForm1.bModifierNomClick(Sender: TObject);
    begin     Dico1.CorrigerNom(edNom.text,'NouveauNom');
    end;
     
    procedure TForm1.bSupprimerEnregistrementClick(Sender: TObject);
    begin     Dico1.SupprimerEnreg(edNom.text);
    end;
     
    end.
    pour simplifier :
    1 ) le contenu du dico est passé entièrement en majuscules cela évite de se casser la tête avec les mélanges de minuscules+majuscules lors des recherches et les affichages sont passés en minuscules. (on pourra fignoler pour passer en majuscule le 1er caractère de chaque affichage.)

    2) les 3 StringList ne sont pas triées de sorte que l'indice courant ind soit représentatif pour les 3 StringList c'est à dire que ind est en quelque sorte l'indice de la ligne d'un tableau tracé en plaçant les 3 StringList côte-à-côte

    4) Dans le même état d'esprit on ajoute ou on supprime la totalité d'un enregistrement (nom + type + Def) pour conserver les alignements. (Par contre ces alignements ne sont pas modifiés par la modification d'un nom par exemple ... et pour modifier un Type ou une Def faudra t'inspirer de l'exemple de la procédure CorrigerNom() pour créer la suite)

    Pour sauver ton Dico sur le disque dur faudra créer les routines en question en utilsant dans la procédure Sauver de l'objet Dico 3 fois l'instruction du style maStringLlist1.SaveToFile(ExtractFilePath(Application.ExeName)+'StringLlist1.text') pour pouvoir lancer la sauvegarde dans une procédure TForm1.boutonSauverClick(sender..) l'instruction Dico1.Sauver; qui t'enverra les 3 StringList dans le dossier même où se loge ton .exe.

    ... bon stop pour aujourd'hui.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Il existe CaseSensitive dans la TStringList pour info !

    Utiliser 3 TStringList c'est dommage, une seule avec des objects, c'est plus clean, et surtout que le gain de performance pour le trie, pour un dico, c'est dommage de le perdre ...

    Pour la sérialization, voir DefineProperties de la TStringList (TPersistent)

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    A ShaiLeTroll :

    - "CaseSensitive" : vu dans l'aide-Delphi qui dit "Lisez CaseSensitive pour établir si le système de fichiers utilisé gère la distinction minuscules/majuscules des noms de fichiers..." or on n'est pas dans le cas des "noms de fichiers".

    - "Utiliser 3 TStringList c'est dommage, une seule avec des objects, c'est plus clean, et surtout que le gain de performance pour le trie, pour un dico, c'est dommage de le perdre ..." :
    Ok sur "plus clean", par contre pour le reste j'ai préférer simplifier au max d'autant plus que le projet de code de Babou se limitait à un dico de 100 enregistrements (certainement un dico spécifique) ... et avec les StringList on ajoute à volonté suivant l'espace mémoire du micro.
    Pour ce qui est du tri je l'ai remplacé dans le ZIP ci-joint par deux fonctions de recherche une de recherche sur nom et une de recherche en plein texte qui conduisent à tire d'exemple à la performance suivante : Dans un dico initilisé manuellement auquel j'ajoute 20000 enregistrements où le Nom, le Type et la Def sont pour chacun un texte aléatoire de 36 caractères et un 20001ème enregistrement où le Nom, le Type et la Def se limite au mot "fin" la recherche sur nom avec fin affiche le résultat après 12 millisecondes ... (alors que la création du dico aléatoire a mis 121208 millisec).

    - "DefineProperties" : je l'ai oublié celui-ci, mais j'irai voir à l'issue de ce message ... excuses.

    A babou :

    Tu trouveras dans le ZIP ci-joint un certain nombre de modifs au code de l'autre jour :
    - remplacement de boutons par un popUpMenu qui regroupe tout ce qui touche aux fonctions d'Ajouts-Modifs-Suppressions (mode saisie)
    - ajout de la sauvegarde du Dico sur disque dur et chargement automatique du Dico au lancement de l'exe.
    - ajout de boutons de navigation avant-arrière-début-fin dans le dico : c'est bon tant que le dico est presque vide ... le fonctions de recherche sont là pour le cas où le dico grossit.
    - suppression des AnsiUpperCase car vérif faite si le dico contient le nom Arsène et que je cherche arSènE il retouve bien Arsène.
    - fonction de recherche-en-plein-texte qui fouille dans les 3 stringList et qui affiche l'enrenregistrement dans lequel il retrouve le mot puis demande s'il faut continuer la recheche. Par contre, ce mode de recherche utilise la fonction Pos qui fait la distinction majuscules/minuscules et qui ne retrouve donc pas Arsène si je dis de chercher arSènE.
    - et les répercussions de ces modifs sur le reste.

    Mais en écrivant ceci, il me vient que j'ai complètement oublié que je voulais verrouiller les boutons de navigation et les boutons de recherche lorsque on est passé en mode-saisie ... mais bon cela fait partie des finitions à fignoler.

    Le fichier .ZIP précité a été annulé et remplacé par celui joint à mon message du 16/05/2007, 14h24.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    C'est bien, on a pas la même aide ! ou tu confonds avec le TDirectoryListBox

    Détermine si la casse est prise en compte quand les chaînes sont localisées, triées et identifiées comme des chaînes dupliquées.

    Syntaxe Delphi :

    property CaseSensitive: Boolean;

    Syntaxe C++ :

    __property bool CaseSensitive = {read=FCaseSensitive, write
    =SetCaseSensitive, nodefault};

    Description

    Utilisez CaseSensitive pour indiquer si les chaînes de la liste doivent être comparées en tenant compte de la casse. Affectez la valeur true à CaseSensitive pour que la liste de chaînes effectue la localisation, la recherche des doublons et le tri des chaînes en tenant compte de la casse. Affectez la valeur false à CaseSensitive pour que la liste de chaînes effectue ces opérations sans tenir compte de la casse.

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    A ShaiLeTroll :

    - "CaseSensitive" : Vérification faite mon F1 sur CaseSensitive m'avait envoyé dirctement sur TDirectoryListBox ... je devais avoir les yeux bouchés (?). Mais nous n'avons pas la même aide car dans les propriétés signalées à la rubrique "TStringList, propriétés", celles qui commencent avec un C sont chez moi (Delphi 5) : Capacity - Count - CommaText ... mais CaseSensitive n'y figure pas.

    Et le verdict du compilateur est clair : En ajoutant dans le code du Dico la ligne "ListeNoms.CaseSensitive:=false;" Delphi5 signale l'erreur suivante :

    [Erreur] uODico.pas(105): Identificateur non déclaré : 'CaseSensitive'

    Par contre j'ai trouvé une parade pour éviter à Babou le problème dû à la distinction majuscules/minuscules introduite par la fonction pos lors des recherches en plein-texte : au lieu de chercher "nom" dans "string" suffit de chercher UpperCase(nom) dans UpperCase(string) pour gommer les différences majuscules/minuscules qui perturbent cette fonction de recherche.

    - "TPersistent.DefineProperties" : J'ai lu, lu et relu l'aide ... et n'y ai rien pigé malgré l'exemple qui est joint à cette rubrique.

    A Babou et à ShaiLeTroll :

    - Tri du Dico : En méditant sur ce sujet j'ai abouti à la conclusion suivante :
    La 1ère idée était d'adapter QuickSort au tri des trois StringList (~ 20 lignes de code).
    La 2ème était d'exploiter l'esprit-StringList en profitant de l'instant de chaque saisie pour placer chaque chose directement à la place qui lui revient dans l'ordre alphabétique. (nécessiterait de modifier la fonction Ajouter et la fonction Modifier ~ 15 lignes).
    La 3ème idée joint l'utile à l'ergonomie d'utilisation : remplacement du TEdit "edNom" par une ComboBox qui affiche la liste des noms dans l'ordre alphabétique. Mais avant je vais vérifier avec le Dico-aléaoire si la ComboBox est capable de gérer disons au moins 20000 noms de 36 caractères pour éviter des surprises ultérieures.

    - A propos du Dico-Aléatoire : Le lancement de la génération de ce dico d'essai fait apparaître un showMessage qui dit "Entrer un nombre Entier d'erengistrements ... " sans dire dans laquelle des 4 lucarnes de saisie il faut entrer ce nombre : il s'agit de celle qui figure dans la GroupBox où se trouve le bouton "Créer dico Aléatoire".

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Points : 754
    Points
    754
    Par défaut
    Gilbert a écrit:
    "TPersistent.DefineProperties" : J'ai lu, lu et relu l'aide ... et n'y ai rien pigé malgré l'exemple qui est joint à cette rubrique.


    Seules les propriétés published pour lesquelles le compilateur génère des informations de type à l'execution sont streamables.
    Pour les autres proprietes il faut surcharger defineproperties pour rendre l'objet sérialisable afin qu'il soit traité par le systeme de gestion de flux de Delphi.
    L'exemple de Delphi présente la démarche à suivre pour enregistrer et charger une propriété non publiée.

    La propriété CaseSensitive à été ajouté à la classe TStringList à partir de Delphi7 ou peut être Delphi6(Je n'ai pas Delphi6, ne peut pas vérifier).

    @+

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 577
    Points : 25 225
    Points
    25 225
    Par défaut
    Normal, CaseSensitive c'est D6+, je crois, tout comme ValueFromIndex D7+

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Merci à tous les deux pour ces infos.
    Au fait, la ComboBox a bien accepté le minimum de 20000 noms de 36 caractères chacun et je suis en-train de fignoler les répercussions sur son intégration dans le code du Dico ... mais, 17h29, dans la bagarre j'ai sauté le repas de midi, donc stop pour aujourd'hui.
    A+

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Voiçi le fichier Dico1.ZIP qui tient compte des modifs annoncées et qui annule et remplace celui qui était joint à mon msg du 13/05/2007 16h22 ... et que je vais m'empresser de supprimer pour préserver mon quota de Zip's.
    A+
    Fichiers attachés Fichiers attachés

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Info complémentaire / mon message précédent. Comme le fichier Dico1.ZIP ne comporte pas de mode d'emploi, passer un message s'il y a une question.

    A savoir dès à présent que s'il est utilisé la fonction "DiccoAléatoire" (Bouton D.A) pour faire des essais, ne pas oublier de supprimer manuellement les trois fichiers DicoAleatNoms.dic, DicoAleatTypes.dic et DicoAleatTypes.dic ... sinon il risque d'y avoir des embrouilles si on veux créer le Dico courant car il faut savoir qu'à chaque lancement l'exe cherche à charger automatiquement trois fichiers nommés Dico1Noms.dic + Dico1Types.dic + Dico1Types.dic = Dico courant, mais jamais ceux du Dico Aléatoire ... et comme le Dico Aléatoire n'a de raison d'être que pour faire des essais au début je ne me suis pas compliqué la vie avec des OpenDialog et autres fignolages.
    De plus si l'on utilise la fonction DiccoAléatoire sur le Dico-courant tout ajout, suppression, modif apportée ensuite au contenu jusquà la fermeture de l'exe est sauvée automatiquement avec le préfixe DicoAleat ...
    (De plus rien n'empèche après essais de supprimer carrément ou de neutraliser la fonction DicoAléatoire dans le code même).

Discussions similaires

  1. Passage de tableau 2D en parametre de fonction
    Par gofio79 dans le forum Windows
    Réponses: 10
    Dernier message: 02/04/2009, 18h08
  2. tableau de structure en parametre fonction
    Par Dark_Alex69 dans le forum Débuter
    Réponses: 3
    Dernier message: 12/11/2007, 18h38
  3. Passage de structure en parametres
    Par beb30 dans le forum Visual C++
    Réponses: 10
    Dernier message: 28/08/2006, 17h31
  4. Tableau de structures en parametre d'une fonction
    Par -No Comment- dans le forum C
    Réponses: 19
    Dernier message: 29/03/2006, 15h00
  5. passage d'un tableau en parametre d'une fonction
    Par ataya dans le forum C++Builder
    Réponses: 10
    Dernier message: 26/10/2005, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo