|
ms
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Draw vertical text?I want to draw some text (the string value of a variable) on an image:
H E L L O Does anyone know how to do this (e.g. using g.DrawString)? "Mark B" <none***@none.com> wrote in message You can use the overload of DrawString which accepts the StringFormat news:%23rvKq7CYJHA.5156@TK2MSFTNGP04.phx.gbl... >I want to draw some text (the string value of a variable) on an image: > > H > E > L > L > O > > Does anyone know how to do this (e.g. using g.DrawString)? object. Set the StringFormatFlags Property of StringFormat object to StringFormatFlags.Direction Vertical. Example Code:- using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Imaging; public class Form1 : System.Windows.Forms.Form { public Form1() { InitializeComponent(); } private void InitializeComponent() { this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Text = ""; this.Resize += new System.EventHandler(this.Form1_Resize); this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); } static void Main() { Application.Run(new Form1()); } private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics g = e.Graphics; g.FillRectangle(Brushes.White, this.ClientRectangle); String s = "HELLO"; StringFormat sf = new StringFormat(StringFormatFlags.DirectionVertical); Font f = new Font("Times New Roman", 14); SizeF sizef = g.MeasureString(s, f, Int32.MaxValue, sf); RectangleF rf = new RectangleF(20, 20, sizef.Width, sizef.Height); g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height); g.DrawString(s, f, Brushes.Black, rf, sf); f.Dispose(); } private void Form1_Resize(object sender, System.EventArgs e) { Invalidate(); } } Thanks but are you sure that doesn't just rotate the whole word "HELLO" 90
degrees (which is not what I want)? Show quoteHide quote "Manu" <manu.is***@gmail.com> wrote in message news:815088BA-E71F-44FD-A3C1-8E12B74990CC@microsoft.com... > > "Mark B" <none***@none.com> wrote in message > news:%23rvKq7CYJHA.5156@TK2MSFTNGP04.phx.gbl... >>I want to draw some text (the string value of a variable) on an image: >> >> H >> E >> L >> L >> O >> >> Does anyone know how to do this (e.g. using g.DrawString)? > > You can use the overload of DrawString which accepts the StringFormat > object. > Set the StringFormatFlags Property of StringFormat object to > StringFormatFlags.Direction Vertical. > > Example Code:- > > using System; > using System.Drawing; > using System.Drawing.Drawing2D; > using System.Collections; > using System.ComponentModel; > using System.Windows.Forms; > using System.Data; > using System.Drawing.Imaging; > > public class Form1 : System.Windows.Forms.Form > { > public Form1() > { > InitializeComponent(); > } > private void InitializeComponent() > { > this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); > this.ClientSize = new System.Drawing.Size(292, 273); > this.Text = ""; > this.Resize += new System.EventHandler(this.Form1_Resize); > this.Paint += new > System.Windows.Forms.PaintEventHandler(this.Form1_Paint); > > } > static void Main() > { > Application.Run(new Form1()); > } > > private void Form1_Paint(object sender, > System.Windows.Forms.PaintEventArgs e) > { > Graphics g = e.Graphics; > g.FillRectangle(Brushes.White, this.ClientRectangle); > > String s = "HELLO"; > StringFormat sf = new > StringFormat(StringFormatFlags.DirectionVertical); > Font f = new Font("Times New Roman", 14); > > SizeF sizef = g.MeasureString(s, f, Int32.MaxValue, sf); > > RectangleF rf = new RectangleF(20, 20, sizef.Width, sizef.Height); > g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height); > g.DrawString(s, f, Brushes.Black, rf, sf); > > f.Dispose(); > } > > private void Form1_Resize(object sender, System.EventArgs e) > { > Invalidate(); > } > } > Opps I did'nt See that you dont want to rotate text.
Show quoteHide quote "Mark B" <none***@none.com> wrote in message news:ODmrCKDYJHA.1532@TK2MSFTNGP03.phx.gbl... > Thanks but are you sure that doesn't just rotate the whole word "HELLO" 90 > degrees (which is not what I want)? > > > "Manu" <manu.is***@gmail.com> wrote in message > news:815088BA-E71F-44FD-A3C1-8E12B74990CC@microsoft.com... >> >> "Mark B" <none***@none.com> wrote in message >> news:%23rvKq7CYJHA.5156@TK2MSFTNGP04.phx.gbl... >>>I want to draw some text (the string value of a variable) on an image: >>> >>> H >>> E >>> L >>> L >>> O >>> >>> Does anyone know how to do this (e.g. using g.DrawString)? >> >> You can use the overload of DrawString which accepts the StringFormat >> object. >> Set the StringFormatFlags Property of StringFormat object to >> StringFormatFlags.Direction Vertical. >> >> Example Code:- >> >> using System; >> using System.Drawing; >> using System.Drawing.Drawing2D; >> using System.Collections; >> using System.ComponentModel; >> using System.Windows.Forms; >> using System.Data; >> using System.Drawing.Imaging; >> >> public class Form1 : System.Windows.Forms.Form >> { >> public Form1() >> { >> InitializeComponent(); >> } >> private void InitializeComponent() >> { >> this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); >> this.ClientSize = new System.Drawing.Size(292, 273); >> this.Text = ""; >> this.Resize += new System.EventHandler(this.Form1_Resize); >> this.Paint += new >> System.Windows.Forms.PaintEventHandler(this.Form1_Paint); >> >> } >> static void Main() >> { >> Application.Run(new Form1()); >> } >> >> private void Form1_Paint(object sender, >> System.Windows.Forms.PaintEventArgs e) >> { >> Graphics g = e.Graphics; >> g.FillRectangle(Brushes.White, this.ClientRectangle); >> >> String s = "HELLO"; >> StringFormat sf = new >> StringFormat(StringFormatFlags.DirectionVertical); >> Font f = new Font("Times New Roman", 14); >> >> SizeF sizef = g.MeasureString(s, f, Int32.MaxValue, sf); >> >> RectangleF rf = new RectangleF(20, 20, sizef.Width, sizef.Height); >> g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height); >> g.DrawString(s, f, Brushes.Black, rf, sf); >> >> f.Dispose(); >> } >> >> private void Form1_Resize(object sender, System.EventArgs e) >> { >> Invalidate(); >> } >> } >> > Just 2 Lines Code
string s = "HELLO"; e.Graphics.DrawString("HELLO", this.Font, Brushes.Black, new RectangleF(10, 10, this.Font.Size, this.Font.Height * s.Length)); Show quoteHide quote :-) "Mark B" <none***@none.com> wrote in message news:ODmrCKDYJHA.1532@TK2MSFTNGP03.phx.gbl... > Thanks but are you sure that doesn't just rotate the whole word "HELLO" 90 > degrees (which is not what I want)? > > > "Manu" <manu.is***@gmail.com> wrote in message > news:815088BA-E71F-44FD-A3C1-8E12B74990CC@microsoft.com... >> >> "Mark B" <none***@none.com> wrote in message >> news:%23rvKq7CYJHA.5156@TK2MSFTNGP04.phx.gbl... >>>I want to draw some text (the string value of a variable) on an image: >>> >>> H >>> E >>> L >>> L >>> O >>> >>> Does anyone know how to do this (e.g. using g.DrawString)? >> >> You can use the overload of DrawString which accepts the StringFormat >> object. >> Set the StringFormatFlags Property of StringFormat object to >> StringFormatFlags.Direction Vertical. >> >> Example Code:- >> >> using System; >> using System.Drawing; >> using System.Drawing.Drawing2D; >> using System.Collections; >> using System.ComponentModel; >> using System.Windows.Forms; >> using System.Data; >> using System.Drawing.Imaging; >> >> public class Form1 : System.Windows.Forms.Form >> { >> public Form1() >> { >> InitializeComponent(); >> } >> private void InitializeComponent() >> { >> this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); >> this.ClientSize = new System.Drawing.Size(292, 273); >> this.Text = ""; >> this.Resize += new System.EventHandler(this.Form1_Resize); >> this.Paint += new >> System.Windows.Forms.PaintEventHandler(this.Form1_Paint); >> >> } >> static void Main() >> { >> Application.Run(new Form1()); >> } >> >> private void Form1_Paint(object sender, >> System.Windows.Forms.PaintEventArgs e) >> { >> Graphics g = e.Graphics; >> g.FillRectangle(Brushes.White, this.ClientRectangle); >> >> String s = "HELLO"; >> StringFormat sf = new >> StringFormat(StringFormatFlags.DirectionVertical); >> Font f = new Font("Times New Roman", 14); >> >> SizeF sizef = g.MeasureString(s, f, Int32.MaxValue, sf); >> >> RectangleF rf = new RectangleF(20, 20, sizef.Width, sizef.Height); >> g.DrawRectangle(Pens.Black, rf.Left, rf.Top, rf.Width, rf.Height); >> g.DrawString(s, f, Brushes.Black, rf, sf); >> >> f.Dispose(); >> } >> >> private void Form1_Resize(object sender, System.EventArgs e) >> { >> Invalidate(); >> } >> } >> > Manu formulated on woensdag :
> Just 2 Lines Code What would that do if the string was "Hello", with an Arial font? I'm > > string s = "HELLO"; > e.Graphics.DrawString("HELLO", this.Font, Brushes.Black, new > RectangleF(10, 10, this.Font.Size, this.Font.Height * s.Length)); > guessing that the "ll" will be on one line, as together they will be about as big as the single "H". Or try "Well". Hans Kesting Mark B wrote:
> I want to draw some text (the string value of a variable) on an image: Hi Mark, this will do what you require ( put it in the Paint event handler> > H > E > L > L > O > > Does anyone know how to do this (e.g. using g.DrawString)? Graphics g = e.Graphics; g.FillRectangle(Brushes.White, this.ClientRectangle); String s = "HELLO"; Font f = new Font("Times New Roman", 14); float x = 150.0F; float y = 50.0F; for (int i = 0; i < s.Length; i++) { g.DrawString(s[i].ToString(), f, Brushes.Black,x,y); y += 20; } A slight improvement can be to Measure the Height of Font and then Increment
Y with appropriate value. Show quoteHide quote "Pete Kane" <pk***@uku.co.uk> wrote in message news:u5ZwleDYJHA.868@TK2MSFTNGP06.phx.gbl... > Mark B wrote: >> I want to draw some text (the string value of a variable) on an image: >> >> H >> E >> L >> L >> O >> >> Does anyone know how to do this (e.g. using g.DrawString)? > > Hi Mark, this will do what you require ( put it in the Paint event handler > > Graphics g = e.Graphics; > g.FillRectangle(Brushes.White, this.ClientRectangle); > String s = "HELLO"; > Font f = new Font("Times New Roman", 14); > > float x = 150.0F; > float y = 50.0F; > > for (int i = 0; i < s.Length; i++) > { > g.DrawString(s[i].ToString(), f, Brushes.Black,x,y); > y += 20; > } Thanks very much.
I am planning to used Arial but also the variable will be in 34 different languages including Chinese, Arabic, Korean etc. So I hope y += 20 will be OK. I guess it should since all characters will fall inside a set character height. A few may have plenty of room (e.g. Arabic) but hopefully it will still look OK. Show quoteHide quote "Pete Kane" <pk***@uku.co.uk> wrote in message news:u5ZwleDYJHA.868@TK2MSFTNGP06.phx.gbl... > Mark B wrote: >> I want to draw some text (the string value of a variable) on an image: >> >> H >> E >> L >> L >> O >> >> Does anyone know how to do this (e.g. using g.DrawString)? > > Hi Mark, this will do what you require ( put it in the Paint event handler > > Graphics g = e.Graphics; > g.FillRectangle(Brushes.White, this.ClientRectangle); > String s = "HELLO"; > Font f = new Font("Times New Roman", 14); > > float x = 150.0F; > float y = 50.0F; > > for (int i = 0; i < s.Length; i++) > { > g.DrawString(s[i].ToString(), f, Brushes.Black,x,y); > y += 20; > } > I am planning to used Arial but also the variable will be in 34 different Doing this with something like Arabic is not going to work.> languages including Chinese, Arabic, Korean etc. So I hope y += 20 will be > OK. I guess it should since all characters will fall inside a set character > height. A few may have plenty of room (e.g. Arabic) but hopefully it will > still look OK. -- Mihai Nita [Microsoft MVP, Visual C++] http://www.mihai-nita.net ------------------------------------------ Replace _year_ with _ to get the real email "Mark B" <none***@none.com> wrote in message Magic numbers are always to be avoided. Write the extra code to measure....news:etG0DJIYJHA.1328@TK2MSFTNGP02.phx.gbl... > I am planning to used Arial but also the variable will be in 34 different > languages including Chinese, Arabic, Korean etc. So I hope y += 20 will be > OK. Jeff Johnson wrote:
> "Mark B" <none***@none.com> wrote in message I quite agree - I was merely showing the OP the way> news:etG0DJIYJHA.1328@TK2MSFTNGP02.phx.gbl... > >> I am planning to used Arial but also the variable will be in 34 different >> languages including Chinese, Arabic, Korean etc. So I hope y += 20 will be >> OK. > > Magic numbers are always to be avoided. Write the extra code to measure.... > > Mark B wrote:
Show quoteHide quote > Thanks very much. Hi Mark, just for completeness this line should replace the magic number > > I am planning to used Arial but also the variable will be in 34 > different languages including Chinese, Arabic, Korean etc. So I hope y > += 20 will be OK. I guess it should since all characters will fall > inside a set character height. A few may have plenty of room (e.g. > Arabic) but hopefully it will still look OK. > > > "Pete Kane" <pk***@uku.co.uk> wrote in message > news:u5ZwleDYJHA.868@TK2MSFTNGP06.phx.gbl... >> Mark B wrote: >>> I want to draw some text (the string value of a variable) on an image: >>> >>> H >>> E >>> L >>> L >>> O >>> >>> Does anyone know how to do this (e.g. using g.DrawString)? >> >> Hi Mark, this will do what you require ( put it in the Paint event >> handler >> >> Graphics g = e.Graphics; >> g.FillRectangle(Brushes.White, this.ClientRectangle); >> String s = "HELLO"; >> Font f = new Font("Times New Roman", 14); >> >> float x = 150.0F; >> float y = 50.0F; >> >> for (int i = 0; i < s.Length; i++) >> { >> g.DrawString(s[i].ToString(), f, Brushes.Black,x,y); >> y += 20; >> } > '20' y+= f.GetHeight(); regards Thanks
Show quoteHide quote "Pete Kane" <pk***@uku.co.uk> wrote in message news:OX4gRRQYJHA.256@TK2MSFTNGP06.phx.gbl... > Mark B wrote: >> Thanks very much. >> >> I am planning to used Arial but also the variable will be in 34 different >> languages including Chinese, Arabic, Korean etc. So I hope y += 20 will >> be OK. I guess it should since all characters will fall inside a set >> character height. A few may have plenty of room (e.g. Arabic) but >> hopefully it will still look OK. >> >> >> "Pete Kane" <pk***@uku.co.uk> wrote in message >> news:u5ZwleDYJHA.868@TK2MSFTNGP06.phx.gbl... >>> Mark B wrote: >>>> I want to draw some text (the string value of a variable) on an image: >>>> >>>> H >>>> E >>>> L >>>> L >>>> O >>>> >>>> Does anyone know how to do this (e.g. using g.DrawString)? >>> >>> Hi Mark, this will do what you require ( put it in the Paint event >>> handler >>> >>> Graphics g = e.Graphics; >>> g.FillRectangle(Brushes.White, this.ClientRectangle); >>> String s = "HELLO"; >>> Font f = new Font("Times New Roman", 14); >>> >>> float x = 150.0F; >>> float y = 50.0F; >>> >>> for (int i = 0; i < s.Length; i++) >>> { >>> g.DrawString(s[i].ToString(), f, Brushes.Black,x,y); >>> y += 20; >>> } >> > > Hi Mark, just for completeness this line should replace the magic number > '20' > > y+= f.GetHeight(); > > regards >
Other interesting topics
replacing characters in a string
How to Verify if EventHandler for ValueChanged has been set? Procedure xxx expects parameter '@ID' which was not supplied Linq Style Can C# 3.0 not be used in websites? Design of a suer interface similar to visual studio Cross Platform encryption/decryption LINQ to SQL Classes question Bogus control property values Import a form |
|||||||||||||||||||||||