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 :

4 images dans un fichier ressource !


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 449
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 449
    Points : 1 335
    Points
    1 335
    Par défaut 4 images dans un fichier ressource !
    Bonjour à toutes et à tous,

    J'ai un fichier ressource avec 4 photos, et j'aimerai les afficher moyennant un temps d'apparition fixe ou réglable.

    J'utilise ce code pour la boucle mais je ne vois pas comment l'appliquer à mon fichier *.RC.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Procedure TFRmMain.Button1Click(Sender:TObject);
    var 
    i : cardinal;
    Begin
    Inc(i);
    Image1.Picture := nil;
    Image1.Picture.Bitmap.LoadFromResourceName(HInstance,'IMAGE'+IntToStr(i))
    End;
    Merci de l'aide.

    @+,

    Cincap

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 449
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 449
    Points : 1 335
    Points
    1 335
    Par défaut
    Bonjour à toutes et à tous,

    En fait le seul truc qui cloche c'est que si le fichier Rc contient 6 images numérotées de o à 5 comme exemple :

    Fichier Rc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Image0 Bitmap "chalet neige_2.bmp"
    Image1 Bitmap "Carte Noël_T.bmp"
    Image2 Bitmap "Carte_3.bmp"
    Image3 Bitmap "Carte_5.bmp"
    Image4 Bitmap "Carte_8.bmp"
    Image5 Bitmap "Carte_10.bmp"
    Ce code provoque une erreur pour l'image 6 qu'il ne trouve pas forcément.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Inc(i);
    Image1.Picture := nil;
    Image1.Picture.Bitmap.LoadFromResourceName(HInstance,'IMAGE'+IntToStr(i))
    Je devrai logiquement revenir à l'image 0

    Merci d'avance,

    @+,

    Cincap

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 449
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 449
    Points : 1 335
    Points
    1 335
    Par défaut
    Voici le résultat qui fonctionne mais une image manque !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    While (i>4) do // alors qu'il y a 6 images de 0 à 5
    begin
    I:= 0;
    Image1.Picture.Bitmap.LoadFromResourceName(HInstance,'IMAGE0');
    end;
    Si je met While (i>5), cela provoque l'erreur que l'image 6 n'existe pas !

    @+,

    Cincap

  4. #4
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Peut-être que ce lien pourra t'aider : ici

    Sinon, un code de cette forme me semble plus approprié (?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    i := 0;
    Repeat
      ...
      inc(i);
    Until i > 5;

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 449
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 449
    Points : 1 335
    Points
    1 335
    Par défaut
    Bonsoir,

    @ archonte, dans mon test, j'avais essayé ton idée sans succès, peut être que j'avais mal placé mon code.

    Néanmoins, j'ai refait le test en utilisant la propriété tag de mon Tbutton et la, j'ai ce qui me convient, j'obtiens bien le choix de mes 6 photos.

    C'est certain que je m'y prends mal pour ma boucle.

    @+,

    Cincap

  6. #6
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
      ImgIndex : char = '0';
     
    Procedure TFRmMain.Button1Click(Sender:TObject);
    Begin
        Image1.Picture.Bitmap.LoadFromResourceName(HInstance, 'Image'+ImgIndex);
     
      inc(ImgIndex);
     
      if ImgIndex = '5' then
        ImgIndex := '0';
    End;

    ou encore :


    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
    implementation
     
    {$R *.dfm}
     
    const
      ImagesCount = 4;
     
    var
      Images : array[0..ImagesCount-1] of TBitmap;
      ImagesReady : boolean = false;
      ImageIndex   : LongInt = 0;
     
    { TFrmMain }
     
    procedures TFrmMain.Button1Click(Sender: TObject);
    begin
      if not ImagesReady then
        exit;
     
      Images1.Picture.Bitmap.Assign(Images[ImageIndex]);
      ImageIndex := (ImageIndex + 1) mod ImagesCount;
    end;
     
     
    { Images }
     
    procedure LoadImages;
    var N : LongInt;
    begin
      if ImagesReady then
        exit;
     
      for N := 0 to ImagesCount-1 do
      begin
        Images[N] := TBitmap.Create;
        Images[N].LoadFromResources(0, 'Image'+IntToStr(N));
      end;
      ImagesReady := true;  
    end;
     
    procedure ReleaseImages;
    var N: LongInt;
    begin
      if not ImagesReady then
        exit;
     
      ImagesReady := false;
      for N := 0 to ImagesCount-1 do
        Images[N].Free;
    end;
     
    initialization
      LoadImages;
     
    finalization
      ReleaseImages;
     
    end.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 449
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 449
    Points : 1 335
    Points
    1 335
    Par défaut
    @ Dr.Who, merci pour ton 1er exemple qui est correct moyennant cette modif :

    Mon fichier Rc indique maintenant image1 à image6.

    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
     
    Var
    ImgIndex : char = '2'; // Car image 1 est déjà affichée dans le oncreate
     
    procedure TForm1.Button1Click(Sender: TObject);
    Begin
     
     Image1.Picture.Bitmap.LoadFromResourceName(HInstance, 'Image'+ImgIndex);
     
     inc(ImgIndex);
     
      if ImgIndex = '7' then
        ImgIndex := '1';
     
     end;
    Cela simplifie largement mon code qu'en utilisant la propriété du tag.

    Par contre j'aurai voulu comprendre pourquoi ce code ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Inc(i);
    Image1.Picture := nil;
    Image1.Picture.Bitmap.LoadFromResourceName(HInstance,'IMAGE'+IntToStr(i))
     
    While (i>5) do // alors qu'il y a 6 images de 1 à 6
    begin
    I:= 1;
    Image1.Picture.Bitmap.LoadFromResourceName(HInstance,'IMAGE1');
    end;
    On peux dire que le topic de base est résolut.

    Merci,

    @+,

    Cincap

  8. #8
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Inc(i);


    I est une variable locale de la procedure ButtonClick ...
    elle perd donc sa valeur dés que l'on sort de la méthode.

    Image1.Picture := nil;


    ici, on écrase un objet qui est géré automatiquement par l'objet Image1 qui lui même est géré automatiquement par FrmMain!
    en gros ici, on provoque une exception qui mets fin au programme ou empechera son bon fonctionnement.



    Image1.Picture.Bitmap.LoadFromResourceName(HInstance,'IMAGE'+IntToStr(i));


    ne pas oublier le point virgule en fin de déclaration.
    attention respecte la case du nom de la ressource, même si ces dernières ne sont pas sensible à cette dernière.
    pour eviter les problèmes on considérera que "Image" est différent de "IMAGE" et est différent de "image" etc.


    While i > 5 do
    begin
    I := 1;
    Image1.Picture.Bitmap.LoadFromResourceName(HInstance,'IMAGE1');
    end;


    Ici c'est une boucle infinie, donc erreur. I vaut toujours 1, la boucle ne s'arrête jamais.
    et même si la boucle etait fonctionnelle, on chargerai inutilement la ressource "IMAGE1" 5 fois de suite!

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 449
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 449
    Points : 1 335
    Points
    1 335
    Par défaut
    Bonjour à toutes et à tous,

    @ Dr.Who, merci pour tes excellentes explications.

    @+,

    Cincap

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

Discussions similaires

  1. Images dans un fichier ressource
    Par Seth77 dans le forum C#
    Réponses: 3
    Dernier message: 18/01/2009, 17h56
  2. un executable dans le fichier ressource
    Par joebilou dans le forum Windows
    Réponses: 4
    Dernier message: 28/06/2005, 11h18
  3. Récupérer la taille d'une image dans un fichier (GIF/JPEG)
    Par SheikYerbouti dans le forum Multimédia
    Réponses: 4
    Dernier message: 12/05/2005, 14h17
  4. [Stockage] Image dans un fichier XML
    Par ovh dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 30/04/2003, 16h21

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