Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ClearType verwenden (https://www.delphipraxis.net/66610-cleartype-verwenden.html)

Sascha L 1. Apr 2006 10:51


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

Sascha L 3. Apr 2006 09:50

Re: ClearType verwenden
 
huhu :hi:

ChrisE 3. Apr 2006 11:45

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:
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;
Ich hoffe, dass ist dass was du gemeint hast.

Gruß Chris

ChrisE 3. Apr 2006 11:48

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

Sascha L 3. Apr 2006 12:22

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.

supermuckl 3. Apr 2006 15:16

Re: ClearType verwenden
 
und der code von mir in der codelib geht echt nicht?
hast du schonmal in der msdn geschaut ?

H4ndy 3. Apr 2006 15:25

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.")

Sascha L 3. Apr 2006 16:37

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.

H4ndy 3. Apr 2006 17:07

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:
int ANTIALIASED_QUALITY   4
int CLEARTYPE_QUALITY     5
int DEFAULT_QUALITY       0
int DRAFT_QUALITY         1
int NONANTIALIASED_QUALITY 4
int PROOF_QUALITY         2
Wäre super, wenn jemand testen könnte, ob die Konstanten stimmen =)

Sascha L 3. Apr 2006 17:12

Re: ClearType verwenden
 
Also in der Windows.pas von Delphi2006 beschränkt sich das auf folgendes:

Delphi-Quellcode:
  {$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;
Die Frage ist nun, ob es einfach damit getan wäre, Nr. 5 zu ergänzen? :D

Edit: anscheinend nicht :(

Christian Seehase 3. Apr 2006 17:17

Re: ClearType verwenden
 
Moin Manuel,

stimmt nicht ganz.
NONANTIALIASED_QUALITY hat den Wert 3
(siehe WINGDI.H aus dem PSDK)

H4ndy 3. Apr 2006 18:20

Re: ClearType verwenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Christian Seehase
NONANTIALIASED_QUALITY hat den Wert 3

Danke - hätte mir selber auffallen müssen, wenn ich mir die Liste mal genau angeschaut hätte ^^.

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)

supermuckl 3. Apr 2006 19:08

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.

H4ndy 3. Apr 2006 19:27

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...)

supermuckl 3. Apr 2006 19:33

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.

H4ndy 3. Apr 2006 19:58

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 -.-

supermuckl 4. Apr 2006 15:31

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)

H4ndy 4. Apr 2006 15:41

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.
( http://www.delphipraxis.net/download.php?id=18459 )

Sascha L 5. Apr 2006 18:49

Re: ClearType verwenden
 
und, schon neue Erkenntnisse? :)

Sascha L 19. Mai 2006 10:13

Re: ClearType verwenden
 
Huhu?

Also mit folgendem Code kann man es global einstellen:

Delphi-Quellcode:
SystemParametersInfo(SPI_SETFONTSMOOTHING,
                     1,
                     0,
                     SPIF_UPDATEINIFILE or SPIF_SENDCHANGE);
SystemParametersInfo(SPI_SETFONTSMOOTHINGTYPE,
                     FE_FONTSMOOTHINGCLEARTYPE,
                     0,
                     SPIF_UPDATEINIFILE or SPIF_SENDCHANGE);
Aber es soll ja nur für die eigene Anwendung sein.

Vjay 19. Mai 2006 10:24

Re: ClearType verwenden
 
Nur als Hinweis, cleartype funktioniert glaube ich nur ab 24/32 Bit Farbe.

Jonas 17. Sep 2006 18:59

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.

Sascha L 18. Sep 2006 13:22

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.

Muetze1 18. Sep 2006 15:23

Re: ClearType verwenden
 
Zitat:

Zitat von supermuckl
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.

Das ist Banane - damit stellt er nur sicher, dass du die Instanz nicht veränderst. Die Eigenschaften der Instanz sind frei änderbar. Das Const hat hier keine Aussage...

/EDIT: Ups, 2. Seite übersehen. Ich lasse es trotzdem als allgemeinen Hinweis stehen...

CFA 8. Mär 2007 21:20

Re: ClearType verwenden
 
Hi,

hiermit könnt ihr ClearType aktivieren oder deaktivieren.

Delphi-Quellcode:
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;
Lg,
Andre

H4ndy 8. Mär 2007 21:38

Re: ClearType verwenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von CFA
Hi,

hiermit könnt ihr ClearType aktivieren oder deaktivieren.

Funktioniert sehr gut! Danke :D
(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