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 :

Objet Mouse et curseur personnalisé


Sujet :

Flash Pascal

  1. #1
    Expert éminent sénior
    Objet Mouse et curseur personnalisé
    Pour ne pas tout mélanger je reprend ma réponse dans un nouveau thread

    Voici comment créer un curseur souris personnalisé.
    (l'objet Mouse sera intégré dans Flash8.pas lors de la prochaine mise à jour)

    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
     
    program curseur;
     
    uses
      Flash8;
     
    type
      Mouse = external class
      { events:
        procedure onMouseDown;
        procedure onMouseMove;
        procedure onMouseUp;
        procedure onMouseWheel(delta: Number = 0; scrollTarget: TObject = nil);
      }
        class procedure addListener(listener: TObject);
        class function hide: Number;
        class function removeListener(listener: TObject): Boolean;
        class function show: Number;
      end;
     
      TCursor = class(MovieClip)
        constructor Create;
        procedure onMouseMove;
      end;
     
    constructor TCursor.Create;
    begin
      inherited Create(nil, 'Cursor', 1);
      lineStyle(1,0);
      beginFill($ffffff);
      lineTo(+5,+10);
      lineTo(+10,+5);
      lineTo(0,0);
      Mouse.addListener(Self);
      Mouse.Hide;
    end;
     
    procedure TCursor.onMouseMove;
    begin
    // on prend la position de la souris relativement à _root
      _x := _root._xmouse;
      _y := _root._ymouse;
    end;
     
    begin
      TCursor.Create;
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #2
    Membre expérimenté
    Ah oui, bien vu !

    Parfait, impeccable

    Et pour faire un zoom, l'évenement onMouseWheelDown (et évidemment onMouseWheelup) serait bien utile...
    Je présume que cet événement est intégré à movieclip en ActionScript2 non ?

    merci Paul

  3. #3
    Membre expérimenté
    Citation Envoyé par Archimède Voir le message
    Ah oui, bien vu !

    Parfait, impeccable

    Et pour faire un zoom, l'évenement onMouseWheelDown (et évidemment onMouseWheelup) serait bien utile...
    Je présume que cet événement est intégré à movieclip en ActionScript2 non ?

    merci Paul
    ps: Ok, je viens de voir le onMouseWeel dans Mouse donc avec Addlistener() parfait... Excuse, j'avais regardé un peu vite.

  4. #4
    Membre expérimenté
    Comment se débarrasser du curseur du textField qui se superpose au nouveau curseur ?

    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
     
    unit UCursor;
     
    interface
     
    uses
      Flash8;
     
    type
      Mouse = external class
        class procedure addListener(listener: TObject);
        class function hide: Number;
        class function removeListener(listener: TObject): Boolean;
        class function show: Number;
      end;
     
      TCursor = class(MovieClip)
        constructor Create(mc:movieclip);
        procedure onMouseMove;
      end;
     
    implementation
     
    constructor TCursor.Create(mc:movieclip);
    begin
      inherited Create(mc, 'Cursor',getNextHighestDepth());
      lineStyle(1,0);
      beginFill($ffffff);
      lineTo(+5,+10);
      lineTo(+10,+5);
      lineTo(0,0);
      Mouse.addListener(mc);
      Mouse.Hide;
    end;
     
    procedure TCursor.onMouseMove;
    begin
    // on prend la position de la souris relativement à _root
      _x :=_root._xmouse;
      _y :=_root._ymouse;
    end;
     
     
    end.


    PROGRAM :

    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
    99
    100
    101
     
    program numerisation_de_l_information;
     
    uses
      Flash8,URealmovie,UCursor;
     
    {$FRAME_WIDTH   500}
    {$FRAME_HEIGHT  550}
    {$FRAME_RATE 32}
    {$BACKGROUND $dcdcdc}
     
     const frame_width=500;
           frame_height=550;
    Type
     Smiley=class(Realmovie)
      mybmp : BitmapData;
      Field:TextField;
      Font:TextFormat;
      constructor create;
      procedure onMouseMove;
      procedure draw;
     end;
     
     var curseur: TCursor;
     
    Function GetBvalue(coul:integer):integer;
    begin
     result :=coul Mod 256;
    end;
     
    Function GetGvalue(coul:integer):integer;
    begin
     result :=floor((Coul Mod 65536)/256);
    end;
     
    Function GetRvalue(coul:integer):integer;
    begin
     result :=Floor(Coul/65536);
    end;
     
     constructor Smiley.Create;
     begin
      inherited create(nil,'schema',1);
      setsize(frame_width,frame_height,0,0,10,11);
      draw;
      mybmp := BitmapData.Create(frame_width+1,frame_height+1); //obligé de le dimensionner avec un pixel supplémentaire pour voir toutes les lignes ?
      mybmp.draw(self);//On remplit le bitmap avec le contenu de smiley
      clear;//pour éviter deux couches de dessin une dans le movie et l'autre dans le bmp
      attachBitmap(mybmp,0,'',false);
      Font:=TextFormat.Create( 'Arial',16,$000000,True,False,False,'center');
      curseur:=TCursor.Create(self); //ici création du curseur
      field:=TextField.Create(self,'codeRGB',1,0,0,200,40);
      Field.setNewTextFormat(Font);
     end;
     
    Procedure Smiley.onMouseMove;
    var R,V,B:integer;
        rgb:number;
    begin
     rgb:=mybmp.GetPixel(_xmouse,_ymouse);
     R:=GetRValue(floor(rgb));
     V:=GetGValue(floor(rgb));
     B:=GetBValue(floor(rgb));
     Field.text:='( '+inttostr(R)+' , '+inttostr(V)+' , '+inttostr(B)+' )';
     Field._x:=_xmouse-60;  //avec modif de TextField _x et_y en number !
     Field._y:=_ymouse-40;
    end;
     
    procedure Smiley.draw;
    var i:integer;
    begin
     beginFill($ffff00);
     Rrectangle(3,1,7,2);
     Rrectangle(1,3,2,8);
     Rrectangle(8,3,9,8);
     Rrectangle(3,9,7,10);
     RRectangle(2,2,3,3);
     RRectangle(2,8,3,9);
     RRectangle(7,2,8,3);
     RRectangle(7,8,8,9);
     EndFill();
     beginFill($000000);
     RRectangle(3,4,4,5);
     RRectangle(4,3,6,4);
     RRectangle(6,4,7,5);
     endFill();
     beginFill($0088FF);
     RRectangle(3,6,4,7);
     RRectangle(6,6,7,7);
     EndFill();
     linestyle(1,$000000);
     for i:=0 to 10 do   Rline(i,0,i,11);
     for i:=0 to 11 do   Rline(0,i,10,i);
     linestyle(3,$FF0000);
     RRectangle(6,4,9,7);
    end;
     
    begin
     Smiley.create;
     stage.scaleMode :='noScale'; //on n'est pas en vectoriel...pour éviter les surprises dans le navigateur
    end.


    Je signale que j'ai tenté de remplacer _Root dans onMouseMove par mon movie parent mais ça ne sert à rien...Donc, j'ai gardé _root...

    De toute façon, le_root permet uniquement d'entraîner le movie qui constitue le curseur...que ce soit _root ou mon smiley, c'est pareil...

    La question se résume à comment supprimer le curceur d'un textfield, c'est tout...


    anthony

  5. #5
    Membre expérimenté
    J'ai trouvé... :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
      field.selectable:=false;


    salut

  6. #6
    Membre expérimenté
    le fichier flash en lien pour voir visuellement mon changement de curseur ...