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 :

Une console et ses fonctions


Sujet :

Flash Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 158
    Billets dans le blog
    9
    Par défaut Une console et ses fonctions
    En utilisant Algebrus j'ai eu l'idée de faire pour mes programmes Flash Pascal une console avec des instructions telles que Write(), ou même Info() ou ShowVec().

    Pour le moment j'en suis à chercher comment je pourrais m'y prendre. Voici mon premier essai :

    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
    program essaiConsole;
     
    {$FRAME_WIDTH 640}
    {$FRAME_HEIGHT 300}
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
     
    uses
      Flash8;
     
    var
      t: textField;
      f: textFormat;
      a: array of string;
      i: integer;
     
    const
      l = 15;
     
    procedure initConsole;
    begin
      f := textFormat.create('Georgia', 16);
      f.color := $000088;
      t := textField.create(_root, 't', 0, 0, 0, 640, 300);
      t.setNewTextFormat(f);
    end;
     
    procedure writeLn(s: string);
    var
      i: integer;
    begin
      //
      a[Length(a)] := s;
      //
      if Length(a) <= l then
        t.text := t.text + a[Length(a)-1] + #13
      else
        begin
          t.text := '';
          for i := 0 to l - 1 do t.text := t.text + a[i + Length(a) - l] + #13;
        end;
    end;
     
    begin
      initConsole;
      for i := 1 to 20 do
        writeLn('ligne ' + intToStr(i));
    end.
    Je n'ai pas réussi à trouver une combinaison qui tombe juste entre la taille de la police, le nombre de lignes et la hauteur du champ.

    Sinon, le tableau de chaînes est-il une bonne idée ? Et d'utiliser un seul TextField ?

    J'ai vu dans l'unité Flash8 la propriété multiline. A quoi sert-elle exactement ?
    Fichiers attachés Fichiers attachés

  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 ce genre de chose il vaut mieux prendre une police non-proportionnelle comme "Courier New"

    sinon tu peux jouer avec une police Bitmap
    Nom : Presse-papiers-1.jpg
