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

Flash Pascal Discussion :

L'objet string de as2


Sujet :

Flash Pascal

  1. #1
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut L'objet string de as2
    Ma question est la suivante :

    comment en flashpascal implanter et récupérer les méthodes de l'objet string exemple (de méthode) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     function substring(start:Number, length:Number) : String
    ?

    Merci

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    pour cela il faut déclarer un objet TString

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    type
      TString = external class(String)
        property Length: Number;
        constructor Create(Value: String = '');
        function charAt(Index: Number): TString;
        charCodeAt(Index: Number): Number;
        concat(value: TObject): TString;
        class function fromCharCode(code: Number): TString;
     ...
        function substr(start, end: Number): TString;
      end;
    note cependant que FlashPascal utilise la méthode String.substr quand tu écris Copy(str, 1, 2) par exemple

    j'ai prévu une mise à jour mais je manque de temps pour la tester...éventuellement je peux faire une release et vous laisser me remonter les bugs

    1) les variants : un type générique qui peut contenir n'importe quoi, comme les OleVariant de Delphi, on peut donc invoquer une méthode de variant sans avoir à déclarer la classe correspondante (cf les exemples de pilotage de Word ou Excel depuis Delphi). Les membres sont accessibles de deux façons : variant.nom ou variant['nom'].

    2) les objets dynamique, un peu comme les open array mais sur des objets [x : 5; y = 6], pratique pour déclarer une matrice de transformation par exemple.

    exemple (notez l’absence de l'unité Flash8 !):
    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
     
    program VariantDemo;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    (*
     
      Le type Variant est très similaire au type OleVariant de Delphi
     
      attention, les méthodes d'un variant sont sensibles à la case !
      
      les parenthèses sont obligatoires pour invoquer une méthode,
      même si elle ne possède pas de paramètres.
     
    *)
     
    var
      _root: Variant external;
      Clip : Variant;
      Str  : string;
     
      org  : Variant;
     
    begin
      Clip := _root.createEmptyMovieClip('test', 1);
     
      // accès par nom
      Clip['color'] := $ff0000;
     
      // accès par nom plus complexe
      Str := 'co';
      Clip['col' + 'or'] := Clip[Str + 'lor'] or $FF;
     
      // accès par membre
      Clip.beginFill(Clip.color);
     
      Clip.lineTo(100,  0);
      Clip.lineTo(100,100);
      Clip.lineTo(  0,100);
      Clip.endFill();  // avec parenthèses, sinon c'est un membre !
     
      // création dynamique d'un objet
      org := [x: 100; y: 100];
      {
      // équivalent au code ci-dessous !
      type
        TOrg = class
          x, y: Integer;
        end;
      var
        org: TOrg;
      begin
        org := TOrg.Create;
        org.x := 100;
        org.y := 100;
      end;
        
      }
     
      Clip._x := org.x;
      Clip._y := org['y'];
      Clip._rotation := 30;
    end.
    Nom : variants.jpg
Affichages : 97
Taille : 14,4 Ko
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Pour l'instant, je n'ai regardé que la première partie de ta réponse...

    En effet, j'avais fait comme toi mais j'avais oublié de faire :

    monTstring:=TString.create('') donc ça plantait... un oubli hier soir.

    petite démo :
    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
     
    program PTString;
     
    {$FRAME_WIDTH 550}
    {$FRAME_HEIGHT 400}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8,UButton;
     
    type
      TString = external class(String)
        property Length: Number;
        constructor Create(Value: String = '');
        function charAt(Index: Number): String;
        function charCodeAt(Index: Number): Number;
        function concat(value: TObject): String;
        class function fromCharCode(code: Number): String;
        function substring(start, length: Number): String;
      end;
     
     TButton1=class(TButton)
      procedure onClick;override;
     end;
     
     TEssaiSTring=class(movieclip)
      button1:TButton1;
      myFont:TextFormat;
      Label:TextField;
      constructor create;
     end;
     
    var
       monString:TString;
       resultat:TextField;
     
    Constructor TEssaiString.Create;
    begin
     inherited Create(_Root,'essai',0);
     
      Button1:=TButton1.Create(self,10,10,150);
      Button1.caption:='essai substring';
     
      MyFont:=TextFormat.Create('Papyrus',20, 0, True, True);
     
      Label :=TextField.Create(self,'etiquette',self.getNextHighestDepth(),10,100,370,40);  //pour l'affichage de la chaîne complète
      with Label do
      begin
       setNewTextFormat(MyFont);
       text:="Peut-être que ça marche correctement !";
      end;
     
      resultat:=TextField.Create(self,'resultat',self.getNextHighestDepth(),10,180,150,40);
      resultat.setNewTextFormat(MyFont);
     
      monstring:=TString.Create(label.text);
    end;
     
     
     
    procedure TButton1.onClick;
    begin
      resultat.text:=monstring.substring(14,23);//je prends les 23 premiers caractères de la chaîne et je démarre au 14 ème
    end;
     
     
    begin
     TEssaiString.Create;
    end.
    UButton ...

    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
     
    unit UButton;
     
    interface
    uses Flash8;
     
     
    Type
     TButton=class(movieclip)
     private
      click:Boolean;
      skin1,skin2:movieclip;
      w,h:number;
      FText   : TextField;
      font:TextFormat;
      procedure skin;
      procedure SetCaption(value:string);
      procedure onPress;override;
      procedure onMouseUp;override;
     public
      procedure onClick;virtual;
      constructor create(parent:movieclip;left,top,width:number);
      property Caption:string read FText write SetCaption;
     end;
     
    implementation
     
    constructor TButton.Create(parent:movieclip;left,top,width:number);
    begin
     inherited Create(parent,'button',movieclip(parent).getNextHighestDepth());
     w:=width;
     h:=w/3;
     skin1:=movieclip.create(self,'',1);
     skin2:=movieclip.create(self,'',2);
     with skin1 do
     begin
      linestyle(1,$646464);
      BeginFill($F0F0F0);
      moveto(0,h);
      lineto(0,0);
      lineto(w,0);
      linestyle(3,$646464);
      lineto(w,h);
      lineto(0,h);
     end;
     
     with skin2 do
     begin
      linestyle(2,$808080);
      BeginFill($F0F0F0);
      moveto(0,h);
      lineto(0,0);
      lineto(w,0);
      lineto(w,h);
      lineto(0,h);
     end;
     
     
     font := TextFormat.Create('arial', 14);
     with font do
     begin
      color := clBlack;
      align:='center';
     end;
     click:=false;
     skin;
     FText:=TextField.Create(self,'caption',3,0,0,w,h/2);
     FText.setNewTextFormat(font);
     _x:=left;
     _y:=Top;
    end;
     
    procedure TButton.skin;
    begin
     if not click then
     begin
      skin1._visible:=true;
      skin2._visible:=false;
     end else
     begin
      skin1._visible:=false;
      skin2._visible:=true;
     end;
    end;
     
    procedure TButton.SetCaption(Value: string);
    begin
     with FText do
     begin
       Text := Value;
       autosize:='center';
      _y:=(h-_Height)/2;
      _x:=(w-_width)/2;
     end;
    end;
     
    procedure TButton.onClick;
    begin
     
    end;
     
    procedure TButton.onPress;
    begin
     click:=true;
     skin;
     onClick;
    end;
     
    procedure TButton.onMouseUp;
    begin
     click:=false;
     skin;
    end;
     
     
    end.

    C'est bon...

    Merci pour tes lumières

    je regarde la seconde partie de ta réponse...

  4. #4
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    note cependant que FlashPascal utilise la méthode String.substr quand tu écris Copy(str, 1, 2) par exemple
    vu mais c'était tout de même intéressant de récupérer toutes les méthodes de string...

    Pour ta démo sur les variants, en effet c'est une découverte...
    Tu fais comme tu le sens, ceci dit on veut bien tester si tu en as besoin...

    Bon WE

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 140
    Billets dans le blog
    9
    Par défaut
    Très intéressante discussion !

    Anthony, je ne sais pas si c'est dans tes projets, mais en rassemblant toutes tes unités tu pourrais faire une librairie de composants visuels, un projet concurrent à FlashCL.

    Sinon moi aussi je veux bien tester la nouvelle version, même si je dois avouer que les "variants" me dépassent un peu : ce sera l'occasion d'apprendre.

    J'ai réuni tous les exemples postés sur le forum depuis le début, y compris ceux que Paul a inclus dans certaines archives sans les reprendre ensuite. Eh bien je peux vous dire qu'il y en a un certain nombre.

    J'avais pensé à faire une petite application Delphi qui lirait dans ces fichiers comme dans une base de données, par exemple à partir d'un mot-clé entré par l'utilisateur. Qu'est-ce que vous en pensez ?

  6. #6
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Citation Envoyé par Roland Chastain Voir le message
    Très intéressante discussion !

    Anthony, je ne sais pas si c'est dans tes projets, mais en rassemblant toutes tes unités tu pourrais faire une librairie de composants visuels, un projet concurrent à FlashCL.
    En effet, mais il faudrait les reprendre... Par exemple, le bouton...maintemant, j'ai le bizeau...le trackbar, il faut le revoir...en progressant, je me rends compte de certaines imperfections...je dois avoir fait aussi une statusbar, toolbar...il faut que je fouille.
    mais le terme :un projet concurrent à FlashCL, loin de moi cette idée. Je n'ai pas cette prétention...

    C'est vrai qu'il commence à y avoir pas mal d'informations à dépoussièrer sur le forum. Très bonne idée une espèce de Faq pour Flashpascal...
    Si le coeur t'en dit...

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 140
    Billets dans le blog
    9
    Par défaut
    D'après vos exemples et la documentation ActionScript, j'ai écrit ce code.

    Pourquoi ai-je un "undefined" pour la propriété Length ?

    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
     
    program TString1;
     
    uses Flash8;
     
    {$FRAME_WIDTH 320}
    {$FRAME_HEIGHT 200}
    {$BACKGROUND 0}
     
    ////////////////////////////////////////////////////////////////////////////////
    const
      LARGEUR = 320;
      HAUTEUR = 200;
      VER = 'Compilateur FlashPascal 2 v13.04.29'#13;
     
    var
      t : TextField;
      f : TextFormat;
      s : string;
     
    ////////////////////////////////////////////////////////////////////////////////
     
    type
      TString = external class(String)
        property length: Number;
        constructor Create(Value: String = '');
        function charAt(Index: Number): String;
        function charCodeAt(Index: Number): Number;
        function concat(value: TObject): String;
        class function fromCharCode(code: Number): String;
        function substring(start, length: Number): String;
        function substr(start, end: Number): String;
        function valueOf(): String;
      end;
     
    var
      chaine: TString;
     
      begin
    ////////////////////////////////////////////////////////////////////////////////
      f := TextFormat.Create('Tahoma', 16);
      f.color := clWhite;
      f.leftMargin := 5;
      t := TextField.Create(_root, 't', 0, 0, 0, LARGEUR, HAUTEUR);
      t.SetNewTextFormat(f);
    ////////////////////////////////////////////////////////////////////////////////
     
      chaine := TString.Create('ABCDE');
     
      s := chaine.CharAt(0)                 // A
         + #13
         + FloatToStr(chaine.CharCodeAt(0)) // 65
         + #13
         + FloatToStr(chaine.length)        // 5
         + #13
         + chaine.substr(1, 3)              // BCD
         + #13
         + chaine.valueOf();                // ABCDE
     
    ////////////////////////////////////////////////////////////////////////////////
      t.text := VER + s;
      f.size := 12;
      f.color := clLime;
      t.SetTextFormat(0, Length(VER)-1, f);
    ////////////////////////////////////////////////////////////////////////////////
    end.

  8. #8
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    parce que ActionScript est case sensitive

    dans la déclaration de TString il faut mettre un l minuscule à length.

    Dans le reste du code tu peux faire ce que tu veux; avec FlashPascal, c'est uniquement dans la déclaration qu'elle est case sensitive.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 140
    Billets dans le blog
    9
    Par défaut
    Merci, Paul, ça marche maintenant.

    J'ai apporté la correction dans le code ci-dessus.

    Cet objet String, je crois qu'on n'en a pas vraiment besoin ; mais pour voir le rapport entre FlashPascal et ActionScript, c'est un bon exemple.

Discussions similaires

  1. [POO] conversion d'un Objet String en Objet Array
    Par kimcharlene dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/09/2007, 16h25
  2. [javascript] objet string + comparaison
    Par herve70 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/11/2006, 16h19
  3. [POO] Objet string et copie
    Par Gruik dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/11/2006, 17h34
  4. [POO] du texte a partir d'un objet String
    Par jejam dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/01/2006, 15h08
  5. Comment tester qu'un objet String est bien initialisé
    Par Jones dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 17/09/2004, 11h29

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