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

Delphi Discussion :

delphi FMX defilement image


Sujet :

Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 422
    Par défaut delphi FMX defilement image
    bonjour
    je voudrais trouver un moyen de faire un défilement image
    comme le jeux bandit manchot
    je viens de faire sa mais je crois que c'est pas la bonne solution
    merci avance pour toute proposition
    roulette2.zip

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 422
    Par défaut
    bonsoir
    peu être comme ceci

    anim.zip

  3. #3
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2017
    Messages : 757
    Billets dans le blog
    2
    Par défaut Machine à sous - 7 Slots
    Tiens, voici l’une de mes sources : Machine à sous - 7 Slots. Tu pourras la retrouver sur mon site web : https://delphisource.fr/post/machine-a-sous-7-slots

    Nom : ScreenRecorderProject1.gif
Affichages : 69
Taille : 1,18 Mo
    On ne peut pas faire confiance à un code qu'on n'a pas entièrement écrit soi‑même, et encore moins à celui qu'on a écrit entièrement. :aie:

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 422
    Par défaut
    bonjour
    merci pour le source
    je voudrais faire sa mais en FMX
    petite question avec TBitmapListAnimation
    si j'arrête le rouleau avec stop
    comment savoir quelle image est active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    n:integer;
    begin
    form1.BitmapListAnimation1.Stop;
    n:= form1.BitmapListAnimation1.????????????????????????????
    end;

  5. #5
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2017
    Messages : 757
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tintin62 Voir le message
    bonjour
    merci pour le source
    je voudrais faire sa mais en FMX
    petite question avec TBitmapListAnimation
    si j'arrête le rouleau avec stop
    comment savoir quelle image est active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
    n:integer;
    begin
    form1.BitmapListAnimation1.Stop;
    n:= form1.BitmapListAnimation1.????????????????????????????
    end;
    Chaque rouleau a une position en pixels
    Une image vaut hau = fond.Height div 12 pixels : L’index visible = rouleau div hau ou arrondi avec + hau div 2 pour choisir la case la plus proche
    Ensuite on aligne avec rouleau := index * hau et on redessine, l’image affichée correspond alors à cet index.

    Nom : Capture d’écran 20-08-2026 11.43.43.png