Affichages : 207
Taille : 12,8 Ko

    mais ça pose quelque problème de clavier...
    console.zip
    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 158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 158
    Billets dans le blog
    9
    Par défaut
    Oui, "Courier New", c'est mieux. J'ai fait la modification.

    J'aime beaucoup ton FlashDos.

    Et tout en étant amusant, c'est en même temps un exemple très utile. On peut en faire, des choses, avec une police Bitmap...

  4. #4
    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
    ah au fait, "multiline" c'est pour que la touche ENTREE permette de passer à la ligne dans un Textfield de type input
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 158
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ah au fait, "multiline" c'est pour que la touche ENTREE permette de passer à la ligne dans un Textfield de type input
    C'est pas mal !

    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
     
    program VotreNom;
     
    {$FRAME_WIDTH 640}
    {$FRAME_HEIGHT 300}
    {$FRAME_RATE 12}
    {$BACKGROUND $838383}
     
    uses
      Flash8;
     
    type
      TEditBox = class(TextField)
        procedure onKeyDown;
      end;
     
    var
      e: TEditBox;
      t: TextField;
      f1, f2: textFormat;
     
    procedure TEditBox.onKeyDown;
    begin
      if Key.getAscii = 13 then
      begin
        t.Text := e.Text;
      end;
    end;
     
    begin
      f1 := textFormat.create('Courier New', 16);
      f1.color := $008000;
      //
      f2 := textFormat.create('Courier New', 16);
      f2.color := $000080;
      //
      e := TEditBox.Create(_root, 'entree', 0, 10, 10, 620, 130);
      e.type := 'input';
      //
      e.multiline := true;
      //
      Selection.setFocus(e);
      Key.addListener(e);
      e.setNewTextFormat(f1);
      //
      t := TextField.Create(_root, 'sortie', 1, 10, 160, 620, 130);
      t.setNewTextFormat(f2);
     
      _root.opaqueBackground := $F8FCF8;
    end.
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 158
    Billets dans le blog
    9
    Par défaut Traitement récursif d'une chaîne de caractères
    Bonsoir !

    J'ai repris mon projet d'une console pour des exercices de programmation avec Flash-Pascal. Par console j'entends une fenêtre avec entrée et sortie de texte. L'idée serait d'utiliser Flash-Pascal comme on utilise souvent JavaScript ou PHP, lorsqu'on veut permettre au visiteur d'une page d'essayer un programme.

    Le programme que je vous propose a un affichage en trois parties : un texte statique, une boîte d'entrée, un texte pour les résultats. La présentation est encore très perfectible, mais ça fonctionne.

    Vous remarquerez qu'on peut faire défiler les résultats avec la souris lorsqu'ils dépassent la capacité du TextField.

    Cet exemple pourrait aussi être l'occasion de revenir sur un sujet abordé il y a quelque temps dans une autre discussion, à savoir le traitement des tâches longues. Mon transpositeur fonctionne correctement jusqu'à 6 ou 7 caractères mais au-delà ça ne va plus.

    Vous me direz que la vocation de Flash-Pascal n'est pas d'effectuer des tâches longues, mais c'est toujours intéressant d'étudier le fonctionnement des choses.

    Transpositions.swf

    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
     
    { Transpositions.pas
      Exemple Flash-Pascal
      R. Chastain }
     
    program Transpositions;
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 600}
    {$FRAME_HEIGHT 400}
     
    type
      TEditBox = class(TextField)
        procedure onKeyDown;
      end;
     
    var
      e: TEditBox;
      t: TextField;
      s: string;
      c: integer;
     
    function Transpose(pS: string; n: integer): string;
    var
      temp: string;
      i, L: integer;
    begin
      temp := '';
    { Par exemple,
      si pS = 'abcde'
      et n = 3
      alors }
      L := Length(pS);
    { L = 5 }
      for i := 1 to L - n do temp := temp + pS[i];
    { temp = 'ab' }
      temp := temp + pS[l];
    { temp = 'ab' + 'e' }
      for i := L - n + 2 to L do temp := temp + pS[i - 1];
    { temp = 'abe' + 'cd' }
      result := temp;
    { result = 'abecd' }
    end;
     
    procedure Generateur(pS: string; n: integer);
    var
      i: integer;
      temp: string;
    begin
      temp := pS;
     
      for i := 1 to n do
      begin
        temp := Transpose(temp, n);
        if n = 1 then
        begin
          Inc(c);
          t.text := t.text + temp + ' ' + IntToStr(c) + #13
        end
        else
          Generateur(temp, n - 1);
      end;
    end;
     
    procedure TEditBox.onKeyDown;
    begin
      if Key.getAscii = 13 then
      begin
        s := e.text;
        t.text := ''; c := 0;
        Generateur(s, Length(s));
      end;
    end;
     
    begin
      with TextField.Create(_root, 'label', 0, 0, 0, Stage.Width-1, 4*16+4) do
      begin
        setNewTextFormat(TextFormat.Create('Courier New', 12));
        text := "Transpositions d'une chaîne de caractères."#13
              + 'Programme Flash-Pascal.'#13
              + 'Votre saisie ?';
      end;
     
      e := TEditBox.Create(_root, 'input', 1, 0, 3*16+4, Stage.Width-1, 16+4);
      e.setNewTextFormat(textFormat.Create('Courier New', 12));
      e.type := 'input';
      e.border := true;
      Selection.setFocus(e);
      Key.addListener(e);
     
      t := TextField.Create(_root, 'output', 2, 0, 3*16+4+16+4, Stage.Width-1,
                            Stage.Height - (3*16+4+16+4));
      t.SetNewTextFormat(TextFormat.Create('Courier New', 12));
      t.text := '';
      c := 0;
    end.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/04/2015, 15h44
  2. Tri tableau HTML en fonction d'une colonne et ses valeurs.
    Par hugerma dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/12/2014, 08h04
  3. [sdl+glut] une console en trop
    Par khayyam90 dans le forum GLUT
    Réponses: 3
    Dernier message: 02/08/2004, 09h15
  4. Comment envoyer une commande à une console ?
    Par seb_asm dans le forum Assembleur
    Réponses: 3
    Dernier message: 27/03/2004, 14h09
  5. Taille d'une console sous linux
    Par Shinjuku dans le forum C
    Réponses: 7
    Dernier message: 13/06/2003, 12h44

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