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 :

Stage et redimensionnement [Flash Pascal]


Sujet :

Flash Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut Stage et redimensionnement
    Je crois que je n'ai pas tout compris en ce qui concerne l'objet stage...
    En effet pour moi, il s'agit de la surface utile du navigateur.
    Et si je veux optimiser la scène d'un fichier flash, j'ai besoin le plus souvent de fixer la hauteur de mon movie à la hauteur utile du navigateur et de recalculer proportionnellement sa largeur...

    Donc, j'ai fait un essai le plus simple possible dans un premier temps :

    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 stage;
     
    uses
     Flash8;
     
    {$FRAME_WIDTH   1024}
    {$FRAME_HEIGHT  768}
    {$BACKGROUND $ffffff}
     
    const
     w=1024;
     h=1024; //démesuré volontairement puisque en hauteur utile on a environ 570 pixels en format standard(1024x768)
     
    type
      mymc=class(movieclip)
       procedure DoResize;
      end;
     
     var
         stag:TStage;
         mc:mymc;
     
    procedure mymc.doResize;
    begin
     if _Height>stag.height then //si la hauteur du movie est >à la hauteur utile navigateur alors
     begin
       _width := (stag.height*_width)/(_height); //garder les proportions en largeur
       _height :=stag.height; //imposer la hauteur utile du navigateur pour éviter de déborder en bas
      end;
      //else....
     
    end;
     
    begin
     mc:=mymc.create(nil,'mc',1);
     mc._x:=0;
     mc._y:=0;
     mc._width:=w;
     mc._height:=h;
     stag.onresize:=mc.doResize;//on teste la hauteur avant de dessiner et on redimensionne
     mc.beginFill($ff0000);
     mc.moveto(0,0);
     mc.lineto(mc._width,0);
     mc.lineto(mc._width,mc._height);
     mc.lineto(0,mc._height);
     mc.lineto(0,0);
    end.
    Ma question : je n'ai pas tout compris... Pourquoi ça ne marche pas ?

  2. #2
    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 : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    D'après ce que j'ai compris en fouillant un peu, il faut déjà ajouter :
    stag.scalemode:='noScale';
    Lorsque la valeur de Stage.scaleMode est "noScale" , width représente la largeur de Flash Player...

    et se servir de addListener...

    mais je n'y arrive toujours pas ...

  3. #3
    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 : 56
    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
    Alors je n'ai pas toutes les réponses mais il y a plusieurs erreurs dans ton code

    1) il faut utiliser l'objet "Stage" déclaré dans Flash8 qui est global comme "_root" et non déclarer un nouvel objet "Stag".

    2) onResize est un évènement, il n'est invoqué QUE quand on redimensionne le player ET (c'est dans la doc Adobe) quand Stage.scaleMode = "noScale". En effet, s'il existe un mode de mise à l'échelle, les dimensions internes ne changent pas, ce n'est que la projection à l'écran qui met tout à l'échelle.

    3) bien que ce ne soit pas indiqué dans la doc, je pense que _width et _height sont en lecture seule...je n'ai pas vu de cas où on pouvait les modifier en fait.

    or donc voici ce que ça donne

    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
     
    program stage;
     
    uses
     Flash8;
     
    {$FRAME_WIDTH   1024}
    {$FRAME_HEIGHT  768}
    {$BACKGROUND $ffffff}
     
    const
     w=1024;
     h=1024; //démesuré volontairement puisque en hauteur utile on a environ 570 pixels en format standard(1024x768)
     
    type
      mymc=class(movieclip)
       w, h: Number;
       procedure DoResize;
       procedure draw;
      end;
     
     var
       //**  stag:TStage;
         mc:mymc;
     
    procedure mymc.doResize;
    begin
     if _Height>stage.height then //si la hauteur du movie est >à la hauteur utile navigateur alors
     begin
       w := (stage.height*_width)/(_height); //garder les proportions en largeur
       h :=stage.height; //imposer la hauteur utile du navigateur pour éviter de déborder en bas
      end;
      //else....
      clear;
      draw; // redessiner à la nouvelle échelle
    end;
     
    procedure mymc.draw;
    begin
     beginFill($ff0000);
     moveto(0,0);
     lineto(w,0);
     lineto(w,h);
     lineto(0,h);
     lineto(0,0);
    end;
     
    begin
     mc:=mymc.create(nil,'mc',1);
    (*
     mc._x:=0;
     mc._y:=0;
     mc.width:=w;
     mc._height:=h;
    *)
     mc.w := w;
     mc.h := h;
     mc.draw; // dessin à l'échelle actuelle
     
     stage.scaleMode := 'noScale';
     stage.onresize:=mc.doResize;//on teste la hauteur avant de dessiner et on redimensionne
     (*
     mc.beginFill($ff0000);
     mc.moveto(0,0);
     mc.lineto(mc._width,0);
     mc.lineto(mc._width,mc._height);
     mc.lineto(0,mc._height);
     mc.lineto(0,0);
     *)
    end.
    mais en fait, quand tu désactive le scaleMode, l'image n'est plus mise à l'échelle, donc ton code n'est pas adapté je pense
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  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 : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    merci pour ta réponse, je regarde ça...

    Sans exemple, on rame un peu... Et fatalement, on fait pas ce qu'il faut.

    merci encore

    rq: oui width et height ne sont qu'en lecture seule. je confirme.

  5. #5
    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 : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    j'ai rectifié un peu le tir avec ce que tu m'as donné mais le redimensionnement ne se fait pas...

    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
     
    program stage;
     
    uses
     Flash8;
     
    {$FRAME_WIDTH   1024}
    {$FRAME_HEIGHT  768}
    {$BACKGROUND $ffffff}
     
    const
     wd=1024;
     hg=1024; //démesuré volontairement puisque en hauteur utile on a environ 570 pixels en format standard(1024x768)
     
    type
      mymc=class(movieclip)
       w, h: Number;
       procedure DoResize;
       procedure draw;
      end;
     
     var
         mc:mymc;
     
    procedure mymc.doResize;
    begin
     if _Height>stage.height then //si la hauteur du movie est >à la hauteur utile navigateur alors
     begin
       w := (stage.height*_width)/(_height); //garder les proportions en largeur
       h :=stage.height; //imposer la hauteur utile du navigateur pour éviter de déborder en bas
      end;
      clear;
      draw; // redessiner à la nouvelle échelle
    end;
     
    procedure mymc.draw;
    begin
     beginFill($ff0000);
     moveto(0,0);
     lineto(w,0);
     lineto(w,h);
     lineto(0,h);
     lineto(0,0);
    end;
     
    begin
     mc:=mymc.create(nil,'mc',1);
     mc.w := wd;
     mc.h := hg;
     mc.draw; // dessin à l'échelle actuelle
     stage.scaleMode := 'noScale';
     stage.onresize:=mc.doResize;
    end.

    je comprends un peu mieux maintenant...ce n'est pas encore ça mais je suis sur la bonne voie grâce à toi...

  6. #6
    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 : 56
    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
    ce doit être une erreur dans la doc (ou dans mon compilateur ) il faut passer par addListener et du coup déclarer un onResize et non doResize.

    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
     
    program LeStage;
     
    uses
     Flash8;
     
    {$FRAME_WIDTH   1024}
    {$FRAME_HEIGHT  768}
    {$BACKGROUND $ffffff}
     
    const
     wd=1024;
     hg=1024; //démesuré volontairement puisque en hauteur utile on a environ 570 pixels en format standard(1024x768)
     
    type
      mymc=class(movieclip)
       w, h: Number;
       procedure onResize;
       procedure draw;
      end;
     
     var
         mc:mymc;
     
    procedure mymc.onResize;
    begin
     if _Height>stage.height then //si la hauteur du movie est >à la hauteur utile navigateur alors
     begin
       w := (stage.height*_width)/(_height); //garder les proportions en largeur
       h :=stage.height; //imposer la hauteur utile du navigateur pour éviter de déborder en bas
      end;
      clear;
      draw; // redessiner à la nouvelle échelle
    end;
     
    procedure mymc.draw;
    begin
    // beginFill($ff0000);
     lineStyle(1,$ff0000);
     moveto(0,0);
    // lineto(w,0);
     lineto(w,h);
    // lineto(0,h);
    // lineto(0,0);
    end;
     
    begin
     mc:=mymc.create(nil,'mc',1);
     mc.w := wd;
     mc.h := hg;
     mc.draw; // dessin à l'échelle actuelle
     stage.scaleMode := 'noScale';
     //stage.onresize:=mc.doResize;
     stage.addListener(mc);
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    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 : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Tu as encore trouvé la solution..
    Avec une remarquable facilité...
    Super, l'important c'est d'avoir trouvé une méthode.

    Nickel!

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

Discussions similaires

  1. [Kylix] Fenêtres non redimensionnables
    Par fred78 dans le forum EDI
    Réponses: 2
    Dernier message: 01/12/2002, 14h08
  2. [VB6] [Interface] Redimensionnement automatique
    Par ychalan dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/09/2002, 18h32
  3. redimensionnement d'une JWindow
    Par mbp566 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 02/08/2002, 03h41
  4. Redimensionnement des Paquets IP sur un Réseau Local
    Par Bonoboo dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h40
  5. Redimensionnement d'une surface
    Par Freakazoid dans le forum DirectX
    Réponses: 4
    Dernier message: 01/07/2002, 22h01

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