Renk bilgisi içeren uzun tamsayının Kırmızı, Yeşil, Mavi renklere ayrılması.
f_renkayir fonksiyonu:
======================
$PBExportHeader$f_renkayir.srf
global type f_renkayir from function_object
end type
forward prototypes
global function integer f_renkayir (long a_renk, ref integer a_kirmizi, ref integer a_yesil, ref integer a_mavi)
end prototypes
global function integer f_renkayir (long a_renk, ref integer a_kirmizi, ref integer a_yesil, ref integer a_mavi);if isnull(a_renk) or a_renk < 0 then return -1
a_mavi = truncate(a_renk / (256 * 256), 0)
a_yesil = truncate((a_renk - (a_mavi * 256 * 256)) / 256, 0)
a_kirmizi = a_renk - (245 * 256 * a_mavi + 256 * a_yesil)
return 0
end function
25 Aralık 2009 Cuma
Datawindow kolonunun en büyük değerini almak
Evaluate fonksiyonu kullanılarak datawindow kolonunun en yüksek değerini bulabliriz.
f_dw_mak fonksiyonu:
====================
$PBExportHeader$f_dw_mak.srf
global type f_dw_mak from function_object
end type
forward prototypes
global function long f_dw_mak (datawindow a_dw, string a_kolon)
end prototypes
global function long f_dw_mak (datawindow a_dw, string a_kolon);
string ls_deger
if isnull(a_dw) or not isvalid(a_dw) then return 0
if a_dw.rowcount() = 0 then return 0
if isnull(a_kolon) or trim(a_kolon) = "" then return 0
if not isnumber(a_dw.describe(a_kolon + ".ID")) then return 0
ls_deger = a_dw.describe("evaluate('max(if(isnull(" + a_kolon + "), 0, " + a_kolon + "))', 1)")
if not isnumber(ls_deger) then return 0
return long(ls_deger)
end function
f_dw_mak fonksiyonu:
====================
$PBExportHeader$f_dw_mak.srf
global type f_dw_mak from function_object
end type
forward prototypes
global function long f_dw_mak (datawindow a_dw, string a_kolon)
end prototypes
global function long f_dw_mak (datawindow a_dw, string a_kolon);
string ls_deger
if isnull(a_dw) or not isvalid(a_dw) then return 0
if a_dw.rowcount() = 0 then return 0
if isnull(a_kolon) or trim(a_kolon) = "" then return 0
if not isnumber(a_dw.describe(a_kolon + ".ID")) then return 0
ls_deger = a_dw.describe("evaluate('max(if(isnull(" + a_kolon + "), 0, " + a_kolon + "))', 1)")
if not isnumber(ls_deger) then return 0
return long(ls_deger)
end function
Etiketler:
datawindow,
kolon,
powerbuilder
Birden fazla mantıksal ifadenin sadece bir tanesinin doğru olmasının aranması
Elimizde birden fazla mantıksal değer var ve biz sadece bir tanesinin doğru olması şartını arıyoruz. f_1true fonksiyonu array olarak gönderilen mantıksal fonksiyonların sadece bir tanesi doğru, diğerleri yanlış ise doğru (true), diğer durumlarda yanlış (false) gönderir. Array olmayan değişkenleri bu fonksiyon ile kontrol etmek için {} içinde gönderin.
Örnek: cbx_1, cbx_2, cbx_3, cbx_4 checkbox'ların sadece bir tansesinin işaretli olmasını kontrol etmek istiyoruz:
boolean lb_deger
lb_deger = f_1true({cbx_1.checked, cbx_2.checked, cbx_3.checked, cbx_4.checked})
şeklinde kontrol edebiliriz.
f_1true fonksiyonu:
===================
$PBExportHeader$f_1true.srf
global type f_1true from function_object
end type
forward prototypes
global function boolean f_1true (boolean a_arg[])
end prototypes
global function boolean f_1true (boolean a_arg[]);
int li_sira
boolean lb_deger = false
for li_sira = 1 to upperbound(a_arg)
if lb_deger and a_arg[li_sira] then return false
lb_deger = a_arg[li_sira] or lb_deger
next
return lb_deger
end function
Örnek: cbx_1, cbx_2, cbx_3, cbx_4 checkbox'ların sadece bir tansesinin işaretli olmasını kontrol etmek istiyoruz:
boolean lb_deger
lb_deger = f_1true({cbx_1.checked, cbx_2.checked, cbx_3.checked, cbx_4.checked})
şeklinde kontrol edebiliriz.
f_1true fonksiyonu:
===================
$PBExportHeader$f_1true.srf
global type f_1true from function_object
end type
forward prototypes
global function boolean f_1true (boolean a_arg[])
end prototypes
global function boolean f_1true (boolean a_arg[]);
int li_sira
boolean lb_deger = false
for li_sira = 1 to upperbound(a_arg)
if lb_deger and a_arg[li_sira] then return false
lb_deger = a_arg[li_sira] or lb_deger
next
return lb_deger
end function
Bir datawindow'dan diğerine değerleri kopyalamak.
Bir datawindow'un aktif satırından diğer datawindow'un aktif satırına değerleri kopyalayan f_dw_copy fonksiyonu. Değerler dw_source datawindow'dan dw_target datawindow'a kopyalanır. source_column ve target_column belirtilirse sadece bu iki kolon arasında değer aktarılır, kolonların belirtilmemesi durumunda iki datawindow'da sadece adları eşleşen kolonlarda değerler kopyalanır.
f_dw_copy kaynak kod:
=====================
$PBExportHeader$f_dw_copy.srf
global type f_dw_copy from function_object
end type
forward prototypes
global function integer f_dw_copy (ref datawindow dw_source, ref datawindow dw_target, string source_column, string target_column)
end prototypes
global function integer f_dw_copy (ref datawindow dw_source, ref datawindow dw_target, string source_column, string target_column);/* dw_source datawindow daki tüm kolonların değerini
dw_target datawindow daki eşleşen kolonlara kopyalar.
source_column belirtilir ise sadece verilen isimdeki kolonu kopyalar. */
string ls_names, ls_object, ls_name, ls_type
if dw_source.rowcount() = 0 or dw_target.rowcount() = 0 then return -1
if source_column = '' or isnull(source_column) then
ls_names = dw_source.Describe ("datawindow.objects")
else
ls_names = source_column
end if
Do
ls_object = f_get_token (ls_names, "~t")
if dw_source.describe(ls_object + ".type") = "column" then
if target_column = '' or isnull(target_column) then
ls_name = ls_object
else
ls_name = target_column
end if
if dw_target.describe(ls_name + ".type") = "column" then
ls_type = mid(dw_source.describe(ls_object + ".coltype"),1,5)
choose case ls_type
case "char("
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemstring(dw_source.getrow(),ls_object))
case "numbe", "long", "real", "ulong"
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemnumber(dw_source.getrow(),ls_object))
case "decim"
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemdecimal(dw_source.getrow(),ls_object))
case "datet"
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemdatetime(dw_source.getrow(),ls_object))
case "date"
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemdate(dw_source.getrow(),ls_object))
case "time"
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemdatetime(dw_source.getrow(),ls_object))
end choose
end if
end if
Loop Until ls_names = ""
dw_target.accepttext()
return 0
end function
f_dw_copy kaynak kod:
=====================
$PBExportHeader$f_dw_copy.srf
global type f_dw_copy from function_object
end type
forward prototypes
global function integer f_dw_copy (ref datawindow dw_source, ref datawindow dw_target, string source_column, string target_column)
end prototypes
global function integer f_dw_copy (ref datawindow dw_source, ref datawindow dw_target, string source_column, string target_column);/* dw_source datawindow daki tüm kolonların değerini
dw_target datawindow daki eşleşen kolonlara kopyalar.
source_column belirtilir ise sadece verilen isimdeki kolonu kopyalar. */
string ls_names, ls_object, ls_name, ls_type
if dw_source.rowcount() = 0 or dw_target.rowcount() = 0 then return -1
if source_column = '' or isnull(source_column) then
ls_names = dw_source.Describe ("datawindow.objects")
else
ls_names = source_column
end if
Do
ls_object = f_get_token (ls_names, "~t")
if dw_source.describe(ls_object + ".type") = "column" then
if target_column = '' or isnull(target_column) then
ls_name = ls_object
else
ls_name = target_column
end if
if dw_target.describe(ls_name + ".type") = "column" then
ls_type = mid(dw_source.describe(ls_object + ".coltype"),1,5)
choose case ls_type
case "char("
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemstring(dw_source.getrow(),ls_object))
case "numbe", "long", "real", "ulong"
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemnumber(dw_source.getrow(),ls_object))
case "decim"
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemdecimal(dw_source.getrow(),ls_object))
case "datet"
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemdatetime(dw_source.getrow(),ls_object))
case "date"
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemdate(dw_source.getrow(),ls_object))
case "time"
dw_target.setitem(dw_target.getrow(),ls_name, dw_source.getitemdatetime(dw_source.getrow(),ls_object))
end choose
end if
end if
Loop Until ls_names = ""
dw_target.accepttext()
return 0
end function
Etiketler:
datawindow,
powerbuilder
PowerBuilder Notları'na Başlarken
PowerBuilder çalışmalarımda karşılaştığım porblemlerden bulduğum çıkış yollarını ve ürettiğim PowerBuilder nesnelerini bu blogda anlatmaya ve paylaşmaya çalışacağım. Çözümlerin üretilmesinde yardımcı olmak isteyen arkadaşlar, karşılaştıkları problemleri paylaşır ise ortak bir çözüm havuzu oluşabilir.
Etiketler:
powerbuilder
Kaydol:
Kayıtlar (Atom)