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

Composants FMX Delphi Discussion :

Effacer le contenu d'un Canvas


Sujet :

Composants FMX Delphi

  1. #1
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut Effacer le contenu d'un Canvas
    Bonjour,

    Il y a quelque chose sur FMX que je ne comprends pas

    - J'ai créée une Form sur laquelle se trouve un TImage de 50x50 posé au milieu (sans bitmap sans rien, juste un TImage).
    - J'ai ajouté un bouton avec le code suivant dans le OnClick :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FImage.Canvas.Clear(TAlphaColorRec.Red);
    Cela a pour effet d’effacer l'ensemble de ma form, et pas seulement le TImage, savez vous pourquoi ?

    Merci

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour
    Citation Envoyé par retwas Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FImage.Canvas.Clear(TAlphaColorRec.Red);
    Cela a pour effet d’effacer l'ensemble de ma form, et pas seulement le TImage, savez vous pourquoi ?
    Le composant image récupère le canvas de son parent, la méthode appelée va s'appliquer à tout le canvas.
    Il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FImage.Canvas.Clear(TRectF.Create(FImage.Position.X, FImage.Position.Y, FImage.Position.X + FImage.Width, FImage.Position.Y + FImage.Height) TAlphaColorRec.Red);
    pour délimiter la zone redessinée à celle qui vous intéresse...
    Philippe.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par retwas Voir le message
    Bonjour,

    Il y a quelque chose sur FMX que je ne comprends pas

    - J'ai créée une Form sur laquelle se trouve un TImage de 50x50 posé au milieu (sans bitmap sans rien, juste un TImage).
    - J'ai ajouté un bouton avec le code suivant dans le OnClick :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FImage.Canvas.Clear(TAlphaColorRec.Red);
    Cela a pour effet d’effacer l'ensemble de ma form, et pas seulement le TImage, savez vous pourquoi ?

    Merci
    c'est lié au fait que sous FMX, contrairement à VCL, le parent ne limite pas le dessin de son enfant.

    il y a longtemps j'avais fait cette démonstration inspirée de CSS is Awesome

    Nom : AwesomeFMX.gif
Affichages : 1141
Taille : 242,3 Ko

    Nom : css-is-awesome-20090407-142244.jpg
Affichages : 999
Taille : 19,5 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
     
    unit Execute.AwesomeFMX;
     
    {
       Awesome FMX for XE6 (c)2014 by Paul TOTH <tothpaul@execute.re>
     
       http://www.execute.re
     
    }
     
    interface
     
    uses
      System.Classes, System.Types, System.UITypes,
      FMX.Controls, FMX.Graphics, FMX.Types;
     
    type
      TAwesomeFMX = class(TControl)
      public
        constructor Create(AOwner: TComponent); override;
        procedure Paint; override;
      published
        property Position;
        property Width;
        property Height;
      end;
     
    procedure Register;
     
    implementation
     
    procedure Register;
    begin
      RegisterComponents('Execute.SARL', [TAwesomeFMX]);
    end;
     
    { TAwesomeFMX }
     
    constructor TAwesomeFMX.Create(AOwner: TComponent);
    begin
      inherited;
      Position.X := 20;
      Position.Y := 20;
      Width := 320;
      Height := 160;
    end;
     
    procedure TAwesomeFMX.Paint;
    var
      R: TRectF;
    begin
      R := LocalRect;
      Canvas.Stroke.Color := TAlphaColorRec.Black;
      Canvas.Stroke.Thickness := 4;
      Canvas.DrawRect(R, 0, 0, [], 1);
      Canvas.Font.Family := 'Arial';
      Canvas.Font.Style := [TFontStyle.fsBold];
      Canvas.Font.Size := 48;
      Canvas.Fill.Color := TAlphaColorRec.Black;
      R.Right := R.Left + 320;
      Canvas.FillText(R, 'FMX'#13'IS'#13'AWESOME', False, 1, [], TTextAlign.Leading);
    end;
     
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre expérimenté
    Avatar de retwas
    Homme Profil pro
    Développeur Java/Delphi
    Inscrit en
    Mars 2010
    Messages
    698
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java/Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 698
    Points : 1 608
    Points
    1 608
    Billets dans le blog
    4
    Par défaut
    D'accord, merci des explications.

    Pour le clear c'est bon, mais dès que je veux dessiner une ligne avec un DrawLine j'ai le même soucis du coup.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FImage.Canvas.DrawLine(pt1, pt2, 1);
    Cela a pour effet de tracer un trait sur mon parent, comment lui faire comprendre que je veux travailler sur une zone précise ?

    Merci

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur multiplateformes
    Inscrit en
    Mars 2003
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur multiplateformes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 273
    Points : 628
    Points
    628
    Par défaut
    Bonjour,

    Désolé pour cette intervention tardive.
    TImage n'est pas du tout fait pour cela : il s'agit d'un composant pensé pour adapter une image à des variations de mise en page, de dimensions et de résolutions dans un contexte multiplateforme.
    Pour dessiner sur le canvas d'un TImage vous pouvez utiliser un TBitmap créé dynamiquement en mémoire, dessiner sur le canvas de ce TBitmap et l'assigner ensuite au bitmap du TImage à la résolution voulue.
    Si vos dimensions d'écran et résolution ne bougent pas utilisez plutôt TPaintBox à la place de TImage selon le même procédé et en rafraichissant l'image avec OnPaint.
    Il est aussi possible d'afficher une image dans un TRectangle ou un TCircle via la propriété Fill.

Discussions similaires

  1. Effacer le contenu d une zone de liste
    Par nico5151 dans le forum IHM
    Réponses: 23
    Dernier message: 22/06/2005, 15h50
  2. Effacer le contenu d'un fichier texte...
    Par loupdeau dans le forum MFC
    Réponses: 2
    Dernier message: 09/05/2005, 15h28
  3. comment effacer le contenu d'une table ttable
    Par naw dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/07/2004, 16h13
  4. Comment effacer le contenu d'une scrollbox???
    Par Leclair2000 dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/07/2004, 16h34
  5. Effacer le contenu d'un fichier a partir d'une ligne
    Par localhost dans le forum Linux
    Réponses: 3
    Dernier message: 04/04/2004, 04h47

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