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 :

Le hover en css


Sujet :

Flash Pascal

  1. #1
    Membre expérimenté
    Le hover en css
    Pour imiter le hover :

    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
     
    program survol;
     
    uses Flash8;
     
    {$FRAME_WIDTH  545}
    {$FRAME_HEIGHT 150}
    {$BACKGROUND  $FAEBD7}
    {$FRAME_RATE 30}
     
    type
     
      TRect=class(Rectangle)
       constructor Create(x, y, width, height: Integer);
       top,left,right,Bottom:integer;
      end; 
     
      mymovie=class(movieclip)
       ptmouse<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />oint;
       myrect:TRect;
       Format1,Format2: TextFormat;
       Field: TextField;
       constructor Create;
       procedure onEnterFrame;
      end; 
     
    function ptinrect(pt<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />oint;RECT:TRect):Boolean;
    begin
     if (pt.x>=rect.left) and (pt.x<=rect.right) and (pt.y>=rect.top) and (pt.y<=rect.Bottom)  then  result:=true else result:=False;
    end;    
     
     
    constructor TRect.create(x, y, width, height: Integer);
    begin
     Inherited Create(x,y,width,height);
     left:=x;
     top:=y;
     right:=x+width;
     bottom:=y+height;
    end;  
     
     
    constructor mymovie.Create;
    begin
     inherited Create(nil,'mymovie',1); 
     Format1 := TextFormat.Create('Arial', 25, $000000,true,false,true);
     Format2 := TextFormat.Create('Arial', 25, $ff0000,true,false,true);
     Field := TextField.Create(self, '', 1, 10,10,250,40); 
     Field.SetNewTextFormat(Format1);
     myrect:=TRect.Create(10,10,250,40); //Field.BoundsRect
    end;
     
     
    procedure Mymovie.onEnterFrame;
    begin
      ptmouse:=Point.Create(_xmouse,_ymouse);
      //si les ccords de la souris appartiennent à Field alors changer la couleur
      if ptinrect(ptmouse,myrect) then Field.SetNewTextFormat(Format2) else   Field.SetNewTextFormat(Format1);
      Field.Text:=('mon futur lien');
    end;
     
     
    begin
      mymovie.Create;
    end.


    Ma question pour l'instant est : comment changer le curseur avec le survol du Textfield ? il me faut peut-être un movieclip container et ainsi récupérer en plus l'événement onmousedown...

    @+

  2. #2
    Expert éminent sénior
    en effet si tu ajoutes une procédure onPress le curseur devient une main.

    Note que onPress est sensible au contenu, donc il ne se déclenchera QUE lorsque la souris sera au dessus du TextField - le reste du clip étant vide.


    petite précision sur onPress, c'est une propriété de movieClip qu'on peut renseigner sous la forme
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    constructor MyMovie.Create;
    begin
     ...
     onPress := doPress;
    end;
     
    procedure MyMovie.doPress;
    begin
    end;


    mais en fait il est plus simple de déclarer directement une méthode onPress qui remplacement la propriété de MovieClip.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    procedure MyMovie.onPress;
    begin
    end;



    NB: je travaille actuellement sur un bug un peu complexe qui interdit de déclarer ceci

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    type
      MyMovieClip = class(MovieClip)
       procedure onClick;
      end;
    var
      m1,m2: MyMovieClip;
    begin 
      m1.onPress := m2.onClick;
    end;


    en effet il existe en Pascal une nuance contextuelle entre l'appel à m2.onClick et la référence à m2.onClick...et FlashPascal ne la gère pas correctement. Dans d'autres langages c'est la présence de parenthèses qui fait la distinction entre la référence "m2.onClick" et l'appel "m2.onClick()"...dans les premiers Pascal les parenthèses n'étaient pas autorisées sur une méthode sans paramètre, aujourd'hui elles sont optionnelles.

    Petit rappel aussi (ou pas) FlashPascal utilise en interne une fonction anonyme pour gérer les procédures "of object" (mais il n'autorise pas leur usage explicite)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // exemple
      m1.onPress := doPress;
    // est codé sous la forme
      m1.onPress := procedure begin
        Self.doPress;
      end;
     
      onPress := m2.doPress;
    // est codé sous la forme
      Self.onPress := procedure begin
        m2.doPress;
      end;


    en effet, Flash ne connait pas la notion de "procedure of object" qui comprend 2 pointeurs : l'instance objet et sa méthode. La fonction anonyme permet de stocker ces informations.

    j'hésite à intégrer le "Sender" de Delphi qui serait très pratique mais qui change la déclaration des évènements Flash en ajoutant ce paramètre...


    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
     
    begin
    // exemple
      m1.onPress := doPress;
    // est codé sous la forme
      m1.onPress := procedure begin
        Self.doPress(m1);
      end;
     
      onPress := m2.doPress;
    // est codé sous la forme
      onPress := procedure begin
        m2.doPress(Self);
      end;
    end;
     
    procedure MyMovie.doPress(Sender: TObject);
    begin
    end;


    je vais faire un sondage
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre expérimenté
    Merci pour cet éclairage technique..., je regarde le sondage

    @+

  4. #4
    Membre expérimenté
    J'ai ajouté boundsRect au TextField et je me suis aperçu que rectangle avec des paramètres en integer, ce n'est pas pratique.
    Ce serait mieux en number...Est-ce possible ?

    VOIR CODE :
    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
     
     program survol;
     
    uses Flash8;
     
    {$FRAME_WIDTH  545}
    {$FRAME_HEIGHT 150}
    {$BACKGROUND  $FAEBD7}
    {$FRAME_RATE 30}
     
    type
     
      TRect=class(Rectangle)
       constructor Create(x, y, width, height: Integer);
       top,left,right,Bottom:integer;
      end; 
     
      MyTextField=class(TextField)
       boundsRect:TRect;
       constructor Create(Parent: MovieClip; Name: string; Depth, Left, Top, Width, Height: Number);
      end;   
     
      mymovie=class(movieclip)
       ptmouse<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />oint;
       myrect:TRect;
       Format1: TextFormat;
       Format2: TextFormat;
       Field: MyTextField;
       constructor Create;
       procedure onEnterFrame;
      end; 
     
    function ptinrect(pt<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />oint;RECT:TRect):Boolean;
    begin
     if (pt.x>=rect.left) and (pt.x<=rect.right) and (pt.y>=rect.top) and (pt.y<=rect.Bottom)  then  result:=true else result:=False;
    end;    
     
     
    constructor TRect.create(x, y, width, height: Integer);
    begin
     Inherited Create(x,y,width,height);
     left:=x;
     top:=y;
     right:=x+width;
     bottom:=y+height;
    end;
     
    constructor MyTextField.Create(Parent: MovieClip; Name: string; Depth, Left, Top, Width, Height: Number);  
    begin
     inherited Create(Parent,name,Depth,Left, Top, Width, Height);
     boundsRect:=TRect.Create( floor(Left),floor(Top), floor(Width),floor( Height)); //pas joli, ce serait plus pratique si les paramètres de rectangle étaient en number
    end;
     
     
    constructor mymovie.Create;
    begin
     inherited Create(nil,'mymovie',1); 
     Format1 := TextFormat.Create('Arial', 25, $000000,true,false,true);
     Format2 := TextFormat.Create('Arial', 25, $ff0000,true,false,true);
     Field :=MyTextField.Create(self, '', 1, 10,10,250,40); 
     Field.SetNewTextFormat(Format1);
     Field.Text:='mon futur lien';
    end;
     
     
    procedure Mymovie.onEnterFrame;
    begin
      ptmouse:=Point.Create(_xmouse,_ymouse);
      //si les ccords de la souris appartiennent à Field alors changer la couleur
      if ptinrect(ptmouse,Field.boundsRect) then Field.SetNewTextFormat(Format2) else   Field.SetNewTextFormat(Format1);
      Field.Text:='mon futur lien';
    end;
     
     
    begin
      mymovie.Create;
    end.

  5. #5
    Expert éminent sénior
    Oui, en fait Flash ne distingue pas réellement Integer de Double, ce sont tous des Number.

    là aussi j'hésite à introduire un type système Number qui serait indifféremment un entier ou un double. Pour l'instant je déclare simplement Number=Double et j'utilise Number partout dans les déclarations.

    ça fonction bien, sauf qu'il faut utiliser Floor() pour passer de Number à Integer...mais c'est assez logique finalement.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre expérimenté
    Oui, ça j'avais compris mais ma question est pourquoi avoir mis rectangle en integer alors que tout le reste est en Double (Number).
    Ce n'est pas pratique...ajout des floors qui paraissent inutile si rectangle était lui aussi en Number...je ne vois pas l'utilité de l'integer dans rectangle...
    C'est ça mon interrogation...


  7. #7
    Expert éminent sénior
    Ah ! tu parles de Flash8.pas

    ben c'est juste que je ne l'ai pas retravaillée complètement, elle ne devrait utiliser que des Number
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre expérimenté
    Oui, je parlais de Flash8... Ok pas de soucis...je croyais qu'il y avait une impossibilité de le faire ou une raison valable pour le garder en integer...

    Tout en number, ce serait encore mieux...

    merci et bonne journée


  9. #9
    Membre expérimenté
    Pour terminer et conclure :
    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
     
    program survol;
     
    uses Flash8;
     
    {$FRAME_WIDTH  545}
    {$FRAME_HEIGHT 150}
    {$BACKGROUND  $FAEBD7}
    {$FRAME_RATE 30}
     
    type
     
      TRect=class(Rectangle)
       constructor Create(x, y, width, height: Integer);
       top,left,right,Bottom:integer;
      end; 
     
      MyTextField=class(TextField)
       boundsRect:TRect;
       constructor Create(Parent: MovieClip; Name: string; Depth, Left, Top, Width, Height: Number);
      end;   
     
      mymovie=class(movieclip)
       ptmouse<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />oint;
       myrect:TRect;
       Format1: TextFormat;
       Format2: TextFormat;
       Field: MyTextField;
       lien:movieClip;
       constructor Create;
       procedure onEnterFrame;
       procedure dopress;
      end; 
     
    function ptinrect(pt<img src="images/smilies/icon_razz.gif" border="0" alt="" title=":P" class="inlineimg" />oint;RECT:TRect):Boolean;
    begin
     if (pt.x>=rect.left) and (pt.x<=rect.right) and (pt.y>=rect.top) and (pt.y<=rect.Bottom)  then  result:=true else result:=False;
    end;    
     
     
    constructor TRect.create(x, y, width, height: Integer);
    begin
     Inherited Create(x,y,width,height);
     left:=x;
     top:=y;
     right:=x+width;
     bottom:=y+height;
    end;
     
    constructor MyTextField.Create(Parent: MovieClip; Name: string; Depth, Left, Top, Width, Height: Number);  
    begin
     inherited Create(Parent,name,Depth,Left, Top, Width, Height);
     boundsRect:=TRect.Create( floor(Left),floor(Top), floor(Width),floor( Height)); //pas joli, ce serait plus pratique si les paramètres de rectangle étaient en number
    end;
     
     
    constructor mymovie.Create;
    begin
     inherited Create(nil,'mymovie',1); 
     lien:=MovieClip.Create(self,'',1);
     lien.onPress:=dopress;
     Format1 := TextFormat.Create('Arial', 25, $000000,true,false,true);
     Format2 := TextFormat.Create('Arial', 25, $ff0000,true,false,true);
     Field :=MyTextField.Create(lien, '', 1, 10,10,250,40); 
     Field.SetNewTextFormat(Format1);
     Field.Text:='mon futur lien';
    end;
     
     
    procedure Mymovie.onEnterFrame;
    begin
      ptmouse:=Point.Create(_xmouse,_ymouse);
      //si les ccords de la souris appartiennent à Field alors changer la couleur
      if ptinrect(ptmouse,Field.boundsRect) then Field.SetNewTextFormat(Format2) else   Field.SetNewTextFormat(Format1);
      Field.Text:='mon futur lien';
    end;
     
    procedure Mymovie.dopress;
    begin
     getURL('www.developpez.com','','');
    end;
     
     
    begin
      mymovie.Create;
    end.


    @+

  10. #10

  11. #11
    Membre expérimenté
    merci, mais tu participes largement aussi à l'avancement des connaissances sur flashpascal, c'est bien. Chacun y trouve son compte...
    Dommage que l'on ne soit encore que deux à s'investir dessus...

    @+

  12. #12
    Rédacteur/Modérateur

    Citation Envoyé par Archimède Voir le message
    Dommage que l'on ne soit encore que deux
    Deux, c'est déjà une équipe.

###raw>template_hook.ano_emploi###