Developpez.com - Rubrique Pascal

Le Club des Développeurs et IT Pro

Nouvelle version 13.10.25 de FlashPascal 2

Avec, comme amélioration, la possibilité d'exploiter les informations sur le poste de travail

Le 2013-10-25 18:19:16, par Paul TOTH, Expert éminent sénior
Nouvelle version 13.10.25 de FlashPascal 2
Avec, comme amélioration, la possibilité d'exploiter les informations sur le poste de travail



http://flashpascal.execute.re/

C'est une mise à jour mineure, mais elle permet d'exploiter la classe System.capabilities (capabilities en FlashPascal) pour avoir des informations sur le poste de travail.

Code :
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
program SystemCapabilities;

{$FRAME_WIDTH 550}
{$FRAME_HEIGHT 400}
{$FRAME_RATE 12}
{$BACKGROUND $FFFFFF}

uses
  Flash8;

var
  t: TextField;

begin
  t := TextField.Create(_root, 't', 1, 0, 0, 550, 400);
  t.Text := 'avHardwareDisable = ' + BoolToStr(capabilities.avHardwareDisable) + #13 +
            'hasAccessibility = ' + BoolToStr(capabilities.hasAccessibility) + #13 +
            'hasAudio = ' + BoolToStr(capabilities.hasAudio) + #13 +
            'hasAudioEncoder = ' + BoolToStr(capabilities.hasAudioEncoder) + #13 +
            'hasEmbeddedVideo = ' + BoolToStr(capabilities.hasEmbeddedVideo) + #13 +
            'hasIME = ' + BoolToStr(capabilities.hasIME) + #13 +
            'hasMP3 = ' + BoolToStr(capabilities.hasMP3) + #13 +
            'hasPrinting = ' + BoolToStr(capabilities.hasPrinting) + #13 +
            'hasScreenBroadcast = ' + BoolToStr(capabilities.hasScreenBroadcast) + #13 +
            'hasScreenPlayback = ' + BoolToStr(capabilities.hasScreenPlayback) + #13 +
            'hasStreamingAudio = ' + BoolToStr(capabilities.hasStreamingAudio) + #13 +
            'hasStreamingVideo = ' + BoolToStr(capabilities.hasStreamingVideo) + #13 +
            'hasVideoEncoder = ' + BoolToStr(capabilities.hasVideoEncoder) + #13 +
            'isDebugger = ' + BoolToStr(capabilities.isDebugger) + #13 +
            'language = ' + capabilities.language + #13 +
            'localFileReadDisable = ' + BoolToStr(capabilities.localFileReadDisable) + #13 +
            'manufacturer = ' + capabilities.manufacturer + #13 +
            'os = ' + capabilities.os + #13 +
            'pixelAspectRatio = ' + FloatToStr(capabilities.pixelAspectRatio) + #13 +
            'playerType = ' + capabilities.playerType + #13 +
            'screenColor = ' + capabilities.screenColor + #13 +
            'screenDPI = ' + FloatToStr(capabilities.screenDPI) + #13 +
            'ScreenResolutionX = ' + FloatToStr(capabilities.screenResolutionX) + #13 +
            'ScreenResolutionY = ' + FloatToStr(capabilities.screenResolutionY) + #13 +
            'serverString = ' + capabilities.serverString + #13 +
            'version = ' + capabilities.version;

end.
  Discussion forum
24 commentaires
  • Paul TOTH
    Expert éminent sénior
    ben avec mon code, mets en commentaire le "Stage.addListener(Self);", lance le programme dans le player externe et élargie la fenêtre...le carré jaune n'est plus dans le coin droite de la fenêtre, il n'a pas bougé et j'ai un espace blanc. Alors qu'avec le addListener, la méthode onResize est invoqué, elle redessine les rectangle rouge et jaune de tel sorte que ça occupe toute la largeur de la fenêtre.
    [ATTACH]129586d1/a/a/a" />
  • Paul TOTH
    Expert éminent sénior
    Envoyé par Archimède 
    En effet, ça fonctionne ainsi. D'ailleurs, il existe
    Code :
    		  stage.fullScreenWidth
    mais je ne sais pas s'il est opérationnel en as2...

    En fait, je voudrais faire un site internet entièrement en flash bien qu'il ne soit pas reconnu par le W3C...et il est nécessaire qu'il occupe la totalité de la surface client du navigateur. Pour la largeur, il n'y a plus de souci mais pour la hauteur, je voudrais mettre une scrollbar qui corresponde exactement à cette dimension; et je ne vois pas comment obtenir la hauteur exacte de la surface client du navigateur qui va supporter ma page index.

    Une idée ?

    attention, capabilities.screenResolutionX c'est la résolution de l'écran du PC, pas celle de la fenêtre du navigateur; c'est pour ça que je pensais que tu voulais travailler en fullscreen. Si tu veux occuper toute la page du navigateur tu as deux solutions:
    1) pointer directement sur le SWF sans passer par une page HTML (tu ne peux pas alors gérer les navigateurs qui ne gèrent pas Flash)

    2) faire une page HTML avec un objet qui prend toute la page...quelque chose comme ça
    Code html :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
      
    <!DOCTYPE HTML> 
    <html> 
      <head> 
       <title>FlashPascal</title> 
       <style type="text/css"> 
        body, html { 
          padding: 0px; 
         margin: 0px; 
         width:100%; 
         height:100%; 
        } 
            embed { position: absolute; top: 0px; left: 0px } 
       </style> 
      </head> 
      <body> 
        <embed type="application/x-shockwave-flash" src="fullpage.swf" width="100%" height="100%"/> 
      </body> 
    </html>

    avec un code comme celui-ci

    Code :
    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
     
    program fullpage; 
     
    {$FRAME_WIDTH 550} 
    {$FRAME_HEIGHT 400} 
    {$FRAME_RATE 12} 
    {$BACKGROUND $FFFFFF} 
     
    uses 
      Flash8; 
       
    type 
      TFullPage = class(MovieClip) 
        constructor Create; 
        procedure onResize; 
      end; 
     
    constructor TFullPage.Create; 
    begin 
      inherited Create(_root, 'FullPage', 1); 
      Stage.addListener(Self); 
      onResize; 
    end; 
     
    procedure TFullPage.onResize; 
    begin 
      clear(); 
      beginFill($ff0000); 
      linestyle(1,0); 
      lineto(Stage.Width,0); 
      lineto(Stage.Width,100); 
      lineto(0,100); 
      endFill(); 
      beginFill($ffff00); 
      moveto(Stage.Width-100,0); 
      lineto(Stage.Width,0); 
      lineto(Stage.Width,100); 
      lineto(Stage.Width-100,100); 
      lineto(Stage.Width-100,0); 
      endFill(); 
    end; 
     
    begin 
      Stage.scaleMode := 'noScale'; 
      Stage.align := 'TL'; 
      TFullPage.Create(); 
    end.
    Note que l'image étant dynamique, elle doit être redessinée quand la page change de dimensions (onResize lié à Stage.addListener)
  • Paul TOTH
    Expert éminent sénior
    Envoyé par Archimède
    Super l'exemple :

    .
    je pense que tu veux faire un SWF fullscreen, dans ce cas il te manque un Stage.scaleMode := 'noScale'; et probablement un Stage.displayState := 'fullScreen';.
  • Archimède
    Membre chevronné
    Nickel, je regarde ça...
  • joreveur
    Membre averti
    Bonjour

    merci. le lien est dans la signature je suppose ?

    Bon we
  • Archimède
    Membre chevronné
    Super l'exemple :

    program SystemCapabilities;


    J'ai essayé un truc simple :
    Code :
    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
    program Project2;
    
    {$FRAME_RATE 12}
    {$BACKGROUND $FFFFFF}
    
    uses
      Flash8;
    
    
    
    begin
      with _Root do
      begin
       beginFill($ff0000);
       linestyle(1,0);
       lineto(capabilities.screenResolutionX,0);
       lineto(capabilities.screenResolutionX,100);
       lineto(0,100);
       endFill();
       beginFill($ffff00);
       moveto(capabilities.screenResolutionX-100,0);
       lineto(capabilities.screenResolutionX,0);
       lineto(capabilities.screenResolutionX,100);
       lineto(capabilities.screenResolutionX-100,100);
       lineto(capabilities.screenResolutionX-100,0);
       endFill();
      end;
      stage.align:='TL';
    end.
    ça ne fonctionne pas... j'ai fait la même chose en actionscript :
    Code :
    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
    package 
    {
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.system.Capabilities;
    	
    	public class MyScreen extends Sprite 
    	{
    		
    		public function MyScreen():void 
    		{
    		  
    		  with (graphics)
    		  {
    		    beginFill(0xFF0000);
    		    lineStyle(1, 0);
    		    drawRect(0, 0, Capabilities.screenResolutionX,100);
    		    endFill();
    		    beginFill(0xFFFF00);
    		    drawRect(Capabilities.screenResolutionX-100,0,100,100);
    		    endFill();
    		  }	 
    		  stage.align = "TL";
    		}	
    	}	
    }
    là, le fichier swf généré n'est pas bon non plus mais flashdevelop que j'utilise génére un fichier index en html contenant un script qui me l'affiche comme convenu...

    Ce doit être réalisable en javascript pour flashpascal...
  • Roland Chastain
    Rédacteur/Modérateur
    Bravo, Paul !

    Code :
    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
    // Date littérale en trois langues
    // FlashPascal2 13.10.25
    
    // Formats retenus :
    // Friday 25 October 2013
    // Freitag, 25. Oktober 2013
    // vendredi 25 octobre 2013
    
    program DateLitterale2;
    
    uses
      Flash8,
      Date; // http://flashpascal.sourceforge.net/
    
    {$FRAME_WIDTH 320}
    {$FRAME_HEIGHT 32}
    
    const
      EN = 0;
      DE = 1;
      FR = 2;
      NOM_JOUR: array[EN..FR, 0..6] of string = (
        ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'),
        ('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'),
        ('dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi')
      );
      NOM_MOIS: array[EN..FR, 0..11] of string = (
        ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
        ('Januar', 'Februar', "März", 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'),
        ('janvier', "février", 'mars', 'avril', 'mai', 'juin', 'juillet', "août", 'septembre', 'octobre', 'novembre', "décembre")
      );
      
    var
      f: TextFormat;
      t: TextField;
      d: TDate;
      l: integer;
    
    begin
      f := TextFormat.Create('Times', 24);
      t := TextField.Create(nil, 't', 0, 0, 0, 320, 32);
      d := TDate.Create;
      
      if capabilities.language = 'de' then
        l := DE
      else
        if capabilities.language = 'fr' then
          l := FR
        else
          l := EN;
      
      f.align := 'center';
      t.setNewTextFormat(f);
      
      t.text := NOM_JOUR[l, d.getDay];
      if l = DE then t.text := t.text + ',';
      t.text := t.text + #32;
      
      t.text := t.text + IntToStr(d.getDate);
      if l = DE then t.text := t.text + '.';
      if (l = FR) and (d.getDate = 1) then t.text := t.text + 'er';
      t.text := t.text + #32;
      
      t.text := t.text + NOM_MOIS[l, d.getMonth];
      t.text := t.text + #32;
      
      t.text := t.text + IntToStr(d.getFullYear);
    end.
  • Paul TOTH
    Expert éminent sénior
    Envoyé par joreveur
    Bonjour

    merci. le lien est dans la signature je suppose ?

    Bon we
    oui le site c'est http://flashpascal.execute.re, mais si tu as une version du logiciel, au lancement il t'indique quand une nouvelle version est disponible.
  • joreveur
    Membre averti
    Bonjour,
    Envoyé par Paul TOTH
    oui le site c'est http://flashpascal.execute.re, mais si tu as une version du logiciel, au lancement il t'indique quand une nouvelle version est disponible.
    Merci

    oui je découvre tranquillement tout ton travail ...

    Comme j'ai pris la version portable et étant sous Linux ( avec Wine) je n'ai juste qu'un demi popup qui s'affiche quelques secondes (mais maintenant je saurai)

    Ce n'est pas ça le plus important tout le reste marche impeccablement bien.

    petites questions au passage, dans les nouvelles versions qu'est-ce qui change ? le dossier bin ou l'unit ou voire les 2 ? i

    Serait il possible dans ton zip de les inclure dans un un dossier (du nom de la version) comme ça, en décompressant ça n’écraserait pas les anciennes versions. (c'est ce que je fait manuellement)

    Bien à toi
  • Paul TOTH
    Expert éminent sénior
    Envoyé par joreveur
    Bonjour,

    Merci

    oui je découvre tranquillement tout ton travail ...

    Comme j'ai pris la version portable et étant sous Linux ( avec Wine) je n'ai juste qu'un demi popup qui s'affiche quelques secondes (mais maintenant je saurai)

    Ce n'est pas ça le plus important tout le reste marche impeccablement bien.

    petites questions au passage, dans les nouvelles versions qu'est-ce qui change ? le dossier bin ou l'unit ou voire les 2 ? i

    Serait il possible dans ton zip de les inclure dans un un dossier (du nom de la version) comme ça, en décompressant ça n’écraserait pas les anciennes versions. (c'est ce que je fait manuellement)

    Bien à toi
    ça dépend de la version...par contre pour le coup je ne conserve pas l'historique des versions, je ne propose toujours que la dernière qui est la seule maintenue...libre à toi de conserver le zip de chaque version.

    je n'ai pas testé sous WINE, il doit y avoir un petit problème de positionnement de la fenêtre.