Toon posts:

[Delphi] canvas.TextHeight klopt niet.

Pagina: 1
Acties:
  • 148 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
var
Letterhoogte: integer;
begin

Letterhoogte := canvas.textheight("Maandag Ofzo");

with canvas do
begin

textout(60,(910),'Maandag');
textout(60,(910 + letterhoogte + 10),'Dinsdag');
textout(60,(910 + 2*letterhoogte + 20),'Woensdag');
textout(60,(910 + 3*letterhoogte + 30),'Donderdag');
textout(60,(910 + 4*letterhoogte + 40),'Vrijdag');
textout(60,(910 + 5*letterhoogte + 50),'Zaterdag');
textout(60,(910 + 6*letterhoogte + 60),'DERDEN');

end;

end;

Dit zou dus moeten resulteren in text dat onder elkaar staat, met steeds 10 pixels tussenruimte..

Maar het valt allemaal half over elkaar heen..

Textheight geeft: 18, bij name: Courier New, size: 12, style: Bold.

Dit is de canvas van een printer, maar het klopt dus niet.

  • pasz
  • Registratie: Februari 2000
  • Laatst online: 16-08 23:04
heb je het al nagemeten in bijv. paintshop ? (effe printscreenen)

woei!


Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
  tm: TTextMetric;
begin
  GetTextMetrics(Handle, tm);
  Letterhoogte := tm.tmHeight;
  with Canvas do
  begin
    textout(60,(910),'Maandag');
    textout(60,(910 + letterhoogte + 10),'Dinsdag');
    textout(60,(910 + 2*letterhoogte + 20),'Woensdag');
    textout(60,(910 + 3*letterhoogte + 30),'Donderdag');
    textout(60,(910 + 4*letterhoogte + 40),'Vrijdag');
    textout(60,(910 + 5*letterhoogte + 50),'Zaterdag');
    textout(60,(910 + 6*letterhoogte + 60),'DERDEN');
  end;
end;

Verwijderd

Topicstarter
Als je het opmeet in paintshop, klopt het wel..

Maar dan nog het feit:

stel, je tekent een teken op Y= 100, en het teken is 18 pixels groot.
En je tekent vervolgens op Y=128 een stukje tekst, dan moet dat dan toch niet over die andere tekst heen vallen...

Verwijderd

Topicstarter
GetTextMetrics Lijkt ook niet te werken..
tmHeight levert: 1

ik heb ook nog gettextalign geprobeert, maar dat lijk took niet te werken.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 12:54

Tomatoman

Fulltime prutser

Ik zit op het moment op een vliegveld in Canada op een kl*te Franstalig toetsenbord te typen. Vandaar alle typo's - sorry.

Waar je rekening mee dient te houden, is dat de hoogte van een regel tekst meer is dqn qlleen tmHeight. Lees de help bij GetTextMetrics eens en je zult zien dat je ook tmInternalLeading en tmExternalLeading erbij op moet tellen. tmHeight is de hoogte vqn een letter zoals een n. t,InternalLeading is de hoogte vqn de stok van een d. Dan heb je oog nog de hoeveelheid wit tussen de regels: tmExternalLeading.

Volgens mij is er nog meer mis met je gebruik vqn de Window handle (probeer eens Font.Handle), maar helaas is in de meeste business lounges geen Delphi geinstalleerd :). Even geen debugging door mij dus.

[ Voor 0% gewijzigd door Tomatoman op 11-10-2002 03:10 . Reden: een deel van (heel veel) typo's ]

Een goede grap mag vrienden kosten.


Verwijderd

ohja shit, moet natuurlijk Canvas.Handle zijn :) enneuh idd tmExternalLeading moet je nog bij tmHeight optellen (tmInternalLeading zit er al wel bij in)

Verwijderd

Topicstarter
Dat van die handle had ik al geprobeert bij font.handle..

hm.. internalleading, externalleading, en heigjt heven allemaal 1..

en geen afrondingsfouten.

Verwijderd

Topicstarter
okee, ik heb het nu eindelijk opgelost, met het volgende:

var
letterhoogte: integer;
begin

letterhoogte := round((printer.canvas.font.size * printer.canvas.font.PixelsPerInch / 72) * ((142.1 * 2.54) / printer.canvas.Font.PixelsPerInch) );

//En dit is natuurlijk nog weer te vereenvoudigen tot:

//round(printer.canvas.font.size / 72 * 360.934)

end;

Wat ik hier gedaan heb: ik had zelf uitgerekend dat bij mijn printer er per cm 142.1 pixels waren. dat is dus per inch: 142.1 * 2.54 = 360.934 .

maar volgens PRINTER, is pixelsperinch bij mij 90.

De hoogte verkrijg je door de fontsize * het aantal pixelsperinch/72 te doen.

dus moet dit kenlijk dan nog * (aantal pixels per inch bij mij) / printer.canvas.Font.PixelsPerInch)

En als je die uitkomst doet keer de verschillensfactor van mijn printer mte printers van anderen, dan werkt het wel.

beetje vreemd.
Pagina: 1