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 :

TStrings en variable (ou constante)


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 22
    Par défaut TStrings en variable (ou constante)
    Bonjour à tous,

    je cherche la manière de définir un Tstrings comme variable ou constante.

    J'ai beau me creuser la tête mais rien n'y fait... Voici mon code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Var
      Flags : TStrings = ['A','B','C','D','E','F','G','H','I'];
    mais ca ne fonctionne pas... ca doit etre simple mais je dois avouer que je sèche...

    Google, le forum, rien n'y fait...

    Merci

  2. #2
    Membre émérite Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Par défaut
    Salut!

    TStrings est une classe. Et comme n'importe quelle classe, tu dois créer une instance de celle-ci qui sera stockée dans une variable objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
      S: TStringList;
    begin
      S := TStringList.Create;
      S.Add('A');
      S.Add('B');
      //etc.
      S.Free;
    end;
    Quel est ton objectif au juste ?

  3. #3
    Dry
    Dry est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 48
    Par défaut
    Si tu veux vraiment initialiser ta variable Flag à la compilation, utilise un tableau statique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const 
      FFlags : array[0..4] of Char = ('A', 'B', 'C', 'D', 'E');
    Bon dev !
    Dry

  4. #4
    Expert confirmé

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    +1 pour Dry, et si tu veux faire une sorte de IndexOf sur ton tableau, il y a la routine AnsiIndexStr.

    Une application très intéressante de ces deux notions : Comment faire un Case Of avec des String ?
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Citation Envoyé par Kanter
    Bonjour à tous,

    je cherche la manière de définir un Tstrings comme variable ou constante.

    J'ai beau me creuser la tête mais rien n'y fait... Voici mon code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Var
      Flags : TStrings = ['A','B','C','D','E','F','G','H','I'];
    mais ca ne fonctionne pas... ca doit etre simple mais je dois avouer que je sèche...

    Google, le forum, rien n'y fait...

    Merci
    Déjà, 1ère chose, Tstrings est une classe abstraite :
    on ne déclare pas un objet à partir d'une classe abstraite (parce que les méthodes déclarées ne sont pas forcément toutes implémentées), on déclare plutot l'un de ses décendants. Par contre, lorsqu'on ne sait pas à priori quel classe dérivée va être passé à une procédure, le paramètre est,lui, défini avec la classe abstraite.
    Exemples :

    Classe abstraite : TStrings
    Objets que l'on déclare : TStringList, THashStringList
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var MaListe:TStringList;
    Exemple de déclaration de procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function StringListToString(UneListe:TString):string;
    Utilisation de la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s:=StringListToString(MaListe);
    Classe abstraite : TStream
    Objets que l'on déclare : TMemoryStream, TFileStream,...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var MonFichierDisqueDur:TFileStream;
                   MonFichierenMemoire:TMemoryStream;
    Exemple de déclaration de procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure SaveStringToStream(s:string;UnFLux:TStream);
    Utilisation de la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SaveStringToStream('Coucou',MonFichierDisqueDur);
    SaveStringToStream('Salut',MonFichierenMemoire);
    Classe abstraite : TWinControl
    Objets que l'on déclare : TForm, TPanel, TLabel,...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var Form1:TForm;
                   Panel1:TPanel;
                   Label1:TLabel;
    Exemple de déclaration de procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function ObtenirCaption(UnControleFenetre:TWinControl):string;
    Utilisation de la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    s:=ObtenirCaption(Form1);
    s:=ObtenirCaption(Panel1);
    s:=ObtenirCaption(Label1);
    2ème remarque : on ne peut pas déclarer un objet comme constante (mais il y a d'autres moyens).

    si tu déclares ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var MaListe:TStringList;
    en fait, MaListe est un pointeur sur une zone mémoire qui comprendra les variables de la classe et une variable particulière, l'instance, qui pointe sur les différentes méthodes de la classe.
    L'instance d'une classe est toujours accessible via le type de la classe, heureusement et celà nous permet toujours de pouvoir accéder à certaines méthodes, lorsqu'aucun objet n'existe pas encore :
    Ici, le créate, crée la zone de mémoire pour un nouvel objet, et l'adresse de cette zone de mémoire est transmise à notre pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaListe:=TStringList.Create;
    Si le Create échoue, on aura MaListe=nil, sinon, MaListe contiendra une adresse, et on pourra accéder aux différentes zones mémoires de l'objet nouvellement créé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if MaListe<>nil then
       MaListe.Text:='Coucou tout le monde';
    Ceci pour expliquer que l'on ne peut pas à la fois déclarer un pointeur (ça on peut) et allouer une zone mémoire (dans la partie const, on ne peut pas le faire) en même temps afin d'obtenir une constante sur un objet.

    Mais il y a d'autres moyens...
    - TStringList possède une propriété Text, qui accepte une chaîne de caractère (string). Donc on peu affecter à un TStringList une constante chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const 
      FFlagsString='A'#13#10'B'#13#10'C'#13#10'D'#13#10'E'#13#10'F';
    - Tu peux très bien déclarer une variable globale de type TStringList, et créer et détruire l'objet dans les blocs Initialization et finalization de ton unité. Ainsi tu aura créé une espèce de TStringList constante
    Démonstration :
    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
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    const
      FFlagsString='A'#13#10'B'#13#10'C'#13#10'D'#13#10'E'#13#10'F';
    type
      TForm1 = class(TForm)
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      FFLags :TstringList;
    implementation
     
    {$R *.dfm}
    initialization
      FFLags:=TStringList.Create;
      FFLags.Text:=FFlagsString;
    finalization
      FFLags.Free;
    end.
    Bon dev

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/07/2007, 10h18
  2. Réponses: 3
    Dernier message: 25/01/2007, 14h12
  3. Réponses: 3
    Dernier message: 06/10/2006, 14h47
  4. Variable ou constante ?
    Par nicoreims dans le forum Langage
    Réponses: 5
    Dernier message: 11/08/2006, 11h04
  5. [CR9] variables deviennent constantes
    Par Eowyn dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 27/09/2004, 09h56

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