![]() |
Font ohne Installation verwenden
Ja es gibt hier schon einige Threads für das Problem.
Und das Ergebnis ist dies
Delphi-Quellcode:
Nur wenn das jeder empfiehlt warum stürzt meine Anwendung dann hier ab ?
procedure TForm1.FormCreate(Sender: TObject) ;
begin AddFontResource('c:\FONTS\MyFont.TTF') ; SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ; end; procedure TForm1.FormDestroy(Sender: TObject; var Action: TCloseAction) ; begin RemoveFontResource('C:\FONTS\MyFont.TTF') ; SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ; end;
Delphi-Quellcode:
Wo liegt das Problem?
GdipCheck(GdipCreateFontFamilyFromName(UseFont, nil, Fam));
gruss |
AW: Font ohne Installation verwenden
Rückgabewerte und Fehlerbehandlung? Wie sieht der Code drumherum aus? Funktioniert es mit einer schon installierten Schrift?
|
AW: Font ohne Installation verwenden
Zitat:
Zitat:
gruss |
AW: Font ohne Installation verwenden
Zitat:
|
AW: Font ohne Installation verwenden
Zitat:
Diese Funktion ist einfach zu GDI+ nicht kompatible. Die Rückgabe ist zwar true( VCL) aber nicht gleich True für GDI+ Ich muss das hier verwenden. GdipPrivateAddFontFile gruss |
AW: Font ohne Installation verwenden
Wie wäre es mit den etwas besser dokumentierten APIs? (MSDN)
AddFontResource oder besser AddFontResourceEx Standardmäßig braucht man im Windows keine erhöhten Rechte. Selbst in Server-Windowsen kann jeder Benutzer diese APIs nutzen, bzw. im Explorer auf "Installieren" klicken. Bei AddFontResourceEx kann man angeben, ob Windows den Font automatisch wieder entlädt (auch wenn dein Programm mal abstürzt) und ob der FontName aufgelistet werden soll (z.B. bei den FontName-Properties im DropDown). Auch wenn der Name nicht aufgelistet wird, kann man ihn direkt dem FonName zuweisen und verwenden. (bei Fonts gibt es im GDI+ auch niemals eine Exception/Fehlermeldung, sollte man einen nichtregistrierten Namen angeben :stupid: ... das wird einfach nur "heimlich" durch registrierte Ersatzfonts oder Standardfonts ersetzt) PS: In deinem BeispielCode und dem nichtverlinkten Hierwurdedasschonberedetthread finde ich die Zeile mit "GdipCreateFontFamilyFromName" irgendwie nicht. |
AW: Font ohne Installation verwenden
Zitat:
Denn da bist du im Irrtum.. und wie es kracht. Ich lasse es gerne absichtlich krachen. Das Programm soll sich beenden wenn Fehler bei der Verwendung von GDI+ auftreten. Sonst hätte ich diesen Thread gar nicht erstellen müssen. Das muss und soll krachen wenn ein Fehler auftritt. Fam wäre in dem Fall NIL.
Delphi-Quellcode:
GdipCheck(GdipCreateFontFamilyFromName(UseFont, nil, Fam));
Zitat:
GDI+ Muss seinen Font von der Festplatte oder woher auch immer mit
Delphi-Quellcode:
privateFontCollection: TGPPrivateFontCollection;
FontCollection einholen.
Delphi-Quellcode:
privateFontCollection.AddFontFile('c:\Windows\Fonts\Arial.ttf');
Zitat:
Zitat:
Die wird verwendet in meiner Library sobald man GDIP_DrawTextToDC verwendet Button beschriftet oder Labels addiert.. gruss |
AW: Font ohne Installation verwenden
Zitat:
Label.Font.FontName im OI zuweisen und dann schauen was nicht passiert oder irgendwas ala
Delphi-Quellcode:
Nirgendwo wird ein Fehler geworfen.
Canvas.Font.FontName := 'GibtEsNicht';
Canvas.DrawText(...); Zitat:
Sollen wir uns das jetzt alles durchlesen, anstatt du einfach mal ein/zwei weiterfphrende Links gibst? Das Einzige Problem was wir z.B. bei AddFontResourceEx haben ist Microsoft Office. Der Dreck hookt sich krankhaft überall ins System und bei einigen Kunden passiert es dann, dass der Aufruf dieser API niemals zurückkehrt (hängt), bis man MS Office abschießt/deinstalliert. |
AW: Font ohne Installation verwenden
Delphi-Quellcode:
Es hat nichts mit GDI+ zu tun.. sorry das ist VCL(GDI) und hier funktioniert die altbewährte Methode über GDI.
Canvas.Font := 'GibtEsNicht';
Canvas.DrawText(...); Also das funktioniert AddFontResourceEx mit GDI Zitat:
Ich habe nirgends geschrieben "ich hab diese Lösung von wo anders" Zitat:
Und zwar das her Zitat:
Nur alle die Informationen die fast alle gleich sind funktionieren nicht mit GDI+ das ist Fakt! Warum habe ich oben beschrieben. Aber ich möchte mich mit niemanden hier streiten von daher :cheers: gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 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