Schriftarten von XBase aus überprüfen und installieren

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Schriftarten von XBase aus überprüfen und installieren

Beitrag von andreas »

Hallo Leute,

kennt jemand, wie ich unter Windows mit XBase-Programm überprüfen kann, ob bestimmte Schriftart installiert ist und notfalls diese auch installieren, ohne die Systemsteuerung manuell aufzurufen?
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Andreas,

es gibt in den Beispielen ein Programm das die Namen aller Schriftarten (Fonts) anzeigt. Anhand der Namen ist die Überprüfung möglich.

C:\ALASKA\XPPW32\SOURCE\samples\basics\FONT\fontdb.prg

Beim Installieren habe ich jetzt keine Ahnung.
Ich meine ich hätte als schon die TTF Datei einfach ins Fontverzeichnis kopiert. Ob dabei der Explorer aber eine Installation gemacht hat weiß ich nicht. Ist schon länger her.
Gruß
Hubert
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Hubert,

das mit dem Prüfen der Schriftart funktioniert. Danke.

Jetzt wollte ich die Datei kopieren und überprüfe davor, ob das Verzeichnis existiert. Dabei bekomme ich immer FALSE.
Hier ist der Code:

Code: Alles auswählen

cWinDir := "C:\WINDOWS\FONTS\"
IF FExists((cWinDir), "D") = .f.
  msgbox(...)
else

endif
Bei directory(cWinDir+"*.*") bekomme ich aber die Werte.

Was mache ich falsch? Wieso wird Verzeichnis nicht erkannt? Ich habe doch diese Funktion schon öfters eingesetzt.
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Andreas.

\Windows\Fonts ist normalerweise "hidden" und oder "System". Deshalb antwortet "FExist" mit .F. Meines Erachtens gibt es eine API-Funktion, die mit dem Windows-Fonts-Verzeichnis antwortet (weil Windows ja nicht in "\Windows" installiert sein muß). Ich stöbere mal.
Herzlich,
Tom
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Keine API nötig:

Code: Alles auswählen

? GetEnv('windir')                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Andreas,

schau doch mal, wie Dein Windows-Verzeichnis heißt. Bei mir heißt das z. B. aus unerfindlichen Gründen WINNT und nicht WIndows.

Jan


Edit: Hey Tom, Vordrängeln, oder was?
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hey Tom, Vordrängeln, oder was?
Schulljung. :wink:

Code: Alles auswählen

cFontDir := GetEnv('windir')+'\fonts'
Das stimmt immer.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

andreas hat geschrieben: cWinDir := "C:\WINDOWS\FONTS"
...
Directory(cWindir,"D") *** VERZEICHNIS !
Hallo schau mal genau hinten hin.
Du hast einen \ am Schluss. Das Verzeichnis FONTS liegt z.b. In Windows, dann muss man 'C:\WINDOWS\FONTS' abfragen. Oder man schaut ob Dateien drin sind, dann darf man aber kein "D" bei Directory() angeben.

Natürlich ist es besser den WINDIR Namen zu ermitteln, wie es die anderen vorgeschlagen haben. Aber wenn es dieses Verzeichnis gibt, brauchst du bei deinem ersten Code nur das letzte \ entfernen :-)

HIDDEN Dateien findet man nur wenn man das H Attribut bei Directory() setzt. ABER normale Dateien in einem Hidden Ordner werden immer gefunden, solange der Ordner in der Pfadangabe enthalten ist. Das war schon zu Clipperzeiten so.

c:\...\HiddenDir\...\*.* liefert alle Dateien.
Gruß
Hubert
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

Hallo Tom und Jan,

mit der Umgebungsvariablen habe ich es auch gemacht und habe damit schon den richtigen Verzeichnis.
Es Stand ja auch oben, dass ich die Liste der Dateien mit Directory bekomme. :)
Nach dem ich jetzt alle Parameter FExists((cWinDir), "DHS") ausprobiert habe und immer die gleiche Antwort FALSE habe, habe ich meinen Code angepasst:

Code: Alles auswählen

cWinDir := "C:\WINDOWS\FONTS\"
IF len(directory(cWinDir+"*.*")) > 0
  msgbox(...)
else

endif 
Damit habe ich meine Funktion zum Kopieren der Dateien gebracht.

ABER! Obwohl die Datei im Verzeichnis vorhanden ist, erscheint der Font nicht in der Auswahlliste. Da macht Windows wohl mehr als nur die Dateien kopieren. :(
Gruß,

Andreas
VIP der XUG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Andreas.

Du kannst Fonts auch dann nutzen, wenn sie nicht im \Windows\Fonts-Verzeichnis liegen. Die hierfür nötige API-Funktion heißt "AddFontRessourceEx":

http://msdn2.microsoft.com/en-us/library/ms533937.aspx
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
andreas hat geschrieben: Damit habe ich meine Funktion zum Kopieren der Dateien gebracht.
aber auch nur weil du sicherlich Administrator Rechte hast. Als User
bekommt man eine ErrorMsg, also vorher einen Errorblock einbauen.
andreas hat geschrieben: ABER! Obwohl die Datei im Verzeichnis vorhanden ist, erscheint der Font nicht in der Auswahlliste. Da macht Windows wohl mehr als nur die Dateien kopieren. :(
ich denke man muss zumindest neu booten bevor Windows es "merkt".

gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

ich vermute eher, dass der Explorer beim Kopieren in das Verzeichnis noch einige Settings setzt.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Auch wenn das mit dem reboot stimmen sollte: Der klassische User von heute mag es nicht sonderlich, nach einer nicht systembedingten Softwareinstallation den Rechner neu zu starten. Wenn möglich sollte das Problem also besser anders gelöst werden.

Jan
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Das mit dem Reboot ist m.E. blanker Unsinn. Man muß eine neue Schriftart mit AddFontRessourceEx() "registrieren", dann klappt's auch mit dem Nachbarn.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

hast du mal ein Beispiel, wahrscheinlich haben wir das noch nie gemacht (ich brauche keine fremden Schriften ;-) ) ...
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
Jan hat geschrieben: Auch wenn das mit dem reboot stimmen sollte: Der klassische User von heute mag es nicht sonderlich, nach einer nicht systembedingten Softwareinstallation den Rechner neu zu starten.
Ich lassen dem User gar keine Wahl z.B. mit RunShell(... SHUTDOWN -r )
wird der Rechner neu gebootet (unter XP /W2K)

Aber ein normaler User hat kein Schreibrecht auf das \FONT Verzeichniss,
also muss schon bei der Installation vom Administrator der Font installiert
werden und der macht spätestens beim abmelden einen Reboot.

gruss by OHR
Jimmy
Benutzeravatar
andreas
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1902
Registriert: Mi, 28. Sep 2005 10:53
Wohnort: Osnabrück
Hat sich bedankt: 4 Mal
Kontaktdaten:

Beitrag von andreas »

brandelh hat geschrieben:Hi,

hast du mal ein Beispiel, wahrscheinlich haben wir das noch nie gemacht (ich brauche keine fremden Schriften ;-) ) ...
Ein Beispiel wäre nicht schlecht. Ich habe schon mit AddFontResourceEx und AddFontResourceA versucht, bekomme aber immer 0 zurück. Lokale Adminrechte habe ich aber auf meinem PC.
Gruß,

Andreas
VIP der XUG Osnabrück
Antworten