![]() |
ClearType verwenden
Hi,
wie kann ich ClearType für meinen Text (über Canvas) nutzen? Der Code, der hier im Forum steht, funktioniert nicht. Wahrscheinlich, weil der wohl nur geht, wenn ClearType global aktiviert ist. Ich will aber ClearType auch nutzen, wenn es allgemein für Windows ausgeschaltet ist. Gruß Sascha |
Re: ClearType verwenden
huhu :hi:
|
Re: ClearType verwenden
Hallo,
ich denke du meinst, dass man einen Text auf einer Canvas ausgibt ohne das man den Hintergrund mit einer Farbe übermahlt. Das geht relativ einfach:
Delphi-Quellcode:
Ich hoffe, dass ist dass was du gemeint hast.
var
OldBrushStyle: TBrushStyle; //.. bevor du dein Textout machst: with Canvas do begin OldBrushStyle := Brush.Style; Brush.Style := bsClear; // Jetzt Textout und sowas Brush.Style := OldBrushStyle; end; Gruß Chris |
Re: ClearType verwenden
Oh sorry, da war ich wohl etwas zu schnell mit meiner Antwort. Das war wohl eher nicht das was du wolltest.
Sorry |
Re: ClearType verwenden
Jepp, noch nicht mal im Ansatz :D Aber macht nichts.
ClearType ist eine Technologie von Microsoft die seit XP mit an Board ist. Damit kann man das Schriftbild für TFT-Monitore verbessern. z.B. der IE7 hat ClearType standardmäßig aktiviert. |
Re: ClearType verwenden
und der code von mir in der codelib geht echt nicht?
hast du schonmal in der msdn geschaut ? |
Re: ClearType verwenden
Versuch anstatt "DEFAULT_QUALITY" im Quelltext mal "CLEARTYPE_QUALITY" zu benutzen.
(Konnte es jetzt nicht testen, siehe aber MSDN Link von oben: "The fdwQuality parameter in CreateFont and the lfQuality member of LOGFONT accept the CLEARTYPE_QUALITY flag.") |
Re: ClearType verwenden
Hm, CLEARTYPE_QUALITY gibt es nicht.
@supermuckl: wird mir wohl nichts anderes übrig bleiben, als bei msdn mal zu gucken, das Problem wird wohl aber die Umsetzung in Delphi sein. Darum hatte ich gehofft, dass da jmd. schon nen Code fertig hat, weil er sich vllt. damit auch schon mal beschäftigt hat. Dein Code funktioniert bei mir definitiv nicht. Aber wie ich schon sagte, kann es sein, dass der vllt. nur funktioniert, wenn man allgemein bei Windows ClearType aktiviert hat?! Hab es aber selber noch nicht getestet. Ich will aber - wie gesagt - ClearType vor allem dann verwenden, wenn es global in Windows deaktiviert ist. |
Re: ClearType verwenden
Im Windows SDK von Delphi '05 PE gibt es Die Konstate CLEARTYPE_QUALITY.
Ich hab mich mal etwas im Web umgeschaut und folgende Übersicht gefunden:
Code:
Wäre super, wenn jemand testen könnte, ob die Konstanten stimmen =)
int ANTIALIASED_QUALITY 4
int CLEARTYPE_QUALITY 5 int DEFAULT_QUALITY 0 int DRAFT_QUALITY 1 int NONANTIALIASED_QUALITY 4 int PROOF_QUALITY 2 |
Re: ClearType verwenden
Also in der Windows.pas von Delphi2006 beschränkt sich das auf folgendes:
Delphi-Quellcode:
Die Frage ist nun, ob es einfach damit getan wäre, Nr. 5 zu ergänzen? :D
{$EXTERNALSYM DEFAULT_QUALITY}
DEFAULT_QUALITY = 0; {$EXTERNALSYM DRAFT_QUALITY} DRAFT_QUALITY = 1; {$EXTERNALSYM PROOF_QUALITY} PROOF_QUALITY = 2; {$EXTERNALSYM NONANTIALIASED_QUALITY} NONANTIALIASED_QUALITY = 3; {$EXTERNALSYM ANTIALIASED_QUALITY} ANTIALIASED_QUALITY = 4; Edit: anscheinend nicht :( |
Re: ClearType verwenden
Moin Manuel,
stimmt nicht ganz. NONANTIALIASED_QUALITY hat den Wert 3 (siehe WINGDI.H aus dem PSDK) |
Re: ClearType verwenden
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich hab mal ein Demo-Programm erstellt - nur irgendwie funktioniert das absolut nicht bei mit :| Ich hab supermuckle's CodeLib-Eintrag als Basis genommen. Ich zeiche auf eine Paintbox meinen Text und ändere auch dessen Eigenschaften. Vielleicht kann sichs ja mal jemand anschauen und damit die ganze Geschichte hier auflösen ^^ (Ich hab übrigends ClearType global an) |
Re: ClearType verwenden
hehe
du solltest meine funktion nicht so umändern, das du das canvas als constante an die funktion übergibst ;) dann ists klar, das sich nichts ändert. |
Re: ClearType verwenden
Wenn ich es ohne const deklariere, geht es genauso wenig :?
Da ein Canvas IMHO aber auch nur ein Objekt ist, wird an die Funktion nur ein Pointer übergeben. Ändere ich jetzt was am Canvas in der Funktion, so wird auch das übergebene Canvas geändert, da ich auf der gleichen Adresse arbeite ;) (Verhält sich mit allen Objekten so, inkl. langen Strings, Listen, etc...) |
Re: ClearType verwenden
*kopfkratz*
ok aber bei mir geht der code in sofern, das ich bei eingeschaltetem CT von windows aus, es temporär mit genau diesem code deaktivieren kann. |
Re: ClearType verwenden
@supermuckl:
Also ich hab's nochmal mit ner 1:1 Kopie deines Codes probiert, klappt aber trotzdem nicht :gruebel: Funktioniert bei dir mein Programm? Muss ich irgendwas beachten, wann ich das Canvas ändere? (Nur im OnCreate, etc). Ich hab auch schon mit dem Form Canvas rumgespielt, bringt aber auch keine Ergebnisse. Hast du auch WinXP Pro SP2? Irgendwie dreh ich langsam am Rad wegen diesem - eigentlich - lapidaren Zeugs -.- |
Re: ClearType verwenden
ok es liegt wohl an einem servicepack von XP!
ich hatte damals XP ohne SP oder mit SP1 (weis nimmer genau) da ging es auf alle fälle das gleiche projekt heute mit SP2 aufgemacht -> klappt nicht (cleartype bleibt immer an) |
Re: ClearType verwenden
Gut zu wissen, dass es am SP liegen könnte.
Ich versuch mal etwas im Netz darüber rauszufinden. Wäre aber super, wenn jemand mal mein Test-Programm mit WinXP und/oder WinXP SP1 testen könnte, damit wir zumindest praktische Beweise haben, dass es unter WinXP < SP2 funktioniert. ( ![]() |
Re: ClearType verwenden
und, schon neue Erkenntnisse? :)
|
Re: ClearType verwenden
Huhu?
Also mit folgendem Code kann man es global einstellen:
Delphi-Quellcode:
Aber es soll ja nur für die eigene Anwendung sein.
SystemParametersInfo(SPI_SETFONTSMOOTHING,
1, 0, SPIF_UPDATEINIFILE or SPIF_SENDCHANGE); SystemParametersInfo(SPI_SETFONTSMOOTHINGTYPE, FE_FONTSMOOTHINGCLEARTYPE, 0, SPIF_UPDATEINIFILE or SPIF_SENDCHANGE); |
Re: ClearType verwenden
Nur als Hinweis, cleartype funktioniert glaube ich nur ab 24/32 Bit Farbe.
|
Re: ClearType verwenden
Wieso macht ihr es so kompliziert?
Ich habe einfach die Schriftart von MS Sans Serif auf Microsoft Sans Serif geändert. Die Standartschriftart MS Sans Serif ünterstützt kein Clear Type, Microsoft Sans Serif hingegen schon. Sobald man nun den Clear Type in Windows anschaltet, ändert es sich bei meiner Anwendung auch. |
Re: ClearType verwenden
Wieso wir es so kompliziert machen? Würdest du bitte noch mal genau den Thread durchlesen?!
Es geht hier nicht um das globale Cleartype! Man kann Cleartype auch NUR für seine eigene Anwendung aktivieren - unabhängig davon, ob es global für Windows eingeschaltet ist oder nicht. |
Re: ClearType verwenden
Zitat:
/EDIT: Ups, 2. Seite übersehen. Ich lasse es trotzdem als allgemeinen Hinweis stehen... |
Re: ClearType verwenden
Hi,
hiermit könnt ihr ClearType aktivieren oder deaktivieren.
Delphi-Quellcode:
Lg,
procedure ClearType(Font: TFont; Enable: Boolean);
const CLEARTYPE_QUALITY = 5; var lf : TLogFont; begin case Enable of true: // Enable begin GetObject(Font.Handle, SizeOf(TLogFont), @lf); lf.lfQuality := CLEARTYPE_QUALITY; Font.Handle := CreateFontIndirect(lf); end; false: // Disable begin GetObject(Font.Handle, SizeOf(TLogFont), @lf); lf.lfQuality := NONANTIALIASED_QUALITY; Font.Handle := CreateFontIndirect(lf); end; end; end; Andre |
Re: ClearType verwenden
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
(Getestet mit WinXP Pro, SP2) Im Anhang meine erweiterte Test-Anwendung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz