30 Nisan 2009 Perşembe

Nasıl TableWindow kolonunun arka plan rengi değiştirilir?

TableWindow kolonuna ait arkaplan rengini değiştirmek için XSalTblSetColumnBackColor
fonksiyonu kullanılabilir. Bu fonksiyon xsal2_32.dll içerisindeki tablewindow
external fonksiyonlarından birisidir. External fonksiyonlar arasında olmaması durumunda aşağıdaki kod ile kolayca ekleyebilirsiniz.

!!CB!! 145
Function: XSalTblSetColumnBackColor
Description: BOOL XSalTblSetColumnBackColor(
HWND p_hwndCol,
COLORREF p_cBackColor );
Export Ordinal: 0
Returns
Boolean: BOOL
Parameters
Window Handle: HWND
Number: LONG



Bu fonksiyon kullanılarak aşağıda verilen kod orneğini değiştirerek kendi istediğiniz sütunların rengini değiştirebilirsiniz.

!!CB!! 173
On SAM_CreateComplete
Call SalSendClassMessage ( SAM_CreateComplete, wParam, lParam )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar1, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar2, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar3, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar4, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar5, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colsAciklama, COLOR_LightGreen )
On PM_DataSourcePopulate
Call SalSendClassMessage ( PM_DataSourcePopulate, wParam, lParam )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar1, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar2, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar3, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar4, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colnMiktar5, COLOR_LightGreen )
Call XSalTblSetColumnBackColor( tbwUzmarGunYmk.colsAciklama, COLOR_LightGreen )

27 Nisan 2009 Pazartesi

Centura ekranlarımıza makyaj yapalım.

Pekçok yazılımda kullanılan GUI tekniklerinden, grid sutun/satırlarının renklendirilmesi ve TAB yerine ENTER kullanımı, hem kullanıcı eğitimleri hem de kullanım açısından avantajlar yaratmaktadır. Sonraki makalede TAB yerine ENTER tuşunun kullanılması ve centura tablewindow sutununun renklendirmesi konularını anlatacağım. Bu teknikler kullanılarak hazırlanmış form örneği aşağıdadır.

17 Nisan 2009 Cuma

LOV icin filtreleme örneği

cColumn altındaki action alanına aşağıdakine benzer
kod yazılarak lov un filtrelenmesi sağlanabilir.

On PM_DataItemLovUserWhere
...Return SalHStringToNumber("ALANADINEYSEO='biseybisey'")

'biseybisey' yerine :i_hWndFrame.frmTRHAKTEVZI.tblDetail.coldDated
gibi bir referans ile örneğin bir table veya
formdan data alarak lov u filtrelemek te mümkündür.

burada ALANADINEYSEO, LOV a temel olan view deki
fieldname i temsil etmektedir.

Bir Centura penceresini, başka bir pencereden belirli bir kaydı seçerek açma

Bir ekrandan diğerine, parametre
aktararak geçiş, kullanıcıya hız kazandıran bir opsiyondur.
Bu makalede centurada bunun nasıl yapıldığına
ilişkin bir örnek uygulama inceleyeceğiz.

Örneğimiz nasıl çalışır?
---------------------
Parametre göndererek açmak istediğimiz formun adı X olsun.

Önce global bir değişken tanımlıyoruz.
Sonra X formunu açan window, belirli bir durumda
(Örn. içindeki bir buton tıklanılınca) bu global
değişkeni set ediyor ve X formunu açıyor.
X formu kendi açılış olayında da bu parametre dolu mu acaba diye
kontrol ediyor. Eğer doluysa kayıtlarımızı bu
parametreye göre filtreliyoruz.

Adım adım anlatmak gerekirse...


*******1************************
Formların üzerindeki bölgede gerekli global değişken tanımlanır.

variables
------------
!!CB!! 223
String: __g_sGecici



*******1************************


*******2************************


Açılacak forma aşağıdaki koda benzer kod eklenir. Bu forma X formu diyelim.

