Avatar billede sysrq2000 Nybegynder
09. december 2002 - 19:20 Der er 2 kommentarer og
1 løsning

Bredden og højden af et stykke tekst

Jeg har et spørgsmål til metoden graphics.drawstring().
Jeg vil gerne kunne udregne højden og bredden i pixels på et stykke brugerdefineret tekst med en brugerdefineret font og størrelse, inden det bliver renderet, men hvordan gør man det?

Eksempel:
|-----------------------|
|Tekst  : Hello World!  |
|        How are you?  | <-- Bemærk flere liniers tekst!
|Font  : Tahoma        |
|Size  : 9 pt          |
|=======================|
|Height = 22 px        | <-- Ved ikke om det er rigtigt.
|Width  = 112 px        |
|=======================|

Mvh.
Johannes Hansen
Avatar billede ninakir Nybegynder
09. december 2002 - 20:13 #1
Er ikke sikker på om det fuldt ud besvarer dit spørgsmål, men her er et eksempel på hvordan man kan beregne print af et fler-siders dokument. Det beregner bl.a. antal linjer pr. side.


// This variable keeps track of the current position in the
// array. It must be declared outside the method that handles the
// PrintPage event in order to keep from being reinitialized with
// each pageint ArrayCounter = 0;
// This method handles a PrintDocument.PrintPage event. It
// assumes an array of strings called myStrings() has been
// declared and populated elsewhere in the application. It also
// assumes a font for printing has been initialized and called
// myFont

private void PrintStrings(object sender, PrintPageEventArgs e)

// Declares the variables that will be used to keep track of 
// spacing and paging 
float LeftMargin = e.MarginBounds.Left; 
float TopMargin = e.MarginBounds.Top;   
float MyLines = 0; 
float YPosition = 0; 
int Counter = 0; 
string CurrentLine; 

// Calculate the number of lines per page. 
MyLines = e.MarginBounds.Height/myFont.GetHeight(e.Graphics); 

// Prints each line of the file, but stops at the end of a 
// page   

while (Counter < MyLines && ArrayCounter <= myStrings.GetUpperBound(0))  {     
CurrentLine = myStrings[ArrayCounter];     
YPosition = TopMargin + Counter * myFont.GetHeight(e.Graphics);      e.Graphics.DrawString(CurrentLine, myFont, Brushes.Black, LeftMargin, YPosition, new StringFormat());
Counter ++;
ArrayCounter ++;
}       

// If more lines exist, print another page. 
if (!(ArrayCounter == myStrings.GetUpperBound(0)))
    e.HasMorePages = true;
else     
    e.HasMorePages = false;
}
Avatar billede simon.ulsnes Nybegynder
09. december 2002 - 20:42 #2
dinFont.Height giver dig højden for en skrifttype, jeg kender ikke lige umiddelbart en metode til at finde bredden...

// Simon
Avatar billede sysrq2000 Nybegynder
09. december 2002 - 20:48 #3
Jeg har fundet metoden til at finde højden og bredden på en tekst, og selvfølgelig ligger det lige for som altid. Man skal bare bruge metoden Graphics.MeasureString() men tak for hjælpen alligevel...

Mvh.
Johannes Hansen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester