bebertmalvau
Messages postés4Date d'inscriptionmardi 8 février 2011StatutMembreDernière intervention16 mars 2011
-
9 févr. 2011 à 09:14
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDerniè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;
bebertmalvau
Messages postés4Date d'inscriptionmardi 8 février 2011StatutMembreDernière intervention16 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
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 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
bebertmalvau
Messages postés4Date d'inscriptionmardi 8 février 2011StatutMembreDernière intervention16 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
bebertmalvau
Messages postés4Date d'inscriptionmardi 8 février 2011StatutMembreDernière intervention16 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