Autor | Thema: externe schriftart einbinden | | Datum:20.06.02 11:47 
(m.weber@arcor.de) | |
Hallo Leute!
In einem Programm möchte ich eine bestimmte Schriftart benutzen die wahrscheinlich auf anderen Rechnern nicht installiert ist.Gibt es eine möglichkeit die schriftart aus einem beliebigem Verzeichnis mit Usefont einzulesen? Also nicht aus "C:\WINDOWS\FONTS"
|
| | Datum:20.06.02 16:07 
| |
Hallo,
du könntest mit einem Setup-Programm ja den Font auf den Computer des Users kopieren lassen ?
Gruß, Frank
|
| | Datum:20.06.02 17:14 
(m.weber@arcor.de) | |
Ja diese Möglichkeit wollte ich unbedingt vermeiden.Die meisten von euch haben sich ihr Font Verzeichnis schon zugemüllt mit hunderten von Schriftarten. Am Ende wundert man sich das die Resourcen immer kleiner werden und Windows vieleicht sogar langsamer. Ausserdem wollte ich das Windows Verzeichnis nicht antasten. Ich habe es auch schon mit einem Bitmap und mcopysizedbmp probiert. Das hat aber auch seine nachteile wegen der auflösung unter verschiedenen Bildschirmgrössen . In Borland C hatte man dafür die BGI Fonts. ich dachte das eine möglichkeit gibt sowas auch mit TTF zu machen.
|
| | Datum:21.06.02 09:07 
(mail@stschnell.de) | |
Hallo Michael,
ich bin schon der Meinung, das die von Dir beschriebene Möglichkeit funktioniert. So ähnlich ist es auch bei Adobe Acrobat. Der Font wird mit in das Dokument (PDF) eingebunden. Um ihn allerdings zu verwenden (für die korrekte Anzeige), muss er allerdings eingebunden, sprich installiert, werden. Dies macht Acrobat dann temporär. Ohne Zugriffe auf das Windows-Verzeichnis wirst Du wohl nicht rumkommen.
Tschüss
Stefan
|
| | Datum:21.06.02 12:01 
| |
Hallo,
du könntest den ttf-Font nur während der Dauer deines Programmes zu den Systemfonts kopieren und später wieder löschen. Ich habe ein Beispiel (Assembler) hierfür auf meiner Festplatte, wenn du möchtest, schick ich es dir.
Gruß, Frank
|
| | Datum:21.06.02 12:46 
(m.weber@arcor.de) | |
Vielen Dank für das Angebot. Aber mit Assembler kenne ich mich nicht so gut aus. Ich hatte in Borland C++ manchmal den Inline Assembler benutzt um die Maus unter DOS zu steuern aber zu mehr hat es mit meinen Kenntnissen nie gereicht. Dieses Push und Pop war mir immer ein Rätsel. Ich musste mich immer darauf verlassen das der Quellcode in Assembler für meine Zwecke passend war, weil ich selbst nichts ändern konnte. Trotzdem hat mich Assembler immer fasziniert weil der Programmablauf sehr schnell war und der Code sehr klein weil man den ganzen Headerkram von Borland weitestgehend weglassen konnte.
|
| | Datum:21.06.02 13:56 
| |
Hallo,
Assemblerkenntnisse hin oder her, die API-Aufrufe wirst du aber sicher erkennen, eine Demo-Exe ist auch dabei.
Der Font ist als Resource im Programm gespeichert (in Dll würde ja auch gehen) und wird dann in den Systemordner kopiert und angemeldet usw.
Überleg's dir.
Gruß, Frank
|
| | Datum:21.06.02 14:25 
(m.weber@arcor.de) | |
Hallo Frank!
Einen versuch wäre es auf alle Fälle wert. Alternativen habe ich bis jetzt auch noch nicht gefunden. Dafür habe ich in meinem Programm noch einen Fehler bemerkt. Nach mehrmaligem Aufruf ist der Speicher plötzlich so voll das Windows mir vorschlägt die popligsten anwendungen zu beenden wil "bedenklich wenig Speicher" zur verfügung steht. Muss man denn Arrays auch wieder mit DISPOSE freigeben? Es wäre nett wenn sich jemand meinen chaotischen Quellcode ansehen könnte.
|
| | Datum:21.06.02 15:16 
| |
Hallo,
die Zip-Datei ist unterwegs zu dir.
Profanhilfe:
"Die neuen Arrays sind, ebenso wie die Bereichsvariablen, global. Der Speicherplatz eines einmal deklarierten Arrays wird erst bei Programmende wieder freigegeben. Wird ein Array ein weiteres Mal mit gleichem Namen und Typ deklariert, kann immer nur auf das zuletzt deklarierte Array zugegriffen werden."
Scheint so, als wenn Arrays durchs Profan automatisch freigegeben werden. Wenn du aber mehrere Arrays unter gleichem Namen deklarierst, wird nur der letzte Speicher wieder freigegeben.
So habe ich's verstanden (ich benutzte aber lieber Bereiche als Arrays).
Gruß, Frank
|
| | Datum:24.06.02 20:15 
(b.kuenzel@chello.at) | |
Hallo Michael,
habe es früher immer so gemacht, funktioniert aber seit ich WIN98 habe nicht mehr.
Die Schrift wird zwar angelegt aber die Message kommt nicht an.
Es wird sicher im FORUM jemand wissen wieso das jetzt nicht mehr funktioniert!!!!!!!!!!
'###########################################################
'Die Funktion AddFontResource fügt die Schrift-Ressource
'in die Schriftentabelle von Windows ein.
'Die so eingefügte Schrift kann von jeder Anwendung verwendet werden
Proc MoveFontEx
Parameters Font$
External("GDI32","AddFontResourceA",ADDR(Font$))
If SendMessage($0FFFF,$1D,0,0)'HWND_BROADCAST , WM_FONTCHANGE
MessageBox("Die Nachricht WM_FONTCHANGE wurde nicht verarbeitet!","Schrift-Ressource hinzufügen",16)
EndIf
EndProc
Proc RemoveFontEx
Parameters Font$
External("GDI32","RemoveFontResourceA",ADDR(Font$))
If SendMessage($0FFFF,$1D,0,0)'HWND_BROADCAST , WM_FONTCHANGE
MessageBox("Die Nachricht WM_FONTCHANGE wurde nicht verarbeitet!","Schrift-Ressource entfernen",16)
EndIf
EndProc
Cls
MoveFontEx "Pfad\Font.ttf"'hier den gewünschten Font eintragen
UseFont "Vinet",60,0,0,0,0
DrawText 20,50,"Probetext für den neuen Font"
WaitInput
RemoveFontEx "Pfad\Font.ttf"'hier den gewünschten Font eintragen
Gruß
Bernhard
|
| | Datum: 17.07.02 21:56 
(b.kuenzel@chello.at) | |
Hallo,
kann mir jemand im Forum sagen wieso das mit der Funktion "AddFontResourceA" nicht funktioniert
Gruß
Bernhard
|
|
|