GDI+ StringFormat auf Centered setzen?

Anfängerfragen zum Programmieren mit PureBasic.
DK5UR
Beiträge: 5
Registriert: 07.08.2007 09:26
Wohnort: Reichelsheim

GDI+ StringFormat auf Centered setzen?

Beitrag von DK5UR »

Hallo,
Vorweg erstmal ein Dank an alle Aktivisten in diesem Forum für ihre Hilfe...

Ein paar Informationen zu meinem Problem, Ich habe eine Mitgliederverwaltung mit Access-Anbindung programmiert, funktioniert soweit auch ganz zufriedenstellend. Nun soll noch der Druck eines Mitgliedschaftszertifikates als Feature eingefügt werden - vorher habe ich alles selber gemanagt, und für diese Aufgabe CorelDraw eingesetzt. Jetzt soll das ganze auch geoutsourced werden. Als Vorlage dazu dient eine JPEG Datei in die (zentriert) Name und andere Daten eingetragen werden sollen...
Soweit so gut, mit DrawText() und TextWidth() ist auch die Positionierung kein Problem - bis auf die Tatsache das die Dateien in Hinblick auf Schriftbildqualität nicht wirklich schön aussehen.

Nach einigem Suchen bin ich auf die GDI+ gestossen, hier sieht auch der Schriftzug dank Hinting super aus - nur an dem Positionieren der Texte bin ich gescheitert.

Wahrscheinlich bin ich nur zu blind und habe den entscheidenden Hinweis überlesen (gestern 11 Stunden Internetsuche hinter mich gebracht)...

Langer Rede, kurzer Sinn...

Wie kann ich unter Verwendung von GDI+ einen Text mit DrawString zentrieren, bzw seine Länge herausbekommen, um manuell zu zentrieren (TextWidth scheidet ja aus)?

Ach ja, Software ist hier PB 4.02 auf Vista Ultimate/Windows XP Pro
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

willkommen an Board

> Als Vorlage dazu dient eine JPEG Datei in die (zentriert) Name und andere Daten eingetragen werden sollen...

JPEG ist je nach benutzter komprimierung/features ein äußerst verlustbehaftetes format.

es geht aus deinem absatz nicht klar hervor, ob
> bis auf die Tatsache das die Dateien in Hinblick auf Schriftbildqualität nicht wirklich schön aussehen.
sich auf als JPEG gespeicherte vorlagen bezieht.

sollte das der fall sein, benutze stattdessen mal PNG und vergleiche die ergebnisse.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DK5UR
Beiträge: 5
Registriert: 07.08.2007 09:26
Wohnort: Reichelsheim

Beitrag von DK5UR »

Moin Kaeru,

Danke für das Willkommen...
JPEG ist je nach benutzter komprimierung/features ein äußerst verlustbehaftetes format.
Die Vorlage ist nicht das Problem, die liegen mit 100% Quality, zwischen 300 und 533 dpi bei einer Auflösung jenseits der 1750x1240 Pixel vor.

Das Problem ist die Schriftqualität der Text die Mittels DrawText eingebracht werden...

Mir kommt es hierbei nicht auf Dateigröße an :wink:

Es geht nur um das Zentrieren der zu schreibenden Daten...

btw ich greife dabei auf den GDI+ Wrapper von SFSxOI zurück.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Das Problem ist die Schriftqualität der Text die Mittels DrawText eingebracht werden...

achso, verstehe. einfarbig mit pixelrand.
ja klar, is nich so prickelnd.


> btw ich greife dabei auf den GDI+ Wrapper von SFSxOI zurück.

kenn ich selber nicht, sorry.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: GDI+ StringFormat auf Centered setzen?

Beitrag von edel »

DK5UR hat geschrieben: Wie kann ich unter Verwendung von GDI+ einen Text mit DrawString zentrieren, bzw seine Länge herausbekommen, um manuell zu zentrieren (TextWidth scheidet ja aus)?
TextWidth scheidet nicht aus. Du kannst den Font ganz normal mit
PB laden, ihn auf das aktuelle DC packen und TextWidth nutzen.
Den Font kannst du dann mit GdipCreateFontFromDC auch gleich
noch GDI+ uebergeben.

Beispiel :

Code: Alles auswählen

      [...]
      LoadFont(0,"ARIAL",15)
      hdc = StartDrawing(ImageOutput(#Image1)) 
         If hdc And GdipCreateFromHDC(hdc, @*graphics) = #Ok
            DrawingFont(FontID(0))  
            cx = TextWidth("blub") 
            GdipCreateFontFromDC(hdc,@*font)
            [...]
         EndIf 
         StopDrawing() 
      EndIf 
      [...]
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag von PureLust »

Um Texte zentriert auszugeben kannst Du auch auf die API-Funktion "DrawText_()" oder auch "DrawTextEx_()" zurückgreifen.
Ob die damit zu erreichende Ausgabequalität auf dem Drucker Deinen Ansprüchen genügt kann ich nicht sagen - aber zumindest kannst Du den Text damit nach belieben in alle Richtungen ausrichten lassen.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
DK5UR
Beiträge: 5
Registriert: 07.08.2007 09:26
Wohnort: Reichelsheim

Beitrag von DK5UR »

Danke edel,

So funktioniert es - Na klar...

Manchmal sieht man den Wald vor Bäumen nicht...Gut, das es mehrere Förster gibt :D

Und ich such mir 'nen Wolf um mit StringFormat und StringAlignments zurecht zu kommen...

Laut MS sollte das ja auch ganz einfach gehen, neues Stringformat kreieren beide StringAlign und StringLineAlignment auf #StringAlignmentCenter setzen und fertig...
Antworten