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 :

Création d'un array de Timage


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut Création d'un array de Timage
    Bonjour,

    malgré des recherches dans la FAQ ainsi que dans les messages du forum Delphi et malgré divers essais, je ne sors pas des EAccessViolation.
    Le problème semble pourtant simple. Il s'agit de :
    - créer un array de Timages (avec des tailles différentes définies).
    - copier, dans chaque Timage de l'array, une image originale unique, nommée PotoInit, qui existe déjà sur Form1 ( Les copies étant faites en mettant à l'échelle grâce la propriété Stretch).
    - Rendre visible les images de l'array qui se superposent partiellement (de la plus grande en arrière-plan à la plus petite en avant-plan).
    - Bien sûr, il y aura ensuite d'autres instructions qui seront nécessaires avec OnClick, respectivement pour chaque image. Mais ce n'est pas là qu'est le premier problème de violation d'accès.
    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
     
    var
      Form1: TForm1;
      Photo:array[1..12] of TImage;
     
    implementation
     
    {$R *.DFM}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
       i:integer;
    begin
         for i:=1 to 12 do
         begin
     
              {Quel code pour creer photo[i] ?}
     
              photo[i].width:=40+10*(12-i);
              photo[i].height:=photo[i].width;
     
              {Quel code pour copier PhotoInit dans photo[i],
              en la mettant à la taille de Photo[i] avec la propriété Stretch ?}
     
              photo[i].top:=0;
              photo[i].left:=0;
              photo[i].transparent:=false;
              photo[i].visible:=true;
     
         end;
    end;

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Le problème est que les images dans ton tableau ne sont pas instanciées. Il faut d'abord les créer via un photo[i] := TImage.Create( Self ); puis positionner le Parent de photo[i] ainsi que ses propriétés Top et Left pour qu'il s'affiche ou tu veux.

    Enfin pour copier depuis une image originelle tu peux utiliser Assign :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    photo[i].Assign( PotoInit );
    Et après faire les modifications sur la taille de l'image comme tu veux.

  3. #3
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut
    Merci Aka Guymelef

    C'est précisément à cet endroit là que je me plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    photo[i]:=TImage.Create( Self );
    photo[i].parent:=Form1;
    photo[i].top:=0;
    photo[i].left:=0;
    photo[i].width:=PhotoInit.width;
    photo[i].height:=PhotoInit.height;
    photo[i].Assign(PhotoInit);   ---> violation d'accès.

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    d'où vient PhotoInit ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre très actif
    Inscrit en
    Mars 2007
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 205
    Par défaut
    Bonjour Paul TOTH,

    Je vais essayer d'être très précis pour répondre à ta question. "PhotoInit" est le nom donné à un Timage qui a été crée de la façon habituelle suivante :
    - Sur Form1, on a déposé le composant TImage, dont le nom était alors Image1.
    - Dans l'inspecteur d'objet, à l'onglet Image1:TImage, dans Propriétés, à la ligne Name, on a effacé Image1 et écrit à la place PhotoInit.
    - à la ligne Picture qui portait la mention (vide), le clic fait apparaitre la fenêtre éditeur d'image. En utilisant la commande "Charger", on a été récupérer une image au format .bmp ; Puis clic sur le bouton "OK". L'image devient alors visible sur Form1 sous le nom PhotoInit.
    La mention (vide), qui figurait auparavant, a disparu et on lit à sa place (TBitmap).
    - La propriété PhotoInit.visible a été mise à false de telle sorte que cette image n'apparaisse pas à l'exécution.

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    ok et bien faisons le test

    Delphi 5 (j'ai ça sous la main)

    Timage, bitmap, renommé en PhotoInit

    double clic sur la fiche, je copie colle le code et ajoute une ou deux modifs
    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
     
    var
      photo: array[1..12] of TImage;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i : Integer;
    begin
      for i := 1 to 12 do
      begin
        photo[i]:=TImage.Create( Self );
        photo[i].parent:=Form1;
        photo[i].top:=10 * i;
        photo[i].left:=10 * i;
        photo[i].width:=PhotoInit.width * i div 10;
        photo[i].height:=PhotoInit.height * i div 10;
        photo[i].Assign(PhotoInit);
      end;
    end;
    impossible d'affecter TImage à TImage

    c'est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        photo[i].Picture.Assign(PhotoInit.Picture);
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 06/02/2014, 20h24
  2. création d'un array
    Par laurentSc dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/03/2011, 12h18
  3. Réponses: 2
    Dernier message: 26/06/2009, 12h55
  4. OnMouseMouve et array of Timage
    Par JJJJJ dans le forum Débuter
    Réponses: 10
    Dernier message: 24/03/2009, 14h41
  5. Comment utiliser un array of TImage ?
    Par poussinphp dans le forum Langage
    Réponses: 23
    Dernier message: 19/09/2005, 09h24

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