Affichages : 58
Taille : 124,9 Ko

    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    unit Unit1;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes,
      System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,
      FMX.Controls.Presentation, FMX.StdCtrls, System.Math;
     
    type
      TForm1 = class(TForm)
        Rectangle1: TRectangle;
        Timer1: TTimer;
        Button1: TButton; // Démarrer
        Button2: TButton; // Stop
        Rectangle2: TRectangle;
        Rectangle3: TRectangle;
        Timer2: TTimer;
        Timer3: TTimer;
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Timer2Timer(Sender: TObject);
        procedure Timer3Timer(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Button2Click(Sender: TObject);
      private
        function GetActiveFrame(rouleau: Integer): Integer;
        function GetNearestFrame(rouleau: Integer): Integer;
        procedure StopAndSnap;
      public
        procedure rotation_rouleau1;
        procedure rotation_rouleau2;
        procedure rotation_rouleau3;
      end;
     
    var
      Form1: TForm1;
      temp, fond: TBitmap;
      lar, hau: Integer;
      rouleau1, rouleau2, rouleau3: Integer;
     
    implementation
     
    {$R *.fmx}
     
    { ---------- Utilitaires ---------- }
     
    function TForm1.GetActiveFrame(rouleau: Integer): Integer;
    begin
      if hau <= 0 then
        Exit(0);
      Result := (rouleau div hau) mod 12;
      if Result < 0 then
        Result := 0;
    end;
     
    function TForm1.GetNearestFrame(rouleau: Integer): Integer;
    begin
      if hau <= 0 then
        Exit(0);
      Result := ((rouleau + (hau div 2)) div hau) mod 12;
      if Result < 0 then
        Result := 0;
    end;
     
    { ---------- Rotation des rouleaux (utilise DrawBitmap) ---------- }
     
    procedure TForm1.rotation_rouleau1;
    var
      srcRect, destRect: TRectF;
    begin
      if (hau <= 0) or (lar <= 0) then
        Exit;
     
      // Normaliser la position
      rouleau1 := rouleau1 mod (hau * 12);
      if rouleau1 < 0 then
        rouleau1 := 0;
     
      srcRect := RectF(0, rouleau1, lar, rouleau1 + hau);
      destRect := RectF(0, 0, lar, hau);
     
      temp.SetSize(lar, hau);
      temp.Canvas.BeginScene;
      try
        temp.Canvas.Clear(TAlphaColorRec.Null);
        temp.Canvas.DrawBitmap(fond, srcRect, destRect, 1.0, True);
      finally
        temp.Canvas.EndScene;
      end;
     
      Rectangle1.Width := lar;
      Rectangle1.Height := hau;
      Rectangle1.Fill.Bitmap.WrapMode := TWrapMode.TileStretch;
      Rectangle1.Stroke.Kind := TBrushKind.None;
      Rectangle1.Fill.Kind := TBrushKind.Bitmap;
      Rectangle1.Fill.Bitmap.Bitmap := temp;
    end;
     
    procedure TForm1.rotation_rouleau2;
    var
      srcRect, destRect: TRectF;
    begin
      if (hau <= 0) or (lar <= 0) then
        Exit;
     
      rouleau2 := rouleau2 mod (hau * 12);
      if rouleau2 < 0 then
        rouleau2 := 0;
     
      srcRect := RectF(0, rouleau2, lar, rouleau2 + hau);
      destRect := RectF(0, 0, lar, hau);
     
      temp.SetSize(lar, hau);
      temp.Canvas.BeginScene;
      try
        temp.Canvas.Clear(TAlphaColorRec.Null);
        temp.Canvas.DrawBitmap(fond, srcRect, destRect, 1.0, True);
      finally
        temp.Canvas.EndScene;
      end;
     
      Rectangle2.Width := lar;
      Rectangle2.Height := hau;
      Rectangle2.Fill.Bitmap.WrapMode := TWrapMode.TileStretch;
      Rectangle2.Stroke.Kind := TBrushKind.None;
      Rectangle2.Fill.Kind := TBrushKind.Bitmap;
      Rectangle2.Fill.Bitmap.Bitmap := temp;
    end;
     
    procedure TForm1.rotation_rouleau3;
    var
      srcRect, destRect: TRectF;
    begin
      if (hau <= 0) or (lar <= 0) then
        Exit;
     
      rouleau3 := rouleau3 mod (hau * 12);
      if rouleau3 < 0 then
        rouleau3 := 0;
     
      srcRect := RectF(0, rouleau3, lar, rouleau3 + hau);
      destRect := RectF(0, 0, lar, hau);
     
      temp.SetSize(lar, hau);
      temp.Canvas.BeginScene;
      try
        temp.Canvas.Clear(TAlphaColorRec.Null);
        temp.Canvas.DrawBitmap(fond, srcRect, destRect, 1.0, True);
      finally
        temp.Canvas.EndScene;
      end;
     
      Rectangle3.Width := lar;
      Rectangle3.Height := hau;
      Rectangle3.Fill.Bitmap.WrapMode := TWrapMode.TileStretch;
      Rectangle3.Stroke.Kind := TBrushKind.None;
      Rectangle3.Fill.Kind := TBrushKind.Bitmap;
      Rectangle3.Fill.Bitmap.Bitmap := temp;
    end;
     
    { ---------- Evénements UI ---------- }
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Timer1.Enabled := True;
      Timer2.Enabled := True;
      Timer3.Enabled := True;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      StopAndSnap;
    end;
     
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      FreeAndNil(fond);
      FreeAndNil(temp);
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Randomize;
      fond := TBitmap.Create;
      fond.LoadFromFile('band.png');
     
      lar := fond.Width;
      hau := 0;
      if fond.Height > 0 then
        hau := Max(1, fond.Height div 12);
     
      temp := TBitmap.Create;
      temp.SetSize(lar, hau);
     
      rouleau1 := 0;
      rouleau2 := Random(hau * 12);
      rouleau3 := Random(hau * 12);
     
      rotation_rouleau1;
      rotation_rouleau2;
      rotation_rouleau3;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      rotation_rouleau1;
      rouleau1 := rouleau1 + 4;
    end;
     
    procedure TForm1.Timer2Timer(Sender: TObject);
    begin
      rotation_rouleau2;
      rouleau2 := rouleau2 + 4;
    end;
     
    procedure TForm1.Timer3Timer(Sender: TObject);
    begin
      rotation_rouleau3;
      rouleau3 := rouleau3 + 4;
    end;
     
    { ---------- Stop et alignement ---------- }
     
    procedure TForm1.StopAndSnap;
    var
      idx1, idx2, idx3: Integer;
      msg: string;
    begin
      Timer1.Enabled := False;
      Timer2.Enabled := False;
      Timer3.Enabled := False;
     
      idx1 := GetNearestFrame(rouleau1);
      rouleau1 := idx1 * hau;
      rotation_rouleau1;
     
      idx2 := GetNearestFrame(rouleau2);
      rouleau2 := idx2 * hau;
      rotation_rouleau2;
     
      idx3 := GetNearestFrame(rouleau3);
      rouleau3 := idx3 * hau;
      rotation_rouleau3;
     
      msg := Format('Rouleau1 = %d' + sLineBreak + 'Rouleau2 = %d' + sLineBreak + 'Rouleau3 = %d',
        [GetActiveFrame(rouleau1) + 1, GetActiveFrame(rouleau2) + 1, GetActiveFrame(rouleau3) + 1]);
      ShowMessage(msg);
    end;
     
    end.
    On ne peut pas faire confiance à un code qu'on n'a pas entièrement écrit soi‑même, et encore moins à celui qu'on a écrit entièrement. :aie:

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 422
    Par défaut
    bonjour
    et merci
    ta solution est pour le premier fichier
    mais pour le second
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    form1.BitmapListAnimation1.Stop;
    n:= form1.BitmapListAnimation1.??????????????????????????
    merci

  7. #7
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2017
    Messages : 757
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tintin62 Voir le message
    bonjour
    et merci
    ta solution est pour le premier fichier
    mais pour le second
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    form1.BitmapListAnimation1.Stop;
    n:= form1.BitmapListAnimation1.??????????????????????????
    merci
    Regarde OnProcess il est appelé à chaque mise à jour de l’animation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.BitmapListAnimation1Process(Sender: TObject);
    var
      CurrentFrame: Integer;
    begin
      CurrentFrame := Trunc(BitmapListAnimation1.NormalizedTime * BitmapListAnimation1.AnimationCount);
      Label1.Text := 'Frame active : ' + CurrentFrame.ToString;
    end;
    Nom : ScreenRecorderProject2.gif
Affichages : 53
Taille : 1 011,6 Ko

    Sinon, TBitmapListAnimation n’expose aucune propriété du type ActiveImageIndex, l’API donne tout pour calculer la frame, mais rien pour la lire directement.

    Il est inutile d’écrire Form1.BitmapListAnimation1.Stop; depuis l’unité du formulaire : utilise simplement BitmapListAnimation1.Stop;
    On ne peut pas faire confiance à un code qu'on n'a pas entièrement écrit soi‑même, et encore moins à celui qu'on a écrit entièrement. :aie:

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    422
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 422
    Par défaut
    bonjour
    sa marche
    merci

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

Discussions similaires

  1. Delphi FMX : TListView, apparence dynamique et image
    Par SergioMaster dans le forum Delphi
    Réponses: 0
    Dernier message: 07/07/2020, 18h51
  2. Script défilement images
    Par glloq8 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 24/10/2005, 15h53
  3. [FLASH MX] Problème pour défilement images
    Par Buzhug dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2004, 21h09

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