RSS

Etiket arşivi: button shortcuts Ax

Formlarda kendi kısayollarınızı oluşturmak

Merhaba,

Standart AX içinde buttonlara istediğiniz kısayolu vermek neredeyse imkansızdır. Burada ya AX’ın size verdiği alternatifi kullanmak zorundasınız (ALT+O gibi) veya değişikliğiniz çok sınırlı kalmaktadır. (ALT+O yerine ALT+K dönüştürmek gibi..) Buton kontorlü üzerinde bulunan KeyTip özelliğide bazen çaresiz kalabilmektedir. Örneğin F2 ve F3 tuşlarına basarak bir butona basılınca yapılan fonksiyonu tetiklemek mevcut geliştirme özellikleri ile pekte mümkün değildir.

Bunun için yapılması gereken aşağıdaki kodları sisteminizde uygun yerlere yazmak olacaktır. Sonrasından klavyedeki bütün butonlar emrinizde!
Öncelikle doğru butona basıldığının tespiti için USER32.DLL çağıran aşağıdaki metodu WINAPI sınıfına yeni bir metod olarak yapıştıralım.

static boolean getKeyPressed(int _keyCode)
{
    DLL winApiDLL = new DLL('USER32');
    DLLFunction getKeyState = new DLLFunction(winApiDLL, 'GetAsyncKeyState');
    int result;
    ;

    getKeyState.returns(ExtTypes::WORD);
    getKeyState.arg(ExtTypes::DWORD);

    result = getKeyState.call(_keyCode);

    if ((result & 0x8000) == 0x8000)
        return true;
    else
        return false;
}

Klavyedeki tuşlara karşılık gelen kodları http://msdn.microsoft.com/en-us/library/dd375731(VS.85).aspx

sitesinden bulabilirsiniz.

Buton kombinasyonunun kullanılacağı formunuzda aşağıdaki metodu oluşturun. Eğer kodu birden çok yerde kullanmayı planlıyorsanız DocuFileWatchDog classına kodu taşıyabilirsiniz.

<pre>void myKeyboardCheck()
{
    #define.F3(0x72)
    #define.timeOut(10)
    ;

    // Check if this form is the foreground window of Windows
    if (winApi::getForegroundWindow() == this.hWnd())
    {
        // Check if F3 is pressed
        if (WinApi::getKeyPressed(#ALT) && WinApi::getKeyPressed(#F3))
        {
            // Check if the button is enable
             if (MyVerySpecialButton.enabled())
            {
                MyVerySpecialButton.clicked();
            }
        }
    }
    // Reset timer
    this.setTimeOut('myKeyboardCheck', #timeOut, true);
}


Son olarakta Formun run metoduna aşağıdaki kodu yazmamız gerekmektedir. İlk satır tercihe bağlıdır.


MyVerySpecialButton.text(MyVerySpecialButton.labelText() +' (F3)');
this.myKeyboardCheck();

Global rezerveli tuşları görmek için \Application Documentation\Global\Shortcutkeys dizinini kontrol etmenizde fayda olacaktır.

NOT: Yazıda belirtilen kodun, değiştirilmeden veya değiştirilerek, development/test/canlı ortamlarında kullanılması sonucu oluşabilecek olumlu/olumsuz durumlarda tüm sorumluluk kodu kullanan kişiye aittir.

Mesut BOZTAŞ

Dynamics AX ERP Danışmanı ve
İstanbul Ticaret Üni. Y.Lisans öğrencisi

İstanbul 2011

http://www.etg-it.com

Reklamlar
 
Yorum yapın

Yazan: 10/07/2011 in Geliştirme

 

Etiketler:

 
%d blogcu bunu beğendi: