IME sınıfını kullanma
Flash Player 9 ve üstü, Adobe AIR 1.0 ve üstü
IME sınıfı, Flash Player veya Adobe AIR uygulamasında, işletim sisteminin IME'sini işlemenize olanak sağlar.
ActionScript'i kullanarak şunları belirleyebilirsiniz:
-
Kullanıcının bilgisayarında bir IME yüklü olup olmadığı (
Capabilities.hasIME
)
-
Kullanıcının bilgisayarında IME'nin etkinleştirilmiş mi yoksa devre dışı mı bırakılmış olduğu (
IME.enabled
)
-
Geçerli IME'nin kullandığı dönüştürme modu (
IME.conversionMode
)
Girdi metni alanını belirli bir IME bağlamıyla ilişkilendirebilirsiniz. Girdi alanları arasında geçiş yaptığınızda, Hiragana (Japonca), tam genişlikte sayılar, yarım genişlikte sayılar, doğrudan girdi, vb. arasında da IME'yi değiştirebilirsiniz.
IME, kullanıcıların Çince, Japonca ve Korece gibi çok baytlı dillerde ASCII olmayan metin karakterlerini yazmasına olanak sağlar.
IME'lerle çalışma hakkında daha fazla bilgi için, uygulamanızı geliştirdiğiniz işletim sisteminin belgelerine bakın. Ek kaynaklar için, aşağıdaki web sitelerine bakın:
Not:
Bir IME, kullanıcının bilgisayarında etkin değilse,
Capabilities.hasIME
dışındaki IME yöntemlerine veya özelliklerine yapılan çağrılar başarısız olur. Bir IME'yi elle etkinleştirdikten sonra, ardından IME yöntemlerine ve özelliklerine yapılan ActionScript çağrıları beklenen şekilde gerçekleşir. Örneğin, Japonca IME kullanıyorsanız, herhangi bir IME yöntemini veya özelliğini çağırabilmeniz için öncelikle bu IME'yi etkinleştirmeniz gerekir.
IME'nin yüklü ve etkinleştirilmiş olup olmadığını kontrol etme
Herhangi bir IME yöntemini veya özelliğini çağırmadan önce, kullanıcının bilgisayarında geçerli olarak IME'nin yüklü ve etkinleştirilmiş olup olmadığını kontrol etmeniz gerekir. Aşağıdaki kod, siz herhangi bir yöntem çağırmadan önce kullanıcıda IME yüklü ve etkinleştirilmiş olup olmadığının nasıl kontrol edildiğini gösterir:
if (Capabilities.hasIME)
{
if (IME.enabled)
{
trace("IME is installed and enabled.");
}
else
{
trace("IME is installed but not enabled. Please enable your IME and try again.");
}
}
else
{
trace("IME is not installed. Please install an IME and try again.");
}
Önceki kod
Capabilities.hasIME
özelliğini kullanarak, kullanıcının bir IME yüklemiş olup olmadığını kontrol eder. Bu özellik
true
değerine ayarlanırsa, kod,
IME.enabled
özelliğini kullanarak, kullanıcının IME'sinin geçerli olarak etkinleştirilmiş olup olmadığını kontrol eder.
Geçerli olarak hangi IME dönüştürme modunun etkinleştirilmiş olduğunu belirleme
Çok dilli uygulamalar oluşturduğunuzda, geçerli olarak kullanıcıda hangi dönüştürme modunun etkin olduğunu belirlemeniz gerekebilir. Aşağıdaki kod, kullanıcıda IME yüklü olup olmadığının ve IME yüklüyse, hangi IME dönüştürme modunun geçerli olarak etkin olduğunun nasıl kontrol edildiğini gösterir:
if (Capabilities.hasIME)
{
switch (IME.conversionMode)
{
case IMEConversionMode.ALPHANUMERIC_FULL:
tf.text = "Current conversion mode is alphanumeric (full-width).";
break;
case IMEConversionMode.ALPHANUMERIC_HALF:
tf.text = "Current conversion mode is alphanumeric (half-width).";
break;
case IMEConversionMode.CHINESE:
tf.text = "Current conversion mode is Chinese.";
break;
case IMEConversionMode.JAPANESE_HIRAGANA:
tf.text = "Current conversion mode is Japananese Hiragana.";
break;
case IMEConversionMode.JAPANESE_KATAKANA_FULL:
tf.text = "Current conversion mode is Japanese Katakana (full-width).";
break;
case IMEConversionMode.JAPANESE_KATAKANA_HALF:
tf.text = "Current conversion mode is Japanese Katakana (half-width).";
break;
case IMEConversionMode.KOREAN:
tf.text = "Current conversion mode is Korean.";
break;
default:
tf.text = "Current conversion mode is " + IME.conversionMode + ".";
break;
}
}
else
{
tf.text = "Please install an IME and try again.";
}
Önceki kod ilk olarak kullanıcıda IME yüklü olup olmadığını kontrol eder. Daha sonra
IME.conversionMode
özelliğini, IMEConversionMode sınıfındaki sabitlerin her biriyle karşılaştırarak geçerli IME'nin hangi dönüştürme modunu kullandığını kontrol eder.
IME dönüştürme modunu ayarlama
Kullanıcının IME'sinin dönüştürme modunu değiştirdiğinizde, kodun bir
try..catch
bloğu içinde sarıldığından emin olmanız gerekir, bunun nedeni, IME dönüştürme modunu ayarlayamazsa,
conversionMode
özelliği kullanılarak dönüştürme modu ayarlandığında bir hata atılabilmesidir. Aşağıdaki kod,
try..catch
bloğunun,
IME.conversionMode
özelliği ayarlanırken nasıl kullanıldığını gösterir:
var statusText:TextField = new TextField;
statusText.autoSize = TextFieldAutoSize.LEFT;
addChild(statusText);
if (Capabilities.hasIME)
{
try
{
IME.enabled = true;
IME.conversionMode = IMEConversionMode.KOREAN;
statusText.text = "Conversion mode is " + IME.conversionMode + ".";
}
catch (error:Error)
{
statusText.text = "Unable to set conversion mode.\n" + error.message;
}
}
Önceki kod ilk önce, kullanıcıya durum mesajı görüntülemek için kullanılan bir metin alanını oluşturur. Daha sonra, IME yüklüyse, kod IME'yi etkinleştirir ve dönüştürme modunu Korece olarak ayarlar. Kullanıcının bilgisayarında Korece IME yükü değilse, Flash Player veya AIR tarafından bir hata atılır ve bu hata
try..catch
bloğu tarafından yakalanır.
try..catch
bloğu, önceden oluşturulan metin alanında hata mesajını görüntüler.
Belirli metin alanları için IME'yi devre dışı bırakma
Bazı durumlarda, kullanıcılar karakterleri yazarken kullanıcıların IME'sini devre dışı bırakmak isteyebilirsiniz. Örneğin, yalnızca sayısal girdiyi kabul eden bir metin alanınız varsa, IME'nin gelip veri girişini yavaşlatmasını istemeyebilirsiniz.
Aşağıdaki örnek,
FocusEvent.FOCUS_IN
ve
FocusEvent.FOCUS_OUT
olaylarını nasıl dinleyip buna göre kullanıcının IME'sini devre dışı bırakabileceğinizi göstermektedir:
var phoneTxt:TextField = new TextField();
var nameTxt:TextField = new TextField();
phoneTxt.type = TextFieldType.INPUT;
phoneTxt.addEventListener(FocusEvent.FOCUS_IN, focusInHandler);
phoneTxt.addEventListener(FocusEvent.FOCUS_OUT, focusOutHandler);
phoneTxt.restrict = "0-9";
phoneTxt.width = 100;
phoneTxt.height = 18;
phoneTxt.background = true;
phoneTxt.border = true;
addChild(phoneTxt);
nameField.type = TextFieldType.INPUT;
nameField.x = 120;
nameField.width = 100;
nameField.height = 18;
nameField.background = true;
nameField.border = true;
addChild(nameField);
function focusInHandler(event:FocusEvent):void
{
if (Capabilities.hasIME)
{
IME.enabled = false;
}
}
function focusOutHandler(event:FocusEvent):void
{
if (Capabilities.hasIME)
{
IME.enabled = true;
}
}
Bu örnek,
phoneTxt
ve
nameTxt
adında iki girdi metni alanı oluşturur ve sonra
phoneTxt
metin alanına iki olay dinleyicisi ekler. Kullanıcı odağı
phoneTxt
metin alanına ayarladığında, bir
FocusEvent.FOCUS_IN
olayı gönderilir ve IME devre dışı bırakılır. Odak
phoneTxt
metin alanından çıktığında, IME'yi yeniden etkinleştirmek için
FocusEvent.FOCUS_OUT
olayı gönderilir.
IME oluşturma olaylarını dinleme
IME oluşturma olayları, bir oluşturma dizesi ayarlandığında gönderilir. Örneğin, kullanıcının IME'si etkinleştirilmişse ve aktif durumdaysa, kullanıcı Japonca bir dize yazdığında, oluşturma dizesini seçtiği anda
IMEEvent.IME_COMPOSITION
olayı gönderilir.
IMEEvent.IME_COMPOSITION
olayını dinlemek için, aşağıdaki örnekte gösterildiği gibi, System sınıfında (
flash.system.System.ime.addEventListener(...)
) statik
ime
özelliğine bir olay dinleyicisi eklemeniz gerekir:
var inputTxt:TextField;
var outputTxt:TextField;
inputTxt = new TextField();
inputTxt.type = TextFieldType.INPUT;
inputTxt.width = 200;
inputTxt.height = 18;
inputTxt.border = true;
inputTxt.background = true;
addChild(inputTxt);
outputTxt = new TextField();
outputTxt.autoSize = TextFieldAutoSize.LEFT;
outputTxt.y = 20;
addChild(outputTxt);
if (Capabilities.hasIME)
{
IME.enabled = true;
try
{
IME.conversionMode = IMEConversionMode.JAPANESE_HIRAGANA;
}
catch (error:Error)
{
outputTxt.text = "Unable to change IME.";
}
System.ime.addEventListener(IMEEvent.IME_COMPOSITION, imeCompositionHandler);
}
else
{
outputTxt.text = "Please install IME and try again.";
}
function imeCompositionHandler(event:IMEEvent):void
{
outputTxt.text = "you typed: " + event.text;
}
Önceki kod iki metin alanı oluşturur ve bu metin alanlarını görüntüleme listesine ekler. Birinci metin alanı olan
inputTxt
, kullanıcının Japonca metin girmesine olanak sağlayan bir girdi metni alanıdır. İkinci metin alanı olan
outputTxt
, kullanıcıya hata mesajları görüntüleyen veya kullanıcının
inputTxt
metin alanına yazdığı Japonca dizeyi yankılayan bir dinamik metin alanıdır.
|
|
|
|
|