Deutsch
Forum

Ansi ASCII oder Symbol-Font?

 

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.
 
16.08.2006  
 




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
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
17.08.2006  
 




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.
 
17.08.2006  
 




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!
 
17.08.2006  
 




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.
 
17.08.2006  
 




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...
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
17.08.2006  
 




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.
 
18.08.2006  
 




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
 
18.08.2006  
 




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....
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
18.08.2006  
 




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?
 
18.08.2006  
 




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  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.199 Betrachtungen

Unbenanntvor 0 min.
Stephan Sonneborn06.07.2021
Joerg16.06.2016
Julian Schmidt20.02.2012
iF21.09.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie