Laden...

Graphics.DrawString bei 0/0 zeichnen

Erstellt von S.R. vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.222 Views
S
S.R. Themenstarter:in
221 Beiträge seit 2007
vor 16 Jahren
Graphics.DrawString bei 0/0 zeichnen

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

915 Beiträge seit 2006
vor 16 Jahren

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(

49.485 Beiträge seit 2005
vor 16 Jahren

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

2.082 Beiträge seit 2005
vor 16 Jahren

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

S
S.R. Themenstarter:in
221 Beiträge seit 2007
vor 16 Jahren

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

139 Beiträge seit 2006
vor 16 Jahren

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