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 :

Usage de la procédure SetTextFormat [Flash Pascal]


Sujet :

Flash Pascal

  1. #1
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut Usage de la procédure SetTextFormat
    Bonjour !

    J'ai une ou deux questions sur la procédure SetTextFormat, que je n'arrive pas à utiliser quoiqu'il me semble en avoir compris le principe : appliquer un format à une partie d'un texte.

    Premier problème, compte-t-on à partir de 0 ou de 1 ? La question concerne aussi la fonction Pos : est-ce par erreur ou délibérément que la fonction renvoie 0 pour le premier caractère ?

    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
    { --- extrait de Flash8.pas --------------------------------------------------
     
    type
      ...
      TextField = external class
        ...
        procedure setTextFormat(beginIndex, endIndex: Number; textFormat: TextFormat);
        
      ---------------------------------------------------------------------------- }
     
    program setTextFormat1;
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 400}
    {$FRAME_HEIGHT 300}
     
    const
      s = '123456789';
     
    var
      t: TextField;
      f1, f2: textFormat;
     
    begin
      f1 := TextFormat.Create('Courier', 16);
      f2 := TextFormat.Create('Courier', 24);
      t := TextField.Create(nil, 't', 0, 10, 10, 380, 280);
      t.setNewTextFormat(f1);
      t.text := s+Chr(13)+Chr(10)+'Pos(''1'', ''123456789'') = '+IntToStr(Pos('1', s));
      t.setTextFormat(3,6,f2);
    end.
    Deuxièmement, voici un exemple qui ne marche pas du tout. Je n'y vois pas d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      t.text := 'abcdefghijklmnopqrstuvwxyz';
      t.setTextFormat(10,6,f2);
    Heureusement il y a une solution de secours avec la propriété html, qui permet d'obtenir le même résultat, mais j'aurais quand même bien voulu savoir si l'autre manière est à abandonner ou non.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    La question est pertinente

    setTextformat commence à 0, Pos() devrait en effet retourner 1 on peut au choix considérer que c'est un bug...ou une particularité ^^

    En fait, Pos(String) est compilé comme String.IndexOf() qui retourne 0 pour le première caractère, mais j'aurais du ajouter 1 au résultat.

    Pour ce qui est du deuxième problème il est tout bête, setTextFormat() utilise deux indexes et non un indexe et une longueur...tu dois donc écrire t.setTextFormat(10,16,f2); pour modifier le format des caractères 10 à 16.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Merci Paul pour la réponse.

    Pour le deuxième exemple, je ne sais pas où j'avais la tête.

    Donc la procédure SetTextFormat fonctionne parfaitement et (contrairement à ce que j'ai fait dans l'exemple ci-dessus), on n'a pas besoin de déclarer plusieurs formats.

    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
    program setTextFormat2;
     
    { FlashPascal 2 v13.01.02 }
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 400}
    {$FRAME_HEIGHT 300}
    {$BACKGROUND $310062}
    { DarkIndigo }
     
    const
      s = 'abcdefghijklmnopqrstuvwxyz';
     
    var
      t: TextField;
      f: textFormat;
      i: integer;
     
    begin
      f := TextFormat.Create('Courier', 20);
      f.color := $FFFFFF;
     
      t := TextField.Create(nil, 't', 0, 10, 10, 380, 280);
      t.SetNewTextFormat(f);
      t.text := s;
     
      f.color := $F984E5; { PaleMagenta }
    { Appliquer le format aux lettres 'b' à 'f' }
      t.SetTextFormat((2-1), 6, f);
     
      f.color := $ADD8E6; { LightBlue }
    { Appliquer le format à 3 lettres à partir de 'm' }
      i := Pos('m', s)+1;
      t.SetTextFormat((i-1), i+2, f);
    end.
    Images attachées Images attachées  
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Pour ne pas encombrer cette discussion, je reprends ici ma remarque sur la procédure SetTextFormat.

    Citation Envoyé par Paul TOTH Voir le message
    Alors pour SetTextFormat, c'est une fonction de Flash, autant je peux rendre la fonction Pos() du Pascal conforme à ce qu'on attend - c'est en fait un String.IndexOf() + 1, autant la méthode Flash restera 0 basée
    Oui, mais apparemment le second index est basé sur 1.

    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
    program setTextFormat3;
    { FlashPascal 2 v13.03.16 }
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 400}
    {$FRAME_HEIGHT 300}
    {$BACKGROUND $310062}
    { DarkIndigo }
     
    const
      s = '0123456789';
     
    var
      t: TextField;
      f: textFormat;
     
    begin
      f := TextFormat.Create('Courier', 20);
      f.color := $FFFFFF;
     
      t := TextField.Create(nil, 't', 0, 10, 10, 380, 280);
      t.SetNewTextFormat(f);
      t.text := s;
     
      f.color := $F984E5; { PaleMagenta }
    { Appliquer le format aux chiffres '1' à '3' }
      t.SetTextFormat(1, 3, f); // le '3' reste en blanc
     
      f.color := $ADD8E6; { LightBlue }
    { Appliquer le format aux chiffres '6' à '8' }
      t.SetTextFormat(Pos('6', s)-1, Pos('8', s)-1, f); // le '8' reste en blanc
    end.
    Bon, ça a assez peu d'importance, mais je voulais quand même le signaler.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    en fait c'est marqué dans la doc

    endIndex: Number [optional] - An integer that specifies the first character after the desired text span. As designed, if you specify beginIndex and endIndex values, the text from beginIndex to endIndex-1 is updated. If you specify beginIndex but do not specify endIndex, the TextFormat is applied to the single character specified by beginIndex.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Vu !
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Procédure et fonction : les différences et les usages de chacune ?
    Par cpattin dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 06/08/2007, 01h28
  2. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 11h51
  3. ProgressBar avec plusieurs procédures
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/09/2002, 19h03
  4. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 13h27
  5. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 12h08

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