Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   AddFontResource (https://www.delphipraxis.net/162370-addfontresource.html)

Andidreas 19. Aug 2011 12:14

AddFontResource
 
hallo zusammen...

ich hoff mal mein beitrag is hier im richtigen themen bereich gelandet ^^

über den befehl AddFontResource füge ich mir eine schriftart im windows system temporär hinzu

Delphi-Quellcode:
    giFontInst := AddFontResource(PChar(sFontFile));
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
beim schließen des programmes wird die schriftart über RemoveFontResource wieder entfernt

Delphi-Quellcode:
    RemoveFontResource(PChar(sFontFile));
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
wo fügt windows die font denn genau hinzu? im verzeichnis "C:\Windows\Fonts\" sehe ich sie definitiv nicht!
und auf der homepage von msdn steht nur

Zitat:

The AddFontResource function adds the font resource from the specified file to the system font table.
mich würde der genaue "pfad" interessieren wo die schriftart temporär hinzugefügt wird, denn in unserer firma haben die normalen benutzer nur eingeschränkte recht in windows und an diesen pc's funktioniert es nicht (ich vermute stark das hier berechtigungen fehlen)...
auf meinem notebook auf dem ich admin rechte habe funktioniert aber alles :-/

SirThornberry 19. Aug 2011 12:20

AW: AddFontResource
 
Es wird keinen Pfad dafür geben. Die Schrift wird einfach nur (je nach Parameter) für die entsprechenden Prozesse registriert.
Oder kannst du die Schriftarten-Datei löschen nachdem du diese mit AddFontRessource hinzugefügt hast und die Schrift bleibt weiter verfügbar?

Bernhard Geyer 19. Aug 2011 12:24

AW: AddFontResource
 
Für deinen Anwendungsfall wäre die Ex-Version sinnvoller.
Die "normale" wird Adminrechte benötigen damit der Font Systemweit registriert werden kann.

Andidreas 22. Aug 2011 09:10

AW: AddFontResource
 
Zitat:

Zitat von SirThornberry (Beitrag 1118049)
Oder kannst du die Schriftarten-Datei löschen nachdem du diese mit AddFontRessource hinzugefügt hast und die Schrift bleibt weiter verfügbar?

nein... die schriftart wird nicht unter C:\Windows\Fonts\ aufgelistet... wüsste nicht wo ich die sonst noch suchen müsste...

Zitat:

Zitat von Bernhard Geyer (Beitrag 1118051)
Für deinen Anwendungsfall wäre die Ex-Version sinnvoller.
Die "normale" wird Adminrechte benötigen damit der Font Systemweit registriert werden kann.

ich hab es gerade mit der AddFontResourceEx funktion getestet... mit dieser funktion zeigt er mir auch auf meinem admin notebook die korrekte schriftart nicht an... bei dem "font characteristic" parameter habe ich beide möglichen parameter (FR_PRIVATE und FR_NOT_ENUM) ausprobiert immer mit dem ergebnis das mein programm die schriftart nicht zur verfügung hatte...

habt ihr noch ideen wie ich mein rechte problem umgehen kann?

himitsu 22. Aug 2011 09:22

AW: AddFontResource
 
Zitat:

Zitat von AddFontResource > Return Value
If the function succeeds, the return value specifies the number of fonts added.

If the function fails, the return value is zero. No extended error information is available.

Blöd ist, daß man hier GetLastError vergessen kann, :shock:
aber es wäre dennoch nicht schlecht, wenn man das Result wenigstens mal auswerten würde.

Zitat:

The AddFontResource function adds the font resource from the specified file to the system font table. The font can subsequently be used for text output by any application.

To mark a font as private or not enumerable, use the AddFontResourceEx function.

...

This function installs the font only for the current session
Und der Font ist für alle Programme "registriert", welche im selben Benutzerkontext laufen ... bis zum Shoutdown/Reboot, oder bis RemoveFontResource(Ex).

Andidreas 22. Aug 2011 09:29

AW: AddFontResource
 
@himitsu
das hilft mir jetzt aber auch net wirklich weiter ;-)

himitsu 22. Aug 2011 09:41

AW: AddFontResource
 
Bei FR_NOT_ENUM wird der Font auch nirgendwo aufgelistet ... genau das bedeutet ja diese Optionen. :wink:
Hier kann man nur direkt den Fontnamen angeben, ohne ihn aus einer "enumerierten" Liste auszuwählen.

Was sagt nun Result?
0?

Kann die Datei gefunden werden?

Nutzt du relative oder absolute Pfade?

...

Andidreas 22. Aug 2011 09:57

AW: AddFontResource
 
die datei wird gefunden, ansonsten käme er in meinem programm nicht zu der stelle wo ich den addfontresourceex ausführe... hier mal mein code:

Delphi-Quellcode:
  sFontFile := ExtractFilePath(Application.ExeName) + 'MyFont.ttf';
  If FileExists(sFontFile) = True Then
  Begin
    giFontInst := AddFontResourceEx(PChar(sFontFile), FR_PRIVATE, 0);
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
  End;
wenn ich grad nicht total auf dem schlauch stehe verwende ich absolute dateipfade...
gifontinst ist nach AddFontResourceEx gleich 1 d.h. ja laut msdn das er die font hinzugefügt hat...

himitsu 22. Aug 2011 10:09

AW: AddFontResource
 
OK, abgesehn von dem
Delphi-Quellcode:
= true
, welches man nicht machen sollte ...
Delphi-Quellcode:
If FileExists(sFontFile) Then
und wenn nicht, dann mit
Delphi-Quellcode:
If not ...
.


Kannst du diesen über MSDN-Library durchsuchenEnumFonts finden?

DeddyH 22. Aug 2011 10:10

AW: AddFontResource
 
Auch wenn das wohl das Problem nicht löst würde ich den Code ein wenig umformulieren.
Delphi-Quellcode:
  sFontFile := ExtractFilePath(Application.ExeName) + 'MyFont.ttf';
  If FileExists(sFontFile){ = True *tztz*} Then
  Begin
    giFontInst := AddFontResourceEx(PChar(sFontFile), FR_PRIVATE, 0);
    if giFontInst > 0 then
      //Ist das eigentlich bei "privaten" Fonts notwendig?
      SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
  End;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr.
Seite 1 von 2  1 2      

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