Redimension d'un Timage

bebertmalvau Messages postés 4 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 16 mars 2011 - 9 févr. 2011 à 09:14
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 15 mai 2011 à 15:50
Bonjour j'ai un petit probleme de comprehension sur Timage ou Tpaintbox
je veux construir une sorte de regle avec un Tpanel comme support graphique et un Timage ou TpaintBox pour dessiner mes lettres/chiffres
mon probleme se trouve que lorsque je veux agmmenter ma regle mon graphique ne reagit pas comme je le souhaite dans le code ci-dessous
2 types de regles Horizontale et verticale
pour la verticale pas de problemes
pour l'horizontale je suis oblige de donner un chiffre constant à mes colonnes sinon il se passe n'importe quoi si quelqu'un voit l'erreur que je commet merci de me renseigner
J'ai essayer avec un Paintbox
et les methode Canvas.draw() ou Canvas.CopyRect
procedure Tform1.conf_PregleH;
var H,col:integer; chaine:string; Graph,tmp:Tbitmap;  rect1:trect;
begin
//declaration des graphiques
graph:=Tbitmap.Create;tmp:=Tbitmap.Create;
pbh.Width:=8000;//on etend un maximum le graphique pour l'ecriture
col:=length(listeh.Items.Strings[0]); //nbr de colonnes
col:=17;//si je l'enleve ça marche plus
Pbh.Width:=col*gcase   ;
//pregleh.Width:=pbh.Width+2; //on redonne la bonne taille au support
//construction du graphique
for h:=0 to col do
begin
//si on est en dessous de 26 on affiche en lettre
if col<26 then chaine:=chr(65+h) else chaine :=inttostr(h+1);
graph:= set_gromain(chaine,gcase);//construction du carré
tmp.Height:=graph.Height ;  //hauteur de tampon
rect1.Left:= h*gcase; rect1.Right:=rect1.Left+gcase;
rect1.Top:=0;rect1.Bottom:=gcase;
//ici je ne sais pas se qui se passe
Pbh.Canvas.CopyRect(rect1,graph.Canvas,graph.Canvas.ClipRect);
//pbh.Canvas.Draw((h*gcase),0,graph);//construction du tampon graphique
end; // Fin construction graphique
//redimension de la regle
Pbh.Height:=33;// hauteur du graphique
Pregleh.Height:=33;//hauteur du support
//coin support left/top
pregleh.Top:=pvoletg.Top-pregleh.Height; //position au dessus de la regle
PregleH.Width:=pbh.Width;//largeur du graphique

//position du graphique left/top
pregleh.Left:=pvoletg.Left;//position gauche de la regle
Pregleh.Top:=Pvoletg.Top- Pregleh.Height-5;
 //position du graphique
pbh.Top:=2;pbh.Left:=grille.Left;
//pbh.Width:=grille.Width; //largeur du graphique
//copy des numeros sur la regle
//pbH.Canvas.CopyRect(pbh.Canvas.ClipRect,tmp.Canvas,tmp.Canvas.ClipRect);
tmp.Free;graph.Free; //liberation des tampons
end;// fin confi regleH



procedure Tform1.conf_Preglev;
var v,lig:integer; chaine:string; Graph,tmp:Tbitmap;
begin
//declaration des graphiques
graph:=Tbitmap.Create;
pbv.Height:=8000;//hauteur maximum du graphique

lig:=listeh.Count;//nombre de lignes

pbv.Left:=0;pbv.Top:=0;

preglev.Height:=lig*gcase;
for v:=0 to lig do
begin
chaine:=Chiffre_romain(v+1);
graph:=set_gromain(chaine,gcase);
pbv.Canvas.Draw(0,v*gcase,graph);
end;
Pbv.Width:=graph.Width;
preglev.Width:= graph.Width+4 ;
Preglev.Top:=PvoletG.Top;
Preglev.Left:=pvoletG.Left-preglev.Width-10;
Preglev.Height:=PvoletG.Height;
pbv.Top:=grille.Top;
Pbv.Height:=grille.Height;
Preglev.BringToFront;
end;

7 réponses

cs_bolbola Messages postés 3 Date d'inscription lundi 23 juin 2008 Statut Membre Dernière intervention 9 février 2011
9 févr. 2011 à 15:22
Salut,
Est ce que tu peux vérifier que listeh.Items.Strings[0] <> Nil?
Tu peux me donner plus de détails sur cette variable?
0
bebertmalvau Messages postés 4 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 16 mars 2011
9 févr. 2011 à 18:32
Bonjour j'ai un petit probleme de comprehension sur Timage ou Tpaintbox
je veux construir une sorte de regle avec un Tpanel comme support graphique et un Timage ou TpaintBox pour dessiner mes lettres/chiffres
mon probleme se trouve que lorsque
listeH est rempli des le debut du programme
le principe du programme est baser sur les mots croisés une grille avec des cases bolquees ou non la listes H represente la matrice lignes ont toutes la meme longeur la regleH doit representée les colonnes La liste V les lignes Horizontales .
mon probleme est que quand je met un chiffre jusq'a 80 col:=80
et je fait la boucle pour afficher le graphisme
tout va pour le mieux mais quan je rentre un nombre sorti d'un calcul non complexe
col:=longueur de ligne DIV Taillecase
l'affichage s'arrete a 20 mes case s'aggrandissent au moment que je redimensionne le Panel et le Timage. je sais pas pourquoi
alors que je fait a peut pres la meme avec
lig:=nombre de Items.count-1 de listeH
cela marche mis à part que je me sert de la hauteur et dans l'autre procedure je me sert de la largeur donc dans uncas je manipule les X
dans l'aitre les Y
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
9 févr. 2011 à 22:23
Bonsoir

En passant, je ne sais pas si c'est la source de ton problème, mais il faut faire attention quand on veut calculer la taille d'une chaine de caractères à afficher de façon graphique.
La hauteur est souvent la même pour chaque caractère, donc à priori pas trop de problèmes, mais en largeur, la taille d'un caractère peut diffèrer grandement avec un autre en fonction de la police utilisée (Par exemple la largeur d'un "l" et d'un "D" peut être très différente dans le cas d'une police à chasse non fixe...).
Il ne faut donc pas utiliser la longueur d'une chaine de caractères, mais la longueur en pixels qu'occupera cette même chaine. Pour se faire, on utilisera la méthode du TCanvas "TextWidth". Et pour la hauteur on utilisera de même "TextHeight".
Ceci garantira que si tu changes ta police de caractères pour une autre, ou si tu changes sa taille par exemple, que ton calcul de largeur et de hauteur restera correct.

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
0
bebertmalvau Messages postés 4 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 16 mars 2011
10 févr. 2011 à 08:37
Bonjour j'ai un petit probleme de comprehension sur Timage ou Tpaintbox
je veux construir une sorte de regle avec un Tpanel comme support graphique et un Timage ou TpaintBox pour dessiner mes lettres/chiffres
mon probleme se trouve que lorsque

merci pour vos reponses
je crois que j'ai trouvé une parade
j'ai declaré mon graphique en Début de procedure
et cela marche (Graphique-->Timage)
l'ennui c'est je comprend toujour pas l'erreur que j'ai fait avant
merci encore
Ps j'ai constuit une Unite pour le calcul de chiffre Romain
Chiffre_romain(X) renvois X en chiffre romain sous forme de String;
Tab_romain() revois une Commatext pouvant etre utisée avec des composants à Items (ListBox,Combox)
listbox1.Items.Commatext:=Tab_romain() ;
et vous avez une liste de 169 Chiffres Romains
je mesui arreter a 169 mais continuer la liste est tres facile
si vous desirez recuperez l'unite contactez moi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
begueradj Messages postés 273 Date d'inscription dimanche 4 octobre 2009 Statut Membre Dernière intervention 24 juin 2014 9
22 févr. 2011 à 15:04
c'est en quel langage ?
0
bebertmalvau Messages postés 4 Date d'inscription mardi 8 février 2011 Statut Membre Dernière intervention 16 mars 2011
22 févr. 2011 à 18:32
merci pour les conseils
Pour les chiffres Romain je l'ai Construit sous Delphi 7 mais Facilemement réutilisable
La fonction Setromain est juste le result d'un case nombreentier of
La fonction TabRomain est le Result d'une boucle
renvoyant une Chaine à virgule
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
15 mai 2011 à 15:50
Bonjour,

A l'avenir, pour une question Delphi, merci de poster dans un thème Delphi, pas dans le bar.

[ Déplacé sur delphifr ]
0
Rejoignez-nous