Draw vertical text?

M

Mark B

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)?
 
M

Manu

Mark B said:
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();
}
}
 
M

Mark B

Thanks but are you sure that doesn't just rotate the whole word "HELLO" 90
degrees (which is not what I want)?
 
P

Pete Kane

Mark said:
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.ToString(), f, Brushes.Black,x,y);
y += 20;
}
 
M

Manu

A slight improvement can be to Measure the Height of Font and then Increment
Y with appropriate value.

Pete Kane said:
Mark said:
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.ToString(), f, Brushes.Black,x,y);
y += 20;
}
 
M

Manu

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));

:)
 
H

Hans Kesting

Manu formulated on woensdag :
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));

What would that do if the string was "Hello", with an Arial font? I'm
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
 
M

Mark B

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 said:
Mark said:
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.ToString(), f, Brushes.Black,x,y);
y += 20;
}
 
M

Mihai N.

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.

Doing this with something like Arabic is not going to work.
 
J

Jeff Johnson

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....
 
P

Pete Kane

Mark said:
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 said:
Mark said:
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.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
 
M

Mark B

Thanks

Pete Kane said:
Mark said:
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 said:
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.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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top