Hallo,
ich habe ein Panel und dort möchte ich ganz oben links in der Ecke (also bei 0/0) einen Text hin zeichnen. Soweit so gut. Hier der Code:
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics gfx = e.Graphics;
gfx.DrawString("TEST", new Font("Arial", 23), Brushes.DarkBlue, new PointF(0, 0));
}
Das komische ist, dass immer ein paar Pixel links und rechts frei sind und ich nicht verstehe, wo die her kommen. Kann man auf folgendem Bild sehr gut erkennen:
siehe Anhang
Vielen Dank für eure Tipps
Stefan
Das kann auch das Form.Padding sein 🙂
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
Hallo S.R.,
es ist doch klar, dass dort Abstände sein können/müssen. Stell dir vor, du zeichnest ein kleines a an 0, 0 und danach ein M. Wenn das a links oben angeklatscht wäre, dann würde das M oben angeschnitten werden. Und es gibt in dem Font vermutlich Zeichen, die noch größer sind als dein erster Buchstabe.
herbivore
Hallo,
wie meine Vorredner schon erwähnt haben, liegt es wohl an etwas anderem.
Ich sage da nur Panel und der Tipp von Andreas.May.
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Hi,
vielen Dank für eure Antworten... fang ich mal von forne an:
Padding:
Meines Erachtens hat dies nur eine Auswirkung auf Komponenten, die sich in diesem Panel befinden und dort den Dock-Style gesetzt haben. Damit wird, so meine ich zumindest, der Client-Bereich definiert. Da ich aber direkt auf das Panel zeichne und nicht in de Client-Bereich, sollte das egal sein.
Habe die Werte trotzdem geprüft und egal was ich dort eintrage, es ist egal - hat keine Auswirkung auf die Positionierung meines Textes.
Größe der Buchstaben:
Das würde zumindest den Abstand nach oben erklären. Gebe ich ein Ü ein, dann bleibt der Text in gleicher Höhe und oben wird bei dem Ü der Abstand dann wirklich kürzer. Nach links hin könnte da aber definitiv weniger Platz sein, weil man ja weiß, wie breit der Buchstabe ist.
Tests mit MeasureString:
Ich habe mir mal mit MeasureString die Dimensionen des String berechnen lassen und tatsächlich - auch hier ist der Wert nicht minimalsten Rechteck sondern ein etwas größeres mit etwas Platz drum rum (für z.B. y, Ü oder ähnliches).
Vielen Dank für eure Tipps - jetzt weiß ich wenigstens, was Sache ist.
Bis dahin
Stefan
GDI+ errechnet, aus welchem Grund auch immer, nicht die richtige Grösse von einem string, sondern macht das Rechteck prinzipiell grösser. Wenn du die exakte Grösse haben willst, kommste an der WinAPI nicht dran vorbei. Die GDI32 errechnet auf den Punkt genau die grösse.
GetFontMetrics ist das was du brauchst.
Gruss Ari
Wer lesen kann ist klar im vorteil!
MSDN
Dein Feund in allen fragen