Click here to Skip to main content
15,891,513 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
Hello dear friends I'm working on a project and my purpose is to create a TextBox for Xna, I don't know how i can draw a string in aligned in arectangle, cause i don't see any rectangle parameter in function Draw string?

XML
SpriteFont font;
       public void fncWriteStringOnText(string myText,int FontSize,Vector2 position,Color mycolor)
       {
           string BaseDirectory = ".";
           string FontFileName;
           if (FontSize == 14)
           {
               FontFileName = BaseDirectory + "\\Font\\myfont14";
               font = content.Load<SpriteFont>(FontFileName);
           }
           else if (FontSize == 16)
           {
               FontFileName = BaseDirectory + "\\Font\\myfont16";
               font = content.Load<SpriteFont>(FontFileName);
           }
            else if  (FontSize == 18)
           {
               FontFileName = BaseDirectory + "\\Font\\myfont18";
               font = content.Load<SpriteFont>(FontFileName);
           }
           else if (FontSize == 20)
           {
               FontFileName = BaseDirectory + "\\Font\\myfonft20";
               font = content.Load<SpriteFont>(FontFileName);
           }
           else if (FontSize == 22)
           {
               FontFileName = BaseDirectory + "\\Font\\myfont22";
               font = content.Load<SpriteFont>(FontFileName);
           }
           <big>spriteBatch.DrawString(font,myText,position,mycolor);</big>
       }


Its just vector 2D for the position, in Drawstring function.
Posted
Updated 21-Jan-13 9:55am
v2

1 solution

As it wasn't any helper i was forced to write my code:

This is my Text struct:
SQL
public struct Text
{
    public int key;
    public string myText;
    public int FontSize;
    public Rectangle rect;
    public Color mycolor;
    public string strplaceOfUse;
    public bool ShouldItBeShownInThisScreen;
    public string wrappedString;
    public int HorizontalMargin;
}

This is initialization of my text:

C#
public Text mytext;
mytext.key = 1;
           mytext.HorizontalMargin = 50;
           mytext.mycolor = Color.Blue;
           mytext.rect = new Rectangle((WindowsScreenWidth - 1000) / 2 + mytext.HorizontalMargin, (WindowsScreenHeight - 300) / 2 + 50, 1000 - 1 * mytext.HorizontalMargin, 300);
           mytext.strplaceOfUse = "AddNewWords_Word";
           mytext.ShouldItBeShownInThisScreen = false;
           mytext.myText = "Hello This is a Test and will take time to be practical,so do think about it and make it better and i know you will";
           mytext.FontSize = 22;
           mytext.wrappedString = WrapText(fncGivemeFont(mytext.FontSize), mytext.myText, mytext.rect.Width);

This is initializing the font
XML
public SpriteFont fncGivemeFont(int fontsize)
       {
           string BaseDirectory = ".";
           SpriteFont myfont=null;
           switch (fontsize)
           {
               case 14:
               {
                   myfont = content.Load<SpriteFont>(BaseDirectory + "\\Font\\myfont14");
                   break;
               }
               case 16:
               {
                   myfont = content.Load<SpriteFont>(BaseDirectory + "\\Font\\myfont16");
                   break;
               }
               case 18:
               {
                   myfont = content.Load<SpriteFont>(BaseDirectory + "\\Font\\myfont18");
                   break;
               }
               case 20:
               {
                   myfont = content.Load<SpriteFont>(BaseDirectory + "\\Font\\myfont20");
                   break;
               }
               case 22:
               {
                   myfont = content.Load<SpriteFont>(BaseDirectory + "\\Font\\myfont22");
                   break;
               }
               default:
               {
                   myfont = content.Load<SpriteFont>(BaseDirectory + "\\Font\\myfont14");
                   break;
               }
           }
           return myfont;
       }

This is my alignment function:

XML
public static string WrapText(SpriteFont spriteFont, string text, float maxLineWidth)
       {
           string[] words = text.Split(' ');

           StringBuilder sb = new StringBuilder();

           float lineWidth = 0f;

           float spaceWidth = spriteFont.MeasureString(" ").X;

           foreach (string word in words)
           {
               Vector2 size = spriteFont.MeasureString(word);

               if (lineWidth + size.X < maxLineWidth)
               {
                   sb.Append(word + " ");
                   lineWidth += size.X + spaceWidth;
               }
               else
               {
                   sb.Append("\n" + word + " ");
                   lineWidth = size.X + spaceWidth;
               }
           }

           return sb.ToString();
       }

My drawing function:

C#
 public Text[] myTexts=new Text[1];
//ArrayList=>MyTexts
         myTexts[0] = mytext;


C#
public void DrawTexts(SpriteBatch mybatch)
       {
           for (int i = 0; i < myTexts.Length; i++)
           {
               if (myTexts[i].ShouldItBeShownInThisScreen)
               {
                   mybatch.DrawString(fncGivemeFont(myTexts[i].FontSize), myTexts[i].wrappedString,new Vector2(myTexts[i].rect.Left,myTexts[i].rect.Top),myTexts[i].mycolor);
               }
           }
       }
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900