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 :

Problème de redimensionnement d'un TPublicGraphicControl(TImage)


Sujet :

Langage Delphi

  1. #1
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut Problème de redimensionnement d'un TPublicGraphicControl(TImage)
    Bonjour,

    J'ai besoin d'augmenter la taille d'un TPublicGraphicControl(imageFond) dont j'utilise le canvas comme Avant-Plan pour y tracer des trucs éphémères par dessus ce que je trace sur l'Arrière Plan constitué par imageFond.Picture.Bitmap et je galère après avoir essayé en vain de multiples ruses dont voici le code d'une des tentatives :
    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
    procedure TfrmGen.bOKNouvelleImageClick(Sender: TObject);
    var Bmp: TBitMap; W, H: integer;
    begin
      Bmp := TBitMap.Create;
      clFond := plCoulFond.Color;
    
      clFond := plCoulFond.Color;
      W := StrToIntDef(labedLargeurImage.text, 100);
      H := StrToIntDef(labedHauteurImage.text, 100);
    
      ScrollBox1.Align := alNone; ImageFond.Align := alClient;
      with ScrollBox1 do begin Width := W; Height := H; end;
      Bmp := TBitMap.Create;
      with Bmp do begin Width := W; Height := H; end;
      EffacerBmp(Bmp, clFond);
      ImageFond.Picture.Bitmap.Assign(Bmp);
      if TPublicGraphicControl(imageFond).CanResize(W, H) then begin
        ShowMessage('CanResize = True'); // ce ShowMessage s'affiche donc le CanResize est d'accord pour un redimensionnement 
        //TPublicGraphicControl(imageFond).AdjustSize;   // <- Ne marche pas !!!
        TPublicGraphicControl(imageFond).ConstrainedResize(W, H, W, H); // <- Ne marche pas non plus !!! ???
        EffacerBmp(Bmp, clTranspa);
        CanAvP := TPublicGraphicControl(imageFond).Canvas;
        CopyBmpToCanvas(Bmp, CanAvP);
      end;
      ImageFond.Repaint;
      plNouvelleImage.Visible := False;
      Bmp.Free;
    end;
    Le résultat obtenu avec ce code permet seulement de tracer dans la zone agrandie de l'arrière-plan c.à.d sur le Bmp de imageFond.Picture.Bitmap (la zone Client de la ScrollBox1 et l'image du fond s'agrandissent)
    Mais la taille du Canvas d'avant-plan (CanAvP := TPublicGraphicControl(imageFond).Canvas) reste inchangée et égale à celle que le TImage imageFond avait lors du FormShow de la fiche qui occupe le plein écran.

    Comment forcer l'agrandissement du Canvas d'avant-plan ??? S.V.P

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Je partage votre plaisir MyLady d'autant plus que j'utilise votre MonCanvasDAvantPlan := TPublicGraphicControl(imageFond).Canvas que vous m'aviez appris à utiliser pour tracer des trucs éphémères par-dessus de ce que je trace sur imageFond.Fond.Picture.bitMap ... mais je parie que ça aussi ce n'est plus possible avec le TCanvas FMX .
    C'était de moi ça, ça fais longtemps alors, je ne m'en souviens plus
    Ha ouiiiiiiiiiiiiiiiii, siiiiiiiiiiiiiiiii, le transtypage de la mort qui tue pour exposer le Canvas du TImage et pas celui du Bitmap qu'il contient, rholalaaaa ! :
    Je me reconnais bien là
    J'avais rédigé une FAQ d'ailleurs :
    http://delphi.developpez.com/faq/?pa...ntient-Picture

    Il semblerait que la FAQ est disparue et aie été remplacé par une autre. DVP/Delphi c'est parti en vrille quand je n'étais plus là, pas cool ça
    Tout fout l'camp !


    Bon, voyons voir ça...
    Bah c'est tout simple, c'est imagefond (le Timage) que tu dois redimensionner :
    Imagefond.width:=...;
    Imagefond.height:=...;

    Tout simplement !
    Bidouilleuse Delphi

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    LadyWasky : C'était de moi ça, ça fais longtemps alors, je ne m'en souviens plus
    Oui, oui, mais ça remonte à plusieurs années.

    Bah c'est tout simple, c'est imagefond (le Timage) que tu dois redimensionner :
    Imagefond.width:=...;
    Imagefond.height:=...;
    Bizarre je pensais que le ImageFond.Picture.Bitmap.Assign(Bmp) réglait ça tout seul, mais bon
    j'ai ajouté Imagefond.width := W; et Imagefond.height := H; sur la ligne suivante et refait un essai mais le canvas d'avant-plan ne s'agrandit toujours pas alors que l'arrière-plan s'agrandit.

    J'ai aussi essayé en remplaçant TPublicGraphicControl(imageFond).ConstrainedResize(W, H, W, H) par TPublicGraphicControl(imageFond).Resize mais le canvas d'avant-plan refuse toujours de s'agrandir.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  4. #4
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Mais c'est quoi ton Canvas "d'avant plan" ???
    C'est le Contrôle parent du Timage ?
    Bidouilleuse Delphi

  5. #5
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Tu n'as pas plus de code que ça a montrer, parce que là, c'est vraiment confus en fait
    Bidouilleuse Delphi

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-bonjour,

    LadyWasky : Mais c'est quoi ton Canvas "d'avant plan" ??? C'est le Contrôle parent du Timage ?
    Bin mon canvas "d'avant-plan" c'est en ligne 24 CanAvP := TPublicGraphicControl(imageFond).Canvas;

    Tu n'as pas plus de code que ça a montrer, parce que là, c'est vraiment confus en fait
    En fait l'essentiel se passe dans les lignes suivantes :
    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
    procedure TfrmGen.bOKNouvelleImageClick(Sender: TObject);
    var Bmp: TBitMap; W, H: integer;
    begin
      Bmp := TBitMap.Create;
      clFond := plCoulFond.Color;
    
      clFond := plCoulFond.Color;
      W := StrToIntDef(labedLargeurImage.text, 100);
      H := StrToIntDef(labedHauteurImage.text, 100);
    
      ScrollBox1.Align := alNone; ImageFond.Align := alClient;
      with ScrollBox1 do begin Width := W; Height := H; end;
      Bmp := TBitMap.Create;
      with Bmp do begin Width := W; Height := H; end;
      EffacerBmp(Bmp, clFond);
      ImageFond.Picture.Bitmap.Assign(Bmp);
      Imagefond.width := W;
      Imagefond.height := H;
      if TPublicGraphicControl(imageFond).CanResize(W, H) then begin
        ShowMessage('CanResize = True'); // ce ShowMessage s'affiche donc le CanResize est d'accord pour un redimensionnement 
        //TPublicGraphicControl(imageFond).AdjustSize;   // <- Ne marche pas !!!
        TPublicGraphicControl(imageFond).ConstrainedResize(W, H, W, H); // <- Ne marche pas non plus !!! ???
        EffacerBmp(Bmp, clTranspa); // <- clTranspa = couleur de transparence fixée dans le FormShow
        CanAvP := TPublicGraphicControl(imageFond).Canvas;
        CopyBmpToCanvas(Bmp, CanAvP);
      end;
      ImageFond.Repaint;
      plNouvelleImage.Visible := False;
      Bmp.Free;
    end;
    Et parmi ces lignes j'appelle EffacerBmp pour la couleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure EffacerBmp(Bmp: tBitMap; clEffacer: TColor);
    begin
      with Bmp do begin
        PixelFormat := pf32Bit;
        Canvas.brush.color := clEffacer;
        Canvas.FillRect(Canvas.clipRect);
        TransparentColor := clEffacer;
        TransparentMode := tmAuto;
        Transparent := True;
      end;
    end;
    ... ainsi que CopyBmpToCanvas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure CopyBmpToCanvas(const Bmp: TBitmap; var Can: Tcanvas);
    begin
      Can.CopyMode := cmSrcCopy;
      Can.Draw(0, 0, Bmp);
    end;
    ... et donc le problème se situe très probablement entre les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if TPublicGraphicControl(imageFond).CanResize(W, H) then begin
        ...
      end;
    ... et entre ces lignes j'ai aussi déjà essayé toute cette flopée d'instructions :

    TPublicGraphicControl(imageFond).Align:=alClient;
    TPublicGraphicControl(imageFond).ClientHeight:=H;
    TPublicGraphicControl(imageFond).ClientWidth:=W;
    TPublicGraphicControl(imageFond).Width:=W;
    TPublicGraphicControl(imageFond).Height:=H;
    TPublicGraphicControl(imageFond).Updating;
    TPublicGraphicControl(imageFond).Paint;

    TPublicGraphicControl(imageFond).Invalidate;
    TPublicGraphicControl(imageFond).Repaint;
    TPublicGraphicControl(imageFond).Show;
    TPublicGraphicControl(imageFond).Update;
    TPublicGraphicControl(imageFond).Refresh;

    ... mais aucune n'a déverrouillé le schmillblick.

    Mais si je ne trouve pas la solution avec ce TPublicGraphicControl je vais carrément l'ignorer
    et utiliser pour l'avant-plan un TImage-transparent par-dessus le Timage ImageFond et de mêmes dimensions que ImageFond

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Non mais c'est normal aussi hein
    C'est pas le canvas que tu dois redimensionner, c'est le contrôle qui le contient (Imagefond, pas TPublicGraphicControl(imageFond) !!!).
    Après, le Bitmap qu'il y a dans ton TImage, il ne va pas s'agrandir pour autant, c'est un deuxième composant dans le Timage.

    TPublicGraphicControl, c'est juste un biniou qui permet d'accéder au Canvas de imageFond et ça ne peut pas se redimensionner (C'est un peu (pour faire simple, je précise, parce que je vois d'ici les puristes débouler pour me reprendre, alors que je maîtrise Delphi un peu plus que la plupart je crois) comme une fonction en fait, et du coup ça ne se redimensionne pas)

    J'arrive plus à expliquer, désespérée

    (Oh maman c'te sac de noeud que tu nous a sorti ! )
    Bidouilleuse Delphi

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    LadyWasky : C'est pas le canvas que tu dois redimensionner, c'est le contrôle qui le contient (Imagefond, pas TPublicGraphicControl(imageFond) !!!).
    Bin c'est justement ce qui est réalisé entre les lignes 8 à 18 de la procedure TfrmGen.bOKNouvelleImageClick(Sender: TObject) où s'effectue le redimensionnement :
    - de la ScrollBox qui contient Imagefond,
    - du BitMap que j'assigne à ImageFond.Picture.Bitmap,
    - et en plus j'y ai ajouté Imagefond.width := W et Imagefond.height := H
    mais comme tout ça n'a pas agrandi le canvas CanAvP := TPublicGraphicControl(imageFond).Canvas
    j'ai supposé que cela était causé par ma façon d'utiliser ce TPublicGraphicControl(imageFond).Canvas

    TPublicGraphicControl, c'est juste un biniou qui permet d'accéder au Canvas de imageFond et ça ne peut pas se redimensionner (C'est un peu (pour faire simple, je précise, parce que je vois d'ici les puristes débouler pour me reprendre, alors que je maîtrise Delphi un peu plus que la plupart je crois) comme une fonction en fait, et du coup ça ne se redimensionne pas)
    OK, mais comme on peut accéder aux méthodes du TPublicGraphicControl(imageFond) parmi lesquelles on trouve la fonction TPublicGraphicControl(imageFond).CanAutoSize(W,H) ainsi que les procédures telles que :
    - TPublicGraphicControl(imageFond).AdjustSize;
    - TPublicGraphicControl(imageFond).ConstrainedResize(W, H, W, H);
    - TPublicGraphicControl(imageFond).Resize;
    cela m'a fait penser qu'il était possible de les utiliser pour forcer l'agrandissement puisque le redimensionnement de ImageFond ne provoque pas celui du canvas d'"avant-plan" TPublicGraphicControl(imageFond).Canvas.

    Voici une copie d'écran du résultat qui montre la limite du canvas d'"avant-plan" :
    - à gauche : un barbouillage peint sur le BitMap d'arrière-plan constitué par ImageFond.Picture.Bitmap et qui atteint bien la limite de l'agrandissement imposé à ImageFond,
    - à droite des objets (fleur et goutte d'eau) tracés sur un BitMap de même taille et que CopyBmpToCanvas(const Bmp: TBitmap; var Can: Tcanvas) me trace sur le TPublicGraphicControl(imageFond).Canvas et que j'y déplace en les agrippant
    à la souris : on voit clairement que leur tracé est interrompu à une limite inférieure à celle du BitMap d'arrière-plan.

    A+.
    Images attachées Images attachées  
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #9
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Bah il faud que tu changes le bitmap avec les nouvelles dimensions de imagefond (image fond, comme il est aligné au client Align = alClient, il se redimensionne tout seul, tu auras beau gesticuler avec tout le code que tu veux, tu ne le redimensionnera pas par code, a moins de de mettre sa propriété Align:=alNone ImageFond.Picture.Bitmap


    TPublicGraphicControl(imageFond) et imagefond, c'est la même chose, et le canvas de t'image s'adapte automatiquement à la taille de imagefond !

    Quand tu chans la taille d'un Timage, par contre, la taille du bitmap à l'intérieur ne change pas, il faut la faire varier aussi du coup.

    ... mais aucune n'a déverrouillé le schmillblick.
    bah tu m'étonnes

    Bref :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      Imagefond.Width:=W;
      Imagefond.Height:=H;
      Imagefond.Picture.Bitmap.Width := Imagefond.Width;
      Imagefond.Picture.Bitmap.Height := Imagefond.Height;
    Bidouilleuse Delphi

  10. #10
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Depuis le temps, pour ce genre de truc, tu devrais essayer avec des TPaintBox
    Bidouilleuse Delphi

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-bonjour,

    LadyWasky : Bah il faud que tu changes le bitmap avec les nouvelles dimensions de imagefond (image fond, comme il est aligné au client Align = alClient, il se redimensionne tout seul, tu auras beau gesticuler avec tout le code que tu veux, tu ne le redimensionnera pas par code, a moins de de mettre sa propriété Align:=alNone ImageFond.Picture.Bitmap
    Imagefond.Width:=W;
    Imagefond.Height:=H;
    Imagefond.Picture.Bitmap.Width := Imagefond.Width;
    Imagefond.Picture.Bitmap.Height := Imagefond.Height;
    OK, entre-temps j'ai remplacé le TPublicGraphicControl(imageFond).Canvas tout simplement par un TImage nommé ImageAvant transparent et de même taille que Image fond comme suit et en tenant compte de ta remarque (voir lignes 21,22 et 34,35) :

    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
    procedure TfrmGen.bOKNouvelleImageClick(Sender: TObject);
    var Bmp: TBitMap; W, H: integer;
    begin
      Bmp := TBitMap.Create;
      clFond := plCoulFond.Color;
    
      clFond := plCoulFond.Color;
      W := StrToIntDef(labedLargeurImage.text, 100);
      H := StrToIntDef(labedHauteurImage.text, 100);
    
      ScrollBox1.Align := alNone; ImageFond.Align := alClient; ImageAvant.Align := alClient;
      with ScrollBox1 do begin Width := W; Height := H; end;
      Bmp := TBitMap.Create;
      with Bmp do begin Width := W; Height := H; end;
      // Pour le Timage du Fond :
      ImageFond.Picture.Bitmap.Assign(Bmp);
      EffacerBmp(Bmp, clFond);
      with Imagefond do begin
        width := W;
        height := H;
        Picture.Bitmap.Width := W;
        Picture.Bitmap.Height := H;
        Update;
        Invalidate;
      end;
      // Pour le Timage Avant superposé :
      EffacerBmp(Bmp, clTranspa);
      ImageAvant.Picture.Bitmap.Assign(Bmp);
      with ImageAvant do begin
        Top := ImageFond.Top;
        Left := ImageFond.Left;
        Width := ImageFond.Width;
        Height := ImageFond.Height;
        Picture.Bitmap.Width := Imagefond.Width;
        Picture.Bitmap.Height := Imagefond.Height;
        Update;
        Invalidate;
      end;
    end;
    ... et même avec mes 2 TImage superposés ça ne marche toujours pas : quelle galère !!! et ce malgré des instructions redondantes puisque Align = alClient devrait régler ce problème à lui tout seul.
    ... du coup j'y pige plus rien de rien.

    Depuis le temps, pour ce genre de truc, tu devrais essayer avec des TPaintBox
    Pas possible car vérification faite le TPaintBox ne peut pas être déclaré transparent et je souhaitais différencier le BitMap de ImageFond de celui de ImageAvant pour éviter de mélanger les deux en un seul.
    - L'avant-plan me sert selon les cas à déplacer ou modifier des trucs dont la forme, les couleurs ou la position est provisoire (la forme et la taille des fleurs par exemple sont ajustables en tirant sur les points de contrôle des courbes de Bézier, les larmes par exemple sont inclinables et peuvent être agrandies ou rapetissées en tirant sur les points de leur contour (font partie d'objets créés à partir d'équations polaires) et les couleurs de tous ces trucs sont modifiables via un menu.
    - et L'arrière-plan me sert soit pour y tracer ou y peindre dessus directement , soit pour y incruster les trucs de l'avant-plan lorsque on juge qu'ils sont achevés.
    Cela simplifie beaucoup la création d'un tableau : les esquisses éphémères sur un avant-plan et le définitif sur un arrière plan d'accumulation.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    Finalement j'ai résolu mon problème d'agrandissement après avoir viré le TPublicGraphicControl(imageFond).Canvas ainsi que la tentative avec 2 TImage transparents superposés
    en n'utilisant qu'un seul Timage et en traçant mes trucs éphémères sur un BitMap-Clone du BmpFond dans lequel j'accumule les trucs achevés ... et en plus ça a simplifié le code qui se raccourcit à 14 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TfrmGen.bOKNouvelleImageClick(Sender: TObject);
    var W, H: integer;
    begin
      clFond := plCoulFond.Color;
      W := StrToIntDef(labedLargeurImage.text, 100);
      H := StrToIntDef(labedHauteurImage.text, 100);
      ScrollBox1.Align := alClient; ImageFond.Align := alNone;
      with BmpFond do begin Width := W; Height := H; end;
      // Pour le Timage du Fond :
      EffacerBmp(BmpFond, clFond);
      ImageFond.Picture.Bitmap.Assign(BmpFond);
      ImageFond.Invalidate;
      plNouvelleImage.Visible := False;
    end;
    ... mais après 3 jours de galère !!!

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  13. #13
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Ha bah voilà !
    Bidouilleuse Delphi

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    LadyWasky : Ha bah voilà !
    En fait la cause de ma galère n'était ni l'utilisation du TPublicGraphicControl(imageFond).Canvas ni son remplacement par 2 TImage transparents mais tout bêtement
    une instruction de la routine ImageMouseDown qui remplaçait le BitMap-d'avant-plan par un BitMap tout blanc mais de taille égale à celle de l'image lors du FormShow donc inférieure à l'agrandissement souhaité !!!
    Je m'en suis rendu compte lors des modifications nécessitées par le remplacement des 2 TImage par un TImage unique.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. [CSS] problème de redimensionnement
    Par cootchy dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 14/02/2006, 17h42
  2. Problème avec la fonction Stretch de TImage
    Par laventure dans le forum Composants VCL
    Réponses: 5
    Dernier message: 09/08/2005, 13h06
  3. [SWT][Layout]problème de redimensionnement d'un Text
    Par McFoggy dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 05/08/2004, 12h10
  4. Problème de redimensionnement
    Par routouf dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 16/07/2004, 16h27
  5. Problème de redimensionnement
    Par david71 dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 14/05/2004, 17h39

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