| |
|
|
- Seite 1 - |
|
Frank Abbing | Zu einem mit Create (Font ... erstellten Font müsste ich wissen, welchen Zeichensatz (Ansi /ASCII /Symbol) dieser benutzt/beinhaltet. Ist wahrscheinlich eine einfache Sache, aber irgendwie fällt mir dazu nichts ein. |
|
|
| |
|
|
|
| |
|
- Seite 1 - |
|
Sebastian König | Hallo Frank,
mit einer LOGFONT-Struktur und GetObject () solltest Du die gewünschten Informationen bekommen. In dem Attribut lfCharSet steht dann der benutzte Zeichensatz: [quote:f28fa741a3] lfCharSet Specifies the character set. The following values are predefined: ANSI_CHARSET BALTIC_CHARSET CHINESEBIG5_CHARSET DEFAULT_CHARSET EASTEUROPE_CHARSET GB2312_CHARSET GREEK_CHARSET HANGUL_CHARSET MAC_CHARSET OEM_CHARSET RUSSIAN_CHARSET SHIFTJIS_CHARSET SYMBOL_CHARSET TURKISH_CHARSET [/quote:f28fa741a3] Leider weiß ich nicht genau, wie zwischen ANSI und ASCII zu unterscheiden ist.... entspricht vielleicht der OEM-Zeichensatz in den meisten Fällen der ASCII-Tabelle?
MfG
Sebastian |
|
|
| |
|
|
|
Frank Abbing | Danke! Daran hatte ich gar nicht gedacht, obwohl ich einiges an API durchgesehen hatte. Ich denke auch, dass ASCII und OEM identisch sind und werde das mal testen. Wichtiger ist für mich aber die Erkennung eines symbolischen Zeichensatzes. |
|
|
| |
|
|
|
RGH | Ja, OEM = ASCII. Das heiß, um genau zu sein: Der ursprüngliche ASCII.Standard, den es schon zu CP/M-Zeiten gab, beinhaltet nur die ersten 128 Zeichen, wobei die ersten 32 Zeichen (0 - 31) des Zeichensatzes Steuerzeichen waren. Diesen hatte IBM auf 255 Zeichen erweitert, um auch die Umlaute der meisten Sprachen darstellen zu können. Dieser erweiterte ASCII-Zeichensatz wird von der Nicht-IBM-Welt gerne als IBMPC- oder OEM-Zeichensatz bezeichnet, um damit herauszuheben, daß es sich um die Definition eines Herstellers, aber um keinen Standard handelt. Der ANSI-Zeichensatz ist der Versuch eines Standards, der u.a. von Microsoft für sein Windows-Betriebssystem verwandt wurde. Die ersten 128 Zeichen sind bei beiden Zeichensätzen gleich. Außerhalb von Windows hat sich dieser Standard allerdings kaum durchgesetzt.
(Da Windows also ASCII-Zeichensatz verwende habe ich in Profan die in BASIC als ASC() bekannte Funktion in Anlehnung an Pascal in ORD() umbenannt.)
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 17.08.2006 ▲ |
|
|
|
|
Frank Abbing | Danke für die Infos! |
|
|
| |
|
|
|
Frank Abbing |
Leider versagt auch diese Technik. In lfCharSet ist auch nur der Wert gespeichert, der in Profan mittels CharSet N vergeben ist, bzw. voreingestellt ist, und das ist ja auch irgendwie logisch. Ich bräuchte wohl eine Möglichkeit, um den CharSet nur anhand des Fontnamens (z.B. Marlett) zu ermitteln. Vielleicht weiss ja noch jemand Rat. |
|
|
| |
|
|
|
Sebastian König | Mir ist gerade noch eine Idee gekommen: Versuch mal, den Font-Namen auszulesen und damit eine weitere LOGFONT-Struktur zu füllen, wobei Du lfCharSet erstmal auf DEFAULT_CHARSET setzt. Dann CreateFontIndirect() und auf das neue Font-Handle wieder GetObject(). Mit etwas Glück steht anschließend in lfCharSet vielleicht der Wert des Zeichensatzes, der tatsächlich benutzt wurde.
Kann natürlich auch sein, dass dort wieder nur DEFAULT_CHARSET steht... |
|
|
| |
|
|
|
Frank Abbing | Gut, werde ich heute nachmittag testen. Das Seltsame ist ja, dass ein Text in einem Multiedit richtig dargestellt wird. Aber wenn ich ihn mit DrawText anzeigen lasse, dann eben nicht. |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hallo Leute!
Dies könnte helfen: KompilierenMarkierenSeparieren!
window 100,100-300,300
def CreateFontIndirect(1) !"GDI32","CreateFontIndirectA"
def SelectObject(2) !"GDI32","SelectObject"
def GetTextCharset(1) !"GDI32","GetTextCharset"
declare a&,b&,a#
dim a#,100
clear a#
byte a#,23=1
proc GetFontType--------------------------------
parameters a$
string a#,28=a$
a&=CreateFontIndirect(a#)
SelectObject(%hdc,a&)
b&=GetTextCharset(%hdc)
deleteobject a&
return b&
endproc-----------------------------------------
GetFontType "Terminal"
print "Terminal :",&(0)
GetFontType "Arial"
print "Arial :",&(0)
GetFontType "Wingdings"
print "Wingdings:",&(0)
dispose a#
waitkey
HTH Pascal |
|
|
| |
|
|
|
Sebastian König | [quote:8206d86dad]Dies könnte helfen: (...)[/quote:8206d86dad] Ok, das ist natürlich sehr viel eleganter... Manchmal denkt man tatsächlich gar nicht daran, zuerst nach einer Funktion zu suchen, die direkt das gewünschte erledigt.... |
|
|
| |
|
|
|
Frank Abbing | [quote:9c5686e83a]Dies könnte helfen:[/quote:9c5686e83a] Und das hilf auch, danke! Ist genau das, was ich haben wollte.
Anbei einige Anregungen für Roland, diese Funktion(en) zu übernehmen und vorhandenes abzuwandeln. Anstatt Charset N...
Set(Charset, N)
Und neu dazu:
n&=GetCharset() oder n&=Get(Charset)
...um den aktuell gesetzten Zeichensatz zu ermitteln. Und zusätzlich:
n&=GetCharset(Fontname) oder n&=Get(Charset,Fontname)
...um den Zeichensatz eines bestimmten Fonts auszulesen. Soll ich das in den Anregungen-Thread posten, oder hast du es notiert, Roland? |
|
|
| |
|
|
|
RGH | Hallo,
zumThema Fonds habe ich gerade folgende Erweiterung eingebaut:
Anstelle des Befehls Charset N% gibt es jetzt die Funktion Set(CharSet, N%) und dazu die Lesefunktion Get(CharSet).
Wenn nun bei Set(Charset, N%) der Parameter den Wert -1 hat, wird das Default-Charset verwendet, d.h. jeder mit UseFont oder Create(Font,...) eingestellte Font benutzt das ihm eigene CharSet. Dieser Wert wird auch künftig die Voreinstellung sein. Bei den anderen Werten (0 - 2)* ist es wie bisher: Wenn der gewünschte Font dieses CharSet nicht bietet wird Windows einen möglichst ähnlichen Font mit dem gewünschten CharSet nehmen. Das gewünsche CharSet hat also Vorrang vor dem Namen. Werte über 2 können nun auch verwandt werden und entsprechen den API-Werten für diese Fontsets. Get(CharSet) gibt den mit Set(Charset, N%) eingestellten Wert zurück.
Nach UseFont kann mit der API-Funktion ~GetTextCharset(%hdc) das tatsächlich verwandte Charset ermittelt werden, also bei Set(Charset, -1) das CharSet des gewählten Fonts.
Gruß Roland
* In XProfan hat Default-Charset den Wert -1 und OEM-CharSet den Wert 1. In der API hat Default-Charset den Wert 1 und OEM-Charset den Wert 255. Bei den übrigen Charsets sind die Werte in API und XProfan gleich. |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 19.08.2006 ▲ |
|
|
|
| |
|
- Seite 2 - |
|
|
Frank Abbing | Das halte ich für sehr nützliche Erweiterungen . Danke! |
|
|
| |
|
|