| |
|
|
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. |
|
|
| |
|
|
|
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 per 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 per 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 Di base als ASC() bekannte Funktion in Anlehnung an Pascal in ORD() umbenannt.)
Saluto 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 per 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 naturalmente 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 Mostra lasse, dann eben nicht. |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hallo Leute!
Dies potuto 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 potuto helfen: (...)[/quote:8206d86dad] Ok, das ist naturalmente 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 potuto helfen:[/quote:9c5686e83a] Und das hilf auch, danke! Ist genau das, was ich haben wollte.
Anbei einige Anregungen per 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 | Ciao,
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 il valore -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 possibile ähnlichen Font mit dem gewünschten CharSet nehmen. Das gewünsche CharSet hat also Vorrang vor dem Namen. Werte circa 2 können nun auch verwandt werden und entsprechen den API-Werten per 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.
Saluto Roland
* In XProfan hat Default-Charset il valore -1 und OEM-CharSet il valore 1. In der API hat Default-Charset il valore 1 und OEM-Charset il valore 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 ▲ |
|
|
|