variables
------------
!!CB!! 118
String: sGeciciSql


Actions
------------
!!CB!! 173
On SAM_CreateComplete
If __g_sGecici != STRING_Null
Set sGeciciSql = "dagitim_no = '" || __g_sGecici || "'"
Call SalSendMsg(
hWndForm,
PM_DataSourceUserWhere, METHOD_Execute,
SalHStringToNumber( sGeciciSql )
)
Call SalSendMsg( hWndForm, PM_DataSourcePopulate, METHOD_Execute, 0 )
Call SalSendClassMessage ( SAM_CreateComplete, wParam, lParam )
On SAM_Close
Set __g_sGecici = STRING_Null
Call SalSendClassMessage ( SAM_Close, wParam, lParam )

*******2************************

*******3************************
X formunu açacak forma aşağıdaki kod eklenir.

Actions
------------
!!CB!! 139
Set __g_sGecici = tbwUzmarDokDagitim.colsDagitimNo
Call SalCreateWindow( 'frmUzmarDokDagitim', hWndMDI )


*******3************************

8 Nisan 2009 Çarşamba

Table window-kayıtlar arasında dolaşma ve bir kolona focus örneği

Sonraki kayıt ve belirli bir sütuna focus örneği.
*************************************************
If tbwUzmarGunYmk.DataContextNext( METHOD_Inquire )
...Call tbwUzmarGunYmk.DataContextNext( METHOD_Execute )
...Set nGecici = SalTblQueryContext ( tbwUzmarGunYmk )
...Call SalTblSetFocusCell ( tbwUzmarGunYmk, nGecici, colnMiktar1, 0, 1 )

tbwUzmarGunYmk : table window ismi
nGecici : number türündeki değişken. tbwUzmarGunYmk a ait "Variable" tabında
tanımlanmış olmalıdır.
colnMiktar1 : focus olunacak kolon.

SalTblQueryContext ( tbwUzmarGunYmk ) bize üzerinde bulunduğumuz
satır/row numarasını döndürmektedir.

Burada eğer varsa sonraki satıra hareket ediliyor ve oradaki
colnMiktar1 isimli kolon seçiliyor. ileri, geri,sonkayıt,ilkkayıt
a gitme işlemleri için kullanılabilecek fonksiyon listesi aşağıdadır.

DataContextFirst --ilk kayıt
DataContextLast --son kayıt
DataContextNext --sonraki kayıt
DataContextPrevious --önceki kayıt

ENTER tuşu da TAB gibi davransın istiyorum. Nasıl yaparım?

Bu iş için aşağıdakine benzeyen bir kod, tablewindow kolonunun action una yazılarak kullanılabilir. Burada yapılan kısaca, ENTER e basıldığı anda forma
"TAB a basıldı" mesajının gönderilmesinden ibarettir.

On WM_CHAR
...If (( wParam = VK_Tab ) OR (wParam = VK_Enter))
......Call SalSendMsg ( colnMiktar1, WM_KEYDOWN, VK_Tab, 0 )

Form açılırken bir edit box içine bir değer nasıl girilir?

On SAM_Create
...Set df1 = SalFmtFormatDateTime ( SalDateCurrent() , 'dd.MM.yyyy' )
...Call SalSendClassMessage ( SAM_Create, wParam, lParam )

Bu örnek kod ile, form açılışında, "df1" isimli edit box(cDataField) içerisine çalışılan bilgisayardaki tarih bilgisi kopyalanmaktadır. Buradaki
SalFmtFormatDateTime fonksiyonu, parametre olarak verilen date değerini verilen
kriterlere göre formatlamaktadır.
Sonuçta df1 in içerdiği değer "07.04.2009" gibi string bir değer olacaktır.

"Call SalSendClassMessage ( SAM_Create, wParam, lParam )" satırı
inheritance ile ilgilidir. cDataField classında da On SAM_Create
olayında yapılacak işler belirlidir. Eğer bu satırı yazmaz isek
ata sınıfa ait On SAM_Create olay kodları çalışmayacaktır.