2009-01-21 7 views
3

J'écris ma procédure de peinture Delphi TGraphicControl.Comment puis-je étirer deux graphismes côte à côte sur un TGraphicControl personnalisé?

Je crée une toile et je l'étire sur la zone graphique. Ça marche bien.

Ensuite, je répète cela avec un autre Stretchdraw sur la zone graphique, mais il est dessiné dans la zone du premier Stretchdraw et non sur la zone graphique lorsque je le dirige.

Existe-t-il un moyen permettant de placer les deux stretchdraws l'un à côté de l'autre dans le canevas de TGraphicControl?

Répondre

10

TCanvas.StretchDraw peint un graphique sur une toile dans une zone rectangulaire donnée. Le rectangle devrait, mais n'a pas besoin d'être, dans les limites de la toile. Le propriétaire de la toile détermine ces limites. Dans votre cas, il semble que le propriétaire de la toile soit l'objet TGraphicControl.

Si vous souhaitez que deux graphiques soient peints côte à côte, le TRect que vous utilisez pour dessiner le premier graphique doit représenter un rectangle adjacent au TRect que vous utilisez pour le deuxième graphique. Vous n'avez encore montré aucun code, il est donc difficile de savoir ce qui ne va pas.

Si vous utilisez la même variable TRect pour les appels à StretchDraw, alors vous devez vous assurer que vous modifier la position du rectangle entre les appels - modifier la propriété Left, pour commencer.

Par exemple:

var 
    r: TRect; 
begin 
    r := ClientRect; 
    // First rectangle takes up left half of control 
    r.Right := r.Right div 2; 
    Canvas.StretchDraw(r, graphic1); 

    // Shift the rectangle to the right half 
    r.Left := r.Right; 
    r.Right := ClientRect.Right; 
    Canvas.StretchDraw(r, graphic2); 
end;