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 confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    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 émérite
    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
    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 confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    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
    Par défaut
    Picture est une propriété de TImage...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Quel je fais...

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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    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