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

Langage Delphi Discussion :

Dimensions du Tcanvas d'un TImage


Sujet :

Langage Delphi

  1. #1
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut Dimensions du Tcanvas d'un TImage
    Afin de dessiner des rectangles, j'utilise un TImage inscrit dans une Scrollbox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    point:=Im.ScreenToClient(Mouse.CursorPos);
    Im.Canvas.Brush.Color:=clYellow;
    Im.Canvas.Pen.Color:=clRed;
    Im.Canvas.Rectangle(point.X,point.Y,point.X+100,point.Y+80);
    hors, si point.X+100 est supérieur à l'image, il me manque un bout du dessin

    Pour éviter ça, je retaille l'image:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if Im.Width<point.X+110 then begin
       Im.Width:=Max(Im.Width,point.X+110);
       Im.Height:=Max(Im.Height,point.Y+90);
    end;
    Je constate que l'image est redimensionnée, mais le rectangle est toujours incomplet (malgré Refresh/Repaint de l'image)

    Donc, le pb doit venir du TCanvas qui ne "s'étend" pas (?)

    Comment faire pour retailler le TCanvas aux dimensions du TImage ?

  2. #2
    Membre éprouvé
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Points : 1 177
    Points
    1 177
    Par défaut
    Il faudrait plutot jouer avec le canvas du bitmap au lieu du canvas du TImage.

    Avec ce code, il me semble que cela donne l'effet escompté :
    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
    procedure TForm1.ImMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      with Im.Picture.Bitmap do
        begin
          with ScreenToClient(Mouse.CursorPos) do
            begin
              Canvas.Brush.Color:=clWhite;
              if Width<X+100 then
                Width := X+100;
              if Height<Y+80 then
                Height := Y+80;
              Canvas.Brush.Color:=clYellow;
              Canvas.Pen.Color:=clRed;
              Canvas.Rectangle(X,Y,X+100,Y+80);
            end;
     
        end;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with Im, Picture.Bitmap do
        begin
          AutoSize := True;
          Width := 500;
          Height := 500;
        end;
    end;

  3. #3
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Ouep, sauf que je n'ai pas de Picture, juste le TImage...

    Je m'inspire d'un tuto Developpez ("Le graphisme"), mais l'inspiration n'est peut-être pas bonne par rapport à mes ambitions :http://www.developpez.net/forums/sho...d.php?t=129764

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Picture est une propriété de TImage...

  5. #5
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Quel je fais...

  6. #6
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Après quelques tâtonements supplémentaires, voici ce qui répond complètement à ma problématique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    point:=Im.ScreenToClient(Mouse.CursorPos);
    Im.Width:=Max(Im.Width,point.X+110);
    Im.Height:=Max(Im.Height,point.Y+90);
    with Im.Picture.Bitmap do begin
      with ScreenToClient(Mouse.CursorPos) do begin
         Canvas.Brush.Color:=clWhite;
         Width := Im.Width;
         Height := Im.Height;
         Canvas.Brush.Color:=clYellow;
         Canvas.Pen.Color:=clRed;
         Canvas.Rectangle(point.X,point.Y,point.X+100,point.Y+80);
      end;
    Merci de vos tuyaux

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

Discussions similaires

  1. [Lazarus] Utilisation Tcanvas, Timage
    Par Invité dans le forum Lazarus
    Réponses: 6
    Dernier message: 05/12/2012, 09h42
  2. TImage dans ImageList à dimensions variables
    Par dim07 dans le forum Langage
    Réponses: 0
    Dernier message: 25/04/2008, 11h09
  3. TCanvas : dimensions?
    Par meli0207 dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/02/2005, 13h50
  4. TImage
    Par Thylia dans le forum C++Builder
    Réponses: 5
    Dernier message: 09/07/2002, 20h03
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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