日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

60个数据窗口技巧(转)

發布時間:2023/12/13 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 60个数据窗口技巧(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

60個數據窗口技巧

1.如何讓存儲文件目錄的列,顯示圖片? 答:選擇對應的columndisplay as picture屬性為true
 
2
、如何復制grid類型的所選擇的行的數據到系統剪切板?
答:string ls_selected
ls_selected=dw_1.Object.DataWindow.Selected.Data
clipboard(ls_selected)
3
、如何復制graph風格的datawindow中的圖形到剪切板?
答:dw_1.clipbord("gr_1")
4
、如何設置的DW底色?
DWeditsource中改變color的值
5
、如何將Grid風格改成自由格式?
DWeditsource中將processing=11改為0
6
、要新建一個表A但風格和現有表格B風格一樣,怎么將A表快速設置成表B風格?
復制BC,在C表的DW中的editsource中將表名和字段名改成A表的,即可
7
、如何實現gird風格的datawindow的多欄表頭?
答:添加 textheader帶區,并設置band屬性為foreground保存,edit source 修改textxwidth屬性表達式如下:
x="100~t integer(describe('firstcol.x')" width="100~tinteger(describe('lastcol.x')) - integer(describe('firstcol.x')) +integer(describe('lastcol.width'))
8
、如何過濾dddw編輯風格的顯示值為指定值的記錄?
答:dw_1.setfilter("lookupdisplay('column_name')='"+ls_display_value_your+"'")
????? dw_1.filter()
9
、如何設置datawindow的某一列為空?
答:string ls_temp[]
??????? setnull(ls_temp)
??????? dw_1. O B J E C T.columnname.primary.current=ls_temp
10
、如何設置datawindow的單雙行不同顏色間隔?
答:在detail帶區的color屬性表達式中寫上if(mod(getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0)),如果是當前行以第三種顏色表示,表達式如下:if(getrow()=current(),rgb(255,0,0),if(mod(getrow(),2)=1 ,rgb(0,0,255),rgb(0,255,0)))
11
、如何獲取指定名稱的datawindow O B J E C T?
答:DWObject ldwo_use,ldwo_abc
?????? ldwo_use = dw_1.Object
?????? ldwo_abc = ldwo_use.__get_attribute("t_1",FALSE)//t_1
datawindowtext對象的名稱
12
、如何使用datawindow的查詢模式?
答:dw_1.Object.DataWindow.QueryMode='yes'datawindow改變為查詢模式后,接收用戶的輸入,再使用一下代碼獲取結果:
???? dw_1.accepttext()
???? dw_1.retrieve()
13
、如何縮放datawindow的打印大小?
答:dw_1. O B J E C T.datawindow.zoom=150 or dw_1. O B J E C T.datawindow.zoom=75
14
、如何在已過濾后的數據基礎上對datawindow進行過濾?
答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filter)
?????? dw_1.filter()
15
、如何在datawindow中顯示動態時間?
答:建立一個計算域,表達式為string(datetime(today(),now()),'yyyymmdd hhmmss'),同時設置datawindow的屬性dw_1.Object.DataWindow.Timer_Interval=500
16
、如何讓帶用title bardatawindow控件的標題欄誠活動窗口的顏色?
答:外部函數定義:
funcation logn SetActiveWindow(long hwnd )? Library "user32.dll"
datawindow
控件的clicked事件代碼:
setactivewindow(handle(this))
17
、如何設置datawindow的當前行指示圖標?
答:在datawindow中建立一個計算列,expression'',并將該計算列移動為datawindow的第一個列,在datawindow控件的
rowfocuschanged
事件中寫入代碼:
SetRowFocusIndicator(hand!)
setrowfucsindicator(p_1)//p_1為窗口上的picture控件名
18
、如何通過代碼打開dddw
答:定義外部函數引用聲明
SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) LIBRARY "user32.dll"
代碼如下:
[constant integer VK_F4 = 115
dw_1.SetFocus()
dw_1.SetColumn( "dept_head_id" ) //
設置當前dddw
keybd_event( VK_F4,0,0,0 )? //
按下F4
keybd_event( VK_F4,0,2,0 )? //
釋放F4
19
、如何打印datawindow的內容到文件中?
答: dw_1. O B J E C T.datawindow.print.fileName ="c:\temp.prn"
??????? dw_1.print()
20
、如何設置dddw的初始值?
答:dw_1. O B J E C T.columnname.Initial="your_initial_value"
21
、如何只顯示不同的數據?
答:dw_1.filter("isnull(columnname[-1]) and columnname<>columnname[-1]")
?????? dw_1.filter()
22
、如何讓帶有title bardatawindow不可以移動?
答:在datawindow的自定義事件ue_nchittest(pbm_nchittest)中寫入如下代碼:
? return 1
23
、如何在N-UP顯示風格中建立基于第N欄中的列的計算列?
答:如column有兩列,numberprice ,并顯示為兩欄,則第一欄的cost計算列的expressionnumber*price,第二欄的cost_1計算列的expressionnumber[1]*price[1]
24
、如何清空ddlbedit.codetable中項目?
答:dw_1.Object.columnname.Values=""
25
、如何實現指定的column的字體旋轉90度?
答:dw_1. O B J E C T.columnname.font.Escapement ="900"
26
、如何獲取datawindowsql代碼?
答: 可以通過以下四種方法獲取sql代碼:
??????? string szselect
??????? szselect=dw_1.describe("datawindow.table.select")
??????? szselect=dw_1.describe("datawindow.table.sqlselect")
??????? szselect=dw_1.describe("datawindow.table.select.attribute")
??????? szselect=dw_1.getsqlselect()?????
27
、如何獲取datawindow對象占有的虛擬存儲的容量?
答:使用datawindow.storage屬性
????
舉例:在datawindow控件的retrieverow事件中,寫如如下代碼:
???????????? long lstorage
???????????? lstorage=long(dw_1. O B J E C T.datawindow.storage)
???????????? if lstorage>50000 then dbcancel()
28
、如何控制打印橫向:
dw_control. O B J E C T.datawindow.print.orientation= 1

29、如何進行預覽:
dw_control. O B J E C T.datawindow.print.preview = "yes"
30
、如何連續在同一張紙打印兩個數據窗口?
答:dw_1. O B J E C T.datawindow.print.filename="temp.prn"
?????? dw_2. O B J E C T.datawindow.print.filename="temp.prn"
?????? dw_1.print()
?????? dw_2.print()
31
、如何將pb9.0 datawindow轉化為pb 8.0版本的datawindow?
答:edit source release 9;改為release 8;
??????
并刪除以下內容:
?????? print.printername=""
?????? print.canusedefaultprinter=yes
?????? print.cliptext=no print.overrideprintjob=no
??????? hidegrayline=no
???????? encodeselflinkargs="1"
???????? export.xml(headgroups="1" includewhitespace="0" metadatatype=0 savemetadata=0 )
??????? import.xml()
??????? export.pdf(method=0 distill.custompostscript="0" xslfop.print="0" )
32
、如何設置datawindow分組后每個分組中的記錄號?
答:建立一個計算列,expression getrow() - first(getrow() for group 1)+1
33
、如何實現在datawindow中只有新增的行,才可以編輯?
答:在所有的columnprotect屬性表達式中寫入以下表達式:
if(isrownew(),'0','1')
34
、保存datawindow數據到excel
//? ...? Init? docname?
//? ...? GetFileOpenName? or? any? other? method?

if? dw_1.SaveAs(docname,? HTMLTable!,? True)? =? -1? then?
?????? MessageBox("Warning",? "Unable? to? export? data.? Error? writing? to? file!",? Exclamation!)?
?????? return?
end? if?


//? Convert? HTML? file? to? Excel? native? format?
OLEObject? excel?
excel? =? CREATE? OLEObject?
if? excel.ConnectToObject(docname)? =? 0? then?
?????? excel.application.DisplayAlerts? =? FALSE?
?????? excel.application.workbooks(1).Parent.Windows(excel.application.workbooks(1).Name).Visible? =? True?
?????? excel.application.workbooks(1).saveas(docname,? 39)?
?????? excel.application.workbooks(1).close()?
end? if?

DESTROY? excel?
//? done???

35、除了循環以外,有沒有更好的方法統計數據窗口中處于選中狀態的行數?
一般習慣于使用循環來統計數據窗口中處于選中狀態的行數,有沒有更好的方法??

其實此問題在應用上用處不大,討論一下,活躍一下思維還是有好處的。?

方法一:?
long? ll_Selected?

ll_Selected? =? long(dw_1.describe("evaluate('sum(? if(IsSelected(),? 1,? 0)? for? all)',1)"))?

方法二:???
long? ll_Selected?

ll_Selected? =? long(dw_1.describe("evaluate('count(IsSelected()? for? all)',1)"))

方法三:
upperbound(dw_1.Object.Data.Selected)
36
、問:怎么讓PB只打印當前記錄,是用Free格式制作的數據窗口!

答:?
DataStore? ldt_temp?
long? ll_Row? ,? ll_Rows?
ll_Rows? =? dw_XX.Rowcount()?
If? ll_Rows? =? 0? Then? GoTo? the_end?
If? ll_Rows? =? 1? Then?
?????????? dw_XX.Print()?
?????????? GoTo? the_end?
End? if?
dw_XX.SetRedraw(False)?
ldt_temp? =? Create? DataStore?
ldt_temp.DataObject? =? dw_XX.DataObject?
ll_Row? =? dw_XX.GetRow()?
dw_XX.RowsMove(1? ,? ll_Rows? ,? Primary!? ,? ldt_temp? ,? 1? ,? Primary!)?
ldt_temp.RowsMove(ll_Row? ,? ll_Row? ,? Primary!? ,? dw_XX? ,? 1? ,? Primary!)?
dw_XX.Print()?
dw_XX.RowsMove(1? ,? 1? ,? Primary!? ,? ldt_temp? ,? ll_Row? ,? Primary!)?
ldt_temp.RowsMove(1? ,? ll_Rows? ,? Primary!? ,? dw_XX? ,? 1? ,? Primary!)?
Destroy? ldt_temp?
dw_XX.SetRedraw(True)?
the_end:?
//
只用將上述腳本拷入到打印部分即可,dw_XX為被打印的free型數據窗口,該方法可保證dw_XX中的數據在打印前后包括sort等屬性均不發生任何改變,但效率較低,不宜用在數據量太大的數據窗口中,當然,考慮到打印本身速度就比較慢,所以3000行數據是可以采用這種方法并讓用戶接受的。若在同一窗口上存在與dw_XX共享的grid數據窗口并且與dw_XX同時顯示,則需要與dw_one一起SetRedraw()


37
、怎樣將數據窗口(free格式)中的內容轉成word文檔
答:給你兩個函數:?
(1)
、輔助函數?
$PBExportHeader$f_cncharnum.srf?
$PBExportComments$
得到字符串中漢字或者雙字節的個數?
global? type? f_cncharnum? from? function_ O B J E C T?
end? type?

forward? prototypes?
global? function? integer? f_cncharnum? (string? aString)?
end? prototypes?

global? function? integer? f_cncharnum? (string? aString);?
//
函數名:? f_cncharnum?
//
用途:? 返回一個字符串中漢字的個數?
//
輸入:? aString? -? string,? 給定的字符串?
//
返回值:? li_num? -? Integer,? 給定的字符串中漢字的個數?
//
注意:? 1.? 此方法基于漢字的國標漢字庫區位編碼的有效性,不符合此編碼的系統此函數無效!?
//? 2.?
若漢字串含有非漢字字符,如圖形符號或ASCII,則這些非漢字字符將保持不變.?
//
例如:? li_ret? =? f_cncharnum("擺渡人ferryman")? li_ret? =? 3?

string? ls_ch? //臨時單元?
string? ls_SecondSecTable? //
存放所有國標二級漢字讀音?
integer? li_num? =? 0? //
返回值?
integer? i,j?

For? i? =? 1? to? Len(aString)?
ls_ch? =? Mid(aString,i,1)?
If? Asc(ls_ch)? >=? 128? then? //
是漢字?
li_num++?
i? =? i+1?
End? if?
Next?

Return? li_num?

end? function?

---------------------------------------------------------------?

(2)、轉到WORD?
$PBExportHeader$f_outputtoword_new.srf?
global? type? f_outputtoword_new? from? function_ O B J E C T?
end? type?

forward? prototypes?
global? function? integer? f_outputtoword_new? (datawindow? adw)?
end? prototypes?

global? function? integer? f_outputtoword_new? (datawindow? adw);?
//
函數名:f_outputtoword_new?
//
輸入:? adw? -? datawindow,指定的數據窗口?
//
返回值:? Integer?
constant? integer? ppLayoutBlank? =? 12?
OLEObject? ole_ O B J E C T?
ole_ O B J E C T? =? CREATE? OLEObject?

integer? li_ret?

li_ret? =? ole_ O B J E C T.ConnectToObject("","word.application")?
IF? li_ret? <>? 0? THEN?
//
如果Word還沒有打開,則新建。?
li_ret? =? ole_ O B J E C T.ConnectToNewObject("word.application")?
if? li_ret? <>? 0? then?
MessageBox('OLE
錯誤','OLE無法連接!錯誤號:'? +? string(li_ret))?
return? 0?
end? if?
ole_ O B J E C T.Visible? =? True?
END? IF?

long? ll_colnum,ll_rownum?
constant? long? wdWord9TableBehavior? =? 1?
constant? long? wdAutoFitFixed? =? 0?
constant? long? wdCell? =? 12?
string? ls_value?
pointer? oldpointer?

oldpointer? =? SetPointer(HourGlass!)?

string? ls_ O B J E C Ts,ls_obj,ls_objs[],ls_objtag[]?
long? ll_pos,ll_len,ll_num? =? 0?

ls_ O B J E C Ts? =? trim(adw.Describe('datawindow.Objects'))?

do? while? (pos(ls_ O B J E C Ts,"~t")? >? 0)?
ll_pos? =? pos(ls_ O B J E C Ts,"~t")?
ll_len? =? ll_pos? -? 1?
ls_obj? =? left(ls_ O B J E C Ts,ll_len)?
if? (adw.Describe(ls_obj? +? '.type')? =? 'column'? or? &?
adw.Describe(ls_obj? +? '.type')? =? 'compute')? and? &?
(adw.Describe(ls_obj? +? '.band')? =? 'detail')? and? (ls_obj? <>? "asd")? then?
ll_num? +=? 1?
ls_objs[ll_num]? =? ls_obj?
ls_objtag[ll_num]? =? adw.Describe(ls_obj? +? '.tag')?
end? if?
ls_ O B J E C Ts? =? right(ls_ O B J E C Ts,len(ls_ O B J E C Ts)? -? ll_pos)?
loop?

//得到數據窗口數據的列數與行數(行數應該是數據行數? +? 1?
ll_colnum? =? ll_num?
ll_rownum? =? adw.rowcount()? +? 1?

ole_ O B J E C T.Documents.Add()?
ole_ O B J E C T.ActiveDocument.Tables.Add(ole_ O B J E C T.Selection.Range,? ll_rownum,? ll_colnum)?

string? ls_colname?
integer? i,j,k?

for? i? =? 1? to? ll_colnum?
//
得到標題頭的名字?
ls_value? =? ls_objtag?
ole_ O B J E C T.Selection.TypeText(ls_value)?
for? k? =? 1? to? f_cncharnum(ls_value)?
ole_ O B J E C T.Selection.TypeBackspace()?
next?
ole_ O B J E C T.Selection.MoveRight(wdCell)?
next?

adw.setredraw(false)?
ole_ O B J E C T.Selection.MoveLeft(wdCell)?
string? column_name?
for? i? =? 2? to? ll_rownum?
for? j? =? 1? to? ll_colnum?
column_name? =? ls_objs[j]?
if? adw.Describe(column_name? +? '.type')? =? 'column'? then?
ls_value? =? adw.Describe("Evaluate('LookupDisplay("+column_name+")',"+string(i? -? 1)+")")?
end? if?
if? adw.Describe(column_name? +? '.type')? =? 'compute'? then?
ls_value? =? adw.Describe("Evaluate('"? +? adw.Describe(column_name? +? '.expression')? +? "',"+string(i? -? 1)+")")?
end? if?
ole_ O B J E C T.Selection.MoveRight(wdCell)?
ole_ O B J E C T.Selection.TypeText(ls_value)?
//for? k? =? 1? to? f_cncharnum(ls_value)?
//ole_ O B J E C T.Selection.TypeBackspace()?
//next?
next?
next?
adw.setredraw(true)?

constant? long? wdFormatDocument? =? 0?

SetPointer(oldpointer)?
//
保存新建的文檔?
if? messagebox("
保存","文檔已經成功完成,是否保存?",Question!,YesNo!)? =? 1? then?
string? docname,? named?
integer? value?

value? =? GetFileSaveName("選擇文件",docname,? named,? "DOC","Doc? Files? (*.DOC),? *.DOC")?

IF? value? =? 1? THEN?
ole_ O B J E C T.ActiveDocument.SaveAs(docname,? 0,False,"",True,"",False,False,False,? False,False)?
end? if?

end? if?
//
斷開OLE連接?
Ole_Object.DisConnectObject()?
Destroy? Ole_Object?

return? 1?
end? function?

38、字段如何自動換行的同時且自動高度?
答:將數據窗口中相應列的auto? horz? scroll? 為不選中,選中autosize? height?
detailautosize? height選中。在數據窗口retrieve? 后調用下面函數即可?

uf_set_text(datawindow? adw_content,string?????????
?????????????????????????????????????? as_columns,boolean,ab_ignoreblank)?
/*************************************************************?
describe:?
在數據窗口adw_content中,在as_columns中包含的列中插入空格?
???? args:?
?????????????????? as_columns???
要操作的多個列,列間用逗號隔開?
*************************************************************/?
if? (not? isvalid(adw_content))? or? isnull(as_columns)? or? len(as_columns)<1? or? isnull(ab_ignoreblank)? then? return? -1?

n_cst_string? lnv_string?
string? ls_column[]? ,? ls_width? ,as_source,as_replaced? ,ls_temp?
int? li_upperbound? ,? li_width? ,? li_column? ,? li_fontWidth,? li_counter?
long? ll_rowcount? ,? ll_row? ,? ll_totalstep?
int? li_yield?

lnv_string.of_parsetoarray(as_columns,',',ls_column)?
li_upperbound? =? upperbound(ls_column)?
ll_rowcount? =? adw_content.rowcount()?
if? li_upperbound<1? or? ll_rowcount<1? then? return? -1?

openwithparm(w_waiting,this)?
ib_cancel? =? false?
iw_frame.enabled? =? false?
ll_totalstep? =? ll_rowcount? *? li_upperbound?
w_waiting.uf_register(ll_totalstep)?
for? li_column? =? 1? to? li_upperbound?
?????????? ls_width? =? adw_content.describe(ls_column[li_column]+".width")?
?????????? li_width? =? integer(ls_width)?
?????????? if? ls_width='!'? or? ls_width='?'? or? li_width=0? then?
?????????????????????? continue?
?????????? end? if?
?????????? //ls_temp? =? adw_content.describe(ls_column[li_column]+".Font.property? {? =? 'width'? }")???
?????????? //messagebox(ls_column[li_column]+".Font.property? {? =? 'width'? }",ls_temp)?
?????????? //return? 1?
?????????? li_fontwidth? =? 27?
?????????? li_counter? =? li_width? /? li_fontWidth?
???????????
?????????? for? ll_row=1? to? ll_rowcount?
?????????????????????? if? ib_cancel? then???
?????????????????????????????????? iw_frame.enabled? =? true?
?????????????????????????????????? return? 0??? //pressed? cancel? button?
?????????????????????? end? if?
?????????????????????? as_source? =? adw_content.getitemstring(ll_row,ls_column[li_column])?
?????????????????????? as_replaced? =? uf_insertstring(as_source,li_counter,'? ',false)?
?????????????????????? if? as_replaced<>as_source? then?
?????????????????????????????????? adw_content.setitem(ll_row,ls_column[li_column],as_replaced)?
?????????????????????? end? if?
?????????????????????? w_waiting.uf_stepit()?????????????????????????
?????????? next?
next?
close(w_waiting)?
iw_frame.enabled? =? true?

return? 1?

39、如何動態外部創建數據窗口?
答:首先制作一個自己想動態得到的數據窗口,然后將該數據窗口導出,看看語法,這樣你就了解了這種數據窗口的生成語法了!???

---------------------------------------------------------------?

dw_1.create()?
可以參考幫助??? 以及??? srd文件(數據窗口導出文件)?
---------------------------------------------------------------?

動態數據窗創建原理及實現?

在實際應用中,經常需要根據用戶需求來動態創建數據窗,一般方法是這樣的。?

在一個window中加入一個數據窗控件,如dw_new,但是該數據窗沒有data?? O B J E C T,(空白的)?
就可以用以下語法來創建:?
dw_new.create(ls_syntax,ls_error)? //?
創建語法,錯誤信息?
ls_syntax
可以用以下三種方法來形成:?

一、動態由sql語法創建:?

//? 連接到pbexample數據庫?
string? ls_sql,ls_syntax,ls_error?
ls_syntax? =? 'select? *? from? department'?
ls_syntax? =? sqlca.SyntaxFromSQL(ls_sql,'style(type=grid)',ls_error)?
if? len(ls_error)? >0? then?
?????? messagebox('Error','SyntaxFromSQL? Error:~r'+ls_error)?
else?
?????? dw_new.create(ls_syntax,ls_error)?
?????????????? if? len(ls_error)? >0? then?
?????????????????????? MessageBox("Error",? "Create? have? these? errors:? ~r"? +? ls_error)?
?????????????? else?
?????????????????????? dw_new.settrans O B J E C T(sqlca)?
?????????????????????? dw_new.retrieve()?
?????????????? end? if?
end? if?

二、由另一個數據窗的syntax來創建?

string? ls_syntax,ls_error?
ls_syntax? =? dw_test.describe('datawindow.syntax')?
dw_new.create(ls_syntax,ls_error)?
if? ls_error? <>? ''? then?
?????? messagebox('Create? Error',ls_error)?
else?
?????? dw_new.settrans O B J E C T(sqlca)?
?????? dw_new.retrieve()?
end? if?

三、讀取psr文件來創建?

樣例?
string? ls_syntax,ls_error,ls_ret?
ls_ret? =? char(13)+char(10)? //
回車鍵?
int? li_fileNum?
long? li_length?
li_FileNum? =? FileOpen("efef.psr",Streammode!,? read!,? shared!,? Replace!)?

//? 以下是pb5的代碼?
if? li_filenum? >0? then?
?????? FileSeek(li_FileNum,? 158,? FromBeginning!)?
?????? li_length? =? fileRead(li_filenum,ls_syntax)?
end? if?
fileclose(li_filenum)?
if? li_length? =? 0? then? return?
ls_syntax? =? "release? 5;"+ls_ret+ls_syntax???

//截掉ls_syntax中的數據部分,5.0"sparse(names="dept_name?)??? "作為參考位置?
//6.0
html(作為參考位置?

long??? pos1,pos2?
pos1? =? pos(ls_syntax,'sparse(names="',1)?
pos2? =? pos(ls_syntax,'"',pos1? +16)?
ls_syntax? =? left(ls_syntax,pos1)? +? mid(ls_syntax,pos1? +1,pos2? -? pos1? +1)?

dw_New.create(ls_syntax,ls_error)?

if? ls_error? <>? ''? then?
?????? messagebox('Create? Error',ls_error)?
else?
?????? dw_new.settrans O B J E C T(sqlca)?
?????? dw_new.retrieve()?
end? if?

global? type? f_createextenddw? from? function_ O B J E C T?
end? type?

forward? prototypes?
global? function? string? f_createextenddw? (ref? datawindow? dw,? string? cols[])?
end? prototypes?

global? function? string? f_createextenddw? (ref? datawindow? dw,? string? cols[]);string? sql_dw_general,? sql_dw_columns_type,? sql_dw_headers_conf,? sql_dw_columns_conf,? ls_errors?
int? i?
long? ll_colcount?
string? ls_colnametype?
string? ls_colname,ls_coltype?
long? ll_pos?

ll_colcount? =? upperbound(cols)?

//generals?
sql_dw_general? =? "release? 8;"? &?
+? "datawindow(units=0? timer_interval=0? color=16777215? processing=0? print.documentname="? +? char(34)? +? ""? +? char(34)? +? "? print.orientation? =? 0? print.margin.left? =? 110? print.margin.right? =? 110? print.margin.top? =? 96? print.margin.bottom? =? 96? print.paper.source? =? 0? print.paper.size? =? 0? print.prompt=no? print.buttons=no? print.preview.buttons=no? )"? &?
+? "header(height=72? color="? +? char(34)? +? "536870912"? +? char(34)? +? "? )"? &?
+? "summary(height=0? color="? +? char(34)? +? "536870912"? +? char(34)? +? "? )"? &?
+? "footer(height=0? color="? +? char(34)? +? "536870912"? +? char(34)? +? "? )"? &?
+? "detail(height=84? color="? +? char(34)? +? "536870912"? +? char(34)? +? "? )"???


//
列及類型?
sql_dw_columns_type? =? "table("?
FOR? I=1? to? ll_colcount?
?????????? ls_colnametype? =? trim(cols)?
?????????? ls_colname? =? right(ls_colnametype,len(ls_colnametype)? -? 1)?
?????????? ls_coltype? =? left(ls_colnametype,1)?
?????????? choose? case? upper(ls_coltype)?
?????????????????????? case? 'C'?
?????????????????????????????????? ls_coltype? =? 'char(100)'?
?????????????????????? case? 'D'?
???????????????????????????? ls_coltype? =? 'date'?
?????????????????????? case? 'N'?
?????????????????????????????????? ls_coltype? =? 'decimal(6)'?
?????????????????????? case? else?
?????????????????????????????????? ls_coltype? =? 'char(100)'?????????????????????????????????????
?????????? end? choose?
//ls_coltype? =? 'char(100)'?
?????????? //
列及類型?
?????????? sql_dw_columns_type=? sql_dw_columns_type? +? "column=(type="? +ls_coltype+"? updatewhereclause=no? name="? +? ls_colname? +? "? dbname="? +? char(34)? +? ls_colname? +? char(34)? +? "? )? "?
?????
?????????? //
列標題?
?????????? sql_dw_headers_conf? =? sql_dw_headers_conf? +? "text(band=header? alignment="? +? char(34)? +? "2"? +? char(34)? +? "? text="? +? char(34)? +? ls_colname? +? char(34)? +? "? border="? +? char(34)? +? "6"? +? char(34)? +? "? color="? +? char(34)? +? "16711680"? +? char(34)? +? "? x="? +? char(34)? +? string(? ((i? -? 1)? *? 588)? +? 5)? +? char(34)? +? "? y="? +? char(34)? +? "4"? +? char(34)? +? "? height="? +? char(34)? +? "64"? +? char(34)? +? "? width="? +? char(34)? +? "574"? +? char(34)??????????? +? "??? name="? +? ls_colname? +? "_t??? font.face="? +? char(34)? +? "Arial"? +? char(34)? +? "? font.height="??????????? +? char(34)? +? "-10"? +? char(34)? +? "? font.weight="? +? char(34)? +? "400"? +? char(34)? +? "??? font.family="? +? char(34)? +? "2"? +? char(34)? +? "? font.pitch="? +? char(34)? +? "2"? +? char(34)? +? "? font.charset="? +? char(34)??????????? +? "0"? +? char(34)? +? "? background.mode="? +? char(34)? +? "2"? +? char(34)? +? "? background.color="? +? char(34)??????????? +? "12632256"? +? char(34)? +? "? )"?
?????
?????????? //
列屬性?
?????????? sql_dw_columns_conf? =? sql_dw_columns_conf? +? "column(band=detail? id="? +? string(i)? +? "? alignment="? +? char(34)? +? "1"? +? char(34)? +? "? tabsequence="? +? string(i)? +? "0? border="? +? char(34)? +? "2"? +? char(34)? +? "? color="? +? char(34)? +? "0"? +? char(34)? +? "? x="? +? char(34)? +? string(? ((i? -? 1)? *? 588)? +? 5)? +? char(34)? +? "? y="? +? char(34)? +? "4"? +? char(34)? +? "? height="? +? char(34)? +? "76"? +? char(34)? +? "? width="? +? char(34)? +? "579"? +? char(34)? +? "? format="? +? char(34)? +? "[general]"? +? char(34)? +? "??? name="? +? ls_colname? +? "? edit.limit=0? edit.case=any? edit.autoselect=yes? edit.autohscroll=yes??? font.face="? +? char(34)? +? "Arial"? +? char(34)? +? "? font.height="? +? char(34)? +? "-10"? +? char(34)? +? "? font.weight="? +? char(34)? +? "400"? +? char(34)? +? "??? font.family="? +? char(34)? +? "2"? +? char(34)? +? "? font.pitch="? +? char(34)? +? "2"? +? char(34)? +? "? font.charset="? +? char(34)? +? "0"? +? char(34)? +? "? background.mode="? +? char(34)? +? "1"? +? char(34)? +? "? background.color="? +? char(34)? +? "536870912"? +? char(34)? +? "? )"?

NEXT?

sql_dw_columns_type=? sql_dw_columns_type? +? "? )"?

sql_dw_columns_conf? =? sql_dw_columns_conf? +? "htmltable(border="? +? char(34)? +? "1"? +? char(34)? +? "? cellpadding="? +? char(34)? +? "0"? +? char(34)? +? "? cellspacing="? +? char(34)? +? "0"? +? char(34)? +? "? generatecss="? +? char(34)? +? "no"? +? char(34)? +? "? nowrap="? +? char(34)? +? "yes"? +? char(34)? +? ")"?

//MESSAGEBOX('',sql_dw_general? +? sql_dw_columns_type? +? sql_dw_headers_conf? +? sql_dw_columns_conf)?
dw.Create(sql_dw_general? +? sql_dw_columns_type? +? sql_dw_headers_conf? +? sql_dw_columns_conf? ,? ls_errors)?

return(ls_errors)?
end? function?

40、如何讓datawindowheade帶區r的內容只打印一次?
答:a、制作兩個數據窗口,第一個有表頭,第二個沒有。???
b
、用第一個有表頭的數據讀取數據庫中的數據???
c
、打印有表頭的數據窗口中的第一頁,記住結束行號???
d
、將從結束行號開始的所有數據復制到第二個數據窗口中???
e
、打印第二個數據窗口

41、交叉報表在retrieve后,其datawindow的寬度怎么獲得啊?
答://=============================?
//? [PUBLIC]? Function? wf_settitle_length?
? w_search_report? inherited? from? window?
//----------------------------?
//?
說明:設置表頭長度?
//----------------------------?
//???????????
參數1:[reference]? datawindow? adw_1?
//???????????????????????
說明:報表DW?
//--------------------------------------?
//?
返回:??????????? (INTEGER)? 成功返回1,不成功返回0?
//------------------------------------?
//?
作者:??????????? cwl??????????? 日期:? 2001.12.15?
//======================================?
Long?????????? Row?
String??? List?
string???? token[]?
String?????? tag_1?
Integer????? StartPos? =? 1,? EndPos,? Top,? i? =? 1? ,? index? =? 0???
//
取出DW中所有的對象存入token[]?
list? =? adw_1.Describe("datawindow. O B J E C Ts")?
EndPos??????????? =? pos(list,? '~t',? StartPos)?
Do? while? (? EndPos? >? 0? )?
?????????? token? =? Mid(list,? StartPos,? EndPos? -? StartPos)?
?????????? i? ++?
?????????? StartPos? =? EndPos? +? 1???
?????????? EndPos??????????? =? pos(list,? '~t',? StartPos)?
LOOP?
token? =? Mid(list,? StartPos)?
Top? =? UpperBound(token[])?

//找出最后一列?
string? ls_lastcol?
int? li_lastpos=0,li_thispos?
For? i? =? 1? to? Top?
?????????? CHOOSE? CASE? UPPER(adw_1.Describe(token? +? '.type'))?
?????????????????????? CASE? 'COLUMN',? 'COMPUTE'?
?????????????????????????????????? li_thispos? =? integer(adw_1.Describe(token? +? '.X'))?
?????????????????????????????????? if? li_thispos>=li_lastpos? then? //
這是目前最后一列?
?????????????????????????????????????????????? li_lastpos=li_thispos?
?????????????????????????????????????????????? ls_lastcol=token?
?????????????????????????????????? end? if???
?????????? end? choose?
NEXT?
//
設置表頭長度?
string? ls_change?
ls_change="800~tlong(describe('"+ls_lastcol+".x'))? +? long(describe('"+ls_lastcol? +".width'))??? +? 10"?
//messagebox('',ls_change)?
adw_1.modify('title.width="'+ls_change+'"')?

return? 1

42、如何在數據窗中得到自動高的列的高度?
答:desceibe("evaluate('RowHeight()',3)")? //獲得第三行的row的高度

42、如何使dw的列不可移動,不可調整列寬?
答:在datawindowcilcked事件寫?

if? row=0? then?
?????????? return? 1?
end? if

43.光標跳轉到數據窗口的某一行某一列
dw_1.scrolltorow(ll_row)
dw_1.setcolumn(ll_column)
 
44
如何使光標指向每頁第一行?  
long ll_firstrowonpage=long(dw_1.describe("datawindow.firstrowonpage")) dw_1.scrolltorow
ll_firstrowonpage) dw_1.setrow(ll_firstrowonpage) 45. Grid的窗口如何使第一列固定不動?  
選上data OBJECTHSplitScroll屬性
constructor事件中:
dw_1.Object.DataWindow.HorizontalScrollSplit=integer(dw_1.describe("#1.width")) //
第一列的寬度
scrollhorizontal事件中:
int i if pane = 1 then i = integer(this.OBJECT.datawindow.horizontalscrollposition2) if i < 1 or isnull(i) then return if scrollpos > 0 then?? this.OBJECT.datawindow.horizontalScrollPosition = 0 end if else i = integer(this.Object.DataWindow.HorizontalScrollSplit) if i < 1 or isnull(i) then return if i > scrollpos then?? this.OBJECT.datawindow.horizontalScrollPosition2 = i end if end if 46.
怎樣取子數據窗口的總列數 ll_column_count=integer(dwc.describe("datawindow.column.count"))?? //dwc為子窗口
47.
在數據窗口過濾以后,計算列值如何才能一起改變? dw_1.setfilter(filter_condition) dw_1.filter() dw_1.groupcalc() 48.怎么改變某一列的背景顏色?
dw_1.Modify("sno.background.mode=2" )
dw_1.Modify ( "sno.background.Color='255'" ) 49.
在數據窗口中如何delete選中的多行??????? Long ll_rows , ll_row
????? ll_rows=DW_1.RowCount()
????? for ll_row = ll_rows to 1 step -1
????? if dw_1.isSelected(ll_row) then
????? dw_1.DeleteRow(ll_row)
????? end if
????? next 50.
如何改變列的字體顏色,提醒用戶此列已做修改
  在列的Color屬性中,輸入如下表達式
?? IF (column_name < >column_name.Original, RGB(255, 0, 0), RGB(0, 0, 0))

51.數據窗口中限定某列不可編輯 DataWindowclicked事件中的方法也可以實現列的保護。若
某列不可更改,則可置r otect=0。即:
dw_1.modify("columnname.protect=0")
dw_1.modify("#"+string(number)+".protect=0")
若要將該列改為可更改,則置protect=1,:
dw_1.modify(:columnname.protect=1")
dw_1.modify("#"+string(number)+".protect=1")
此方法不影響Tab鍵的移動,用戶可以隨意拉動列,還可在應用過
程中自己決定哪一列可編輯,哪一列不可編輯。
52.
怎樣去掉上圖中數據窗口中的黑影? this.Modify ("DataWindow.selected.mouse=no")
this.Modify ("DataWindow.Grid.ColumnMove = false") 53
實現逐行增加求和

使用計算列:CumulativeSumfield for all),即可達到逐漸遞增求和的功能

54? 快速刪除多行

方法是把要刪除的行從主緩沖區中移到刪除緩沖區中。例如,刪除緩沖區中所有的行: dw_1.RowsMove(dw_1, 1, dw_1.RowCount, Primary!, dw_1, 1, Delete!)
58
、在分組的header上加序號
答:建立計算域,expression:cumulativeSum( If (jlxm = jlxm[-1],0,1) for all)
59
、為什么varchar字段類型的列只能保存255個字符?
答:設置事務處理對象的dbparm屬性即可
示例:

SQLCA.dbParm = "DBTextLimit = '9999'"

60、點擊grid類型數據窗口的header,自動排序。(圖片自己做)
/*
*args: i_str_oldcol
*note:
實例變量,紀錄上次點擊的列
*/
string i_str_oldcol
string? str_ O B J E C Tname, str_curcol, str_addpic
integer int_pic_x
str_ O B J E C Tname =string (dwo.name) //
對象名稱
if row = 0 and this.describe(str_ O B J E C Tname+".band") = "header" and this.describe(str_ O B J E C Tname+".text") <> "!" then //
是否點擊列對象
? str_curcol = left(str_ O B J E C Tname,len(str_ O B J E C Tname) - 2) //
當前列對象名稱
??? if str_curcol <> i_str_oldcol then //
點擊的是不同列對象
??????? this.modify("destroy p_sort") //
不管有沒有位圖對象都刪除
??????? i_str_oldcol = str_curcol //
保存上次點擊的列對象
??????? //
畫圖
??????? int_pic_x = integer(this.describe(str_ O B J E C Tname+".x")) + (integer(this.describe(str_ O B J E C Tname+".width")) - 70)
??????? str_addpic = 'create bitmap(band = foreground filename= "..\pic\up.bmp" x= "'+string(int_pic_x)+'" y= "24" height= "48" width= "48" border= "0" name= p_sort visible= "1")'
??????? this.modify(str_addpic) //
動態畫個圖
??????? this.setsort(str_curcol + " A") //
頭一次點擊當然是升序了
??????? this.sort()
??? else //
當前列已經點過了
??????? if this.describe("p_sort.filename") = "..\pic\up.bmp" then //
上次是升序
??????????? this.modify("p_sort.filename = '..\pic\down.bmp'")
??????????? this.setsort(str_curcol + " D") //
這次是降序
??????? else
??????????? this.modify("p_sort.filename = '..\pic\up.bmp'")
??????????? this.setsort(str_curcol + " A")
??????? end if
??? this.sort()
? end if
end if

1、如何讓存儲文件目錄的列,顯示圖片?

答:選擇對應的columndisplay as picture屬性為true

2、如何復制grid類型的所選擇的行的數據到系統剪切板?

答:string ls_selected

ls_selected=dw_1.Object.DataWindow.Selected.Data

clipbord(ls_selected)

4、如何設置的DW底色?

DWeditsource中改變color的值

5、如何將Grid風格改成自由格式?

DWeditsource中將processing=11改為0

6、要新建一個表A但風格和現有表格B風格一樣,怎么將A表快速設置成表B風格?

復制BC,在C表的DW中的editsource中將表名和字段名改成A表的,即可

7、如何實現gird風格的datawindow的多欄表頭?

答:添加 textheader帶區,并設置band屬性為foreground保存,edit source 修改textxwidth屬性表達式如下:

x="100~t integer(describe('firstcol.x')" width="100~tinteger(describe('lastcol.x')) - integer(describe('firstcol.x')) +integer(describe('lastcol.width'))

8、如何過濾dddw編輯風格的顯示值為指定值的記錄?

答:dw_1.setfilter("lookupdisplay('column_name')='"+ls_display_value_your+"'")

dw_1.filter()

9、如何設置datawindow的某一列為空?

答:string ls_temp[]

setnull(ls_temp)

dw_1.object.columnname.primary.current=ls_temp

10、如何設置datawindow的單雙行不同顏色間隔?
答:在detail帶區的color屬性表達式中寫上if(mod (getrow(),2)=1 ,rgb(255,0,0),rgb(0,255,0)),如果是當前行以第三種顏色表示,表達式如下:if(getrow()=current(), rgb(255,0,0),if(mod(getrow(),2)=1 ,rgb(0,0,255),rgb(0,255,0)))

11、如何獲取指定名稱的datawindowobject?
答:DWObject ldwo_use,ldwo_abc ldwo_use = dw_1.Object ldwo_abc = ldwo_use.__get_attribute("t_1",FALSE)//t_1datawindowtext對象的名稱

12、如何縮放datawindow的打印大小?
答:dw_1.object.datawindow.zoom=150 or dw_1.object.datawindow.zoom=75

13、如何在已過濾后的數據基礎上對datawindow進行過濾?
答:dw_1.setfilter(dw_1.describe("datawindow.table.filter")+your_join+your_new_filter)
dw_1.filter()

14、如何在datawindow中顯示動態時間?
答:建立一個計算域,表達式為string(datetime(today(),now()),'yyyymmdd hhmmss'),同時設置datawindow的屬性dw_1.Object.DataWindow.Timer_Interval=500

15、如何讓帶用title bardatawindow控件的標題欄誠活動窗口的顏色?
答:外部函數定義:
funcation logn SetActiveWindow(long hwnd ) Library "user32.dll"
datawindow
控件的clicked事件代碼:
setactivewindow(handle(this))

16、如何設置datawindow的當前行指示圖標?
答:在datawindow中建立一個計算列,expression'',并將該計算列移動為datawindow的第一個列,在datawindow控件的
rowfocuschanged
事件中寫入代碼:
SetRowFocusIndicator(hand!)
setrowfucsindicator(p_1)//p_1為窗口上的picture控件名

17、如何通過代碼打開dddw
答:定義外部函數引用聲明
SUBROUTINE keybd_event( int bVk, int bScan, int dwFlags, int dwExtraInfo) LIBRARY "user32.dll"
代碼如下: [constant integer VK_F4 = 115
dw_1.SetFocus()
dw_1.SetColumn( "dept_head_id" ) //
設置當前dddw
keybd_event( VK_F4,0,0,0 ) //
按下F4
keybd_event( VK_F4,0,2,0 ) //
釋放F4

18、如何打印datawindow的內容到文件中?
答: dw_1.object.datawindow.print.fileName ="c:\temp.prn"
dw_1.print()

19、如何設置dddw的初始值?
答:dw_1.object.columnname.Initial="your_initial_value"

20、如何只顯示不同的數據?
答:dw_1.filter("isnull(columnname[-1]) and columnname<>columnname[-1]")
dw_1.filter()

21、如何讓帶有title bardatawindow不可以移動?
答:在datawindow的自定義事件ue_nchittest(pbm_nchittest)中寫入如下代碼:
return 1

22、如何在N-UP顯示風格中建立基于第N欄中的列的計算列?
答:如column有兩列,numberprice ,并顯示為兩欄,則第一欄的cost計算列的expressionnumber*price,第二欄的cost_1計算列的expressionnumber[1]*price[1]

23、如何清空ddlbedit.codetable中項目?
答:dw_1.Object.columnname.Values=""

24、如何實現指定的column的字體旋轉90度?
答:dw_1.object.columnname.font.Escapement ="900"

25、如何獲取datawindowsql代碼?
答: 可以通過以下四種方法獲取sql代碼:
string szselect
szselect=dw_1.describe("datawindow.table.select")
szselect=dw_1.describe("datawindow.table.sqlselect")
szselect=dw_1.describe("datawindow.table.select.attribute")
szselect=dw_1.getsqlselect()

27、如何獲取datawindow對象占有的虛擬存儲的容量?
答:使用datawindow.storage屬性
舉例:在datawindow控件的retrieverow事件中,寫如如下代碼:
long lstorage
lstorage=long(dw_1.object.datawindow.storage)
if lstorage>50000 then dbcancel()

28、如何連續在同一張紙打印兩個數據窗口?
答:dw_1.object.datawindow.print.filename="temp.prn"
dw_2.object.datawindow.print.filename="temp.prn"
dw_1.print()
dw_2.print()

29、如何設置datawindow分組后每個分組中的記錄號?
答:建立一個計算列,expression getrow() - first(getrow() for group 1)+1

30、如何實現在datawindow中只有新增的行,才可以編輯?
答:在所有的columnprotect屬性表達式中寫入以下表達式:
if(isrownew(),'0','1')

31、除了循環以外,有沒有更好的方法統計數據窗口中處于選中狀態的行數?
一般習慣于使用循環來統計數據窗口中處于選中狀態的行數,有沒有更好的方法?其實此問題在應用上用處不大,討論一下,活躍一下思維還是有好處的。
方法一: long ll_Selected ll_Selected = long(dw_1.describe("evaluate('sum( if(IsSelected(), 1, 0) for all)',1)"))
方法二: long ll_Selected ll_Selected = long(dw_1.describe("evaluate('count(IsSelected() for all)',1)"))
方法三:upperbound(dw_1.Object.Data.Selected)

32、問:怎么讓PB只打印當前記錄,是用Free格式制作的數據窗口!
---------------------------------------------------------------
答:
DataStore ldt_temp
long ll_Row , ll_Rows
ll_Rows = dw_XX.Rowcount()
If ll_Rows = 0 Then GoTo the_end
If ll_Rows = 1 Then
dw_XX.Print()
GoTo the_end
End if
dw_XX.SetRedraw(False)
ldt_temp = Create DataStore
ldt_temp.DataObject = dw_XX.DataObject
ll_Row = dw_XX.GetRow()
dw_XX.RowsMove(1 , ll_Rows , Primary! , ldt_temp , 1 , Primary!)
ldt_temp.RowsMove(ll_Row , ll_Row , Primary! , dw_XX , 1 , Primary!)
dw_XX.Print()
dw_XX.RowsMove(1 , 1 , Primary! , ldt_temp , ll_Row , Primary!)
ldt_temp.RowsMove(1 , ll_Rows , Primary! , dw_XX , 1 , Primary!)
Destroy ldt_temp
dw_XX.SetRedraw(True)
the_end:
//
只用將上述腳本拷入到打印部分即可,dw_XX為被打印的free型數據窗口,該方法可保證dw_XX中的數據在打印前后包括sort等屬性均不發生任何改變,但效率較低,不宜用在數據量太大的數據窗口中,當然,考慮到打印本身速度就比較慢,所以3000行數據是可以采用這種方法并讓用戶接受的。若在同一窗口上存在與dw_XX共享的grid數據窗口并且與dw_XX同時顯示,則需要與dw_one一起SetRedraw()

38、字段如何自動換行的同時且自動高度?
答:將數據窗口中相應列的auto horz scroll 為不選中,選中autosize height detailautosize height選中。在數據窗口retrieve 后調用下面函數即可 uf_set_text(datawindow adw_content,string as_columns,boolean,ab_ignoreblank) /************************************************************* describe: 在數據窗口adw_content中,在as_columns中包含的列中插入空格 args: as_columns 要操作的多個列,列間用逗號隔開 *************************************************************/ if (not isvalid(adw_content)) or isnull(as_columns) or len(as_columns)<1 or isnull(ab_ignoreblank) then return -1 n_cst_string lnv_string string ls_column[] , ls_width ,as_source,as_replaced ,ls_temp int li_upperbound , li_width , li_column , li_fontWidth, li_counter long ll_rowcount , ll_row , ll_totalstep int li_yield lnv_string.of_parsetoarray(as_columns,',',ls_column) li_upperbound = upperbound(ls_column) ll_rowcount = adw_content.rowcount() if li_upperbound<1 or ll_rowcount<1 then return -1 openwithparm(w_waiting,this) ib_cancel = false iw_frame.enabled = false ll_totalstep = ll_rowcount * li_upperbound w_waiting.uf_register(ll_totalstep) for li_column = 1 to li_upperbound ls_width = adw_content.describe(ls_column[li_column]+".width") li_width = integer(ls_width) if ls_width='!' or ls_width='?' or li_width=0 then continue end if //ls_temp = adw_content.describe(ls_column[li_column]+".Font.property { = 'width' }") //messagebox(ls_column[li_column]+".Font.property { = 'width' }",ls_temp) //return 1 li_fontwidth = 27 li_counter = li_width / li_fontWidth for ll_row=1 to ll_rowcount if ib_cancel then iw_frame.enabled = true return 0 //pressed cancel button end if as_source = adw_content.getitemstring(ll_row,ls_column[li_column]) as_replaced = uf_insertstring(as_source,li_counter,' ',false) if as_replaced<>as_source then adw_content.setitem(ll_row,ls_column[li_column],as_replaced) end if w_waiting.uf_stepit() next next close(w_waiting) iw_frame.enabled = true return 1

39、如何使dw的列不可移動,不可調整列寬?
答:在datawindowcilcked事件寫 if row=0 then return 1 end if

40.光標跳轉到數據窗口的某一行某一列
dw_1.scrolltorow(ll_row) dw_1.setcolumn(ll_column)

41 如何使光標指向每頁第一行?
long ll_firstrowonpage=long(dw_1.describe("datawindow.firstrowonpage"))
dw_1.scrolltorow
ll_firstrowonpage)
dw_1.setrow(ll_firstrowonpage)

42. Grid的窗口如何使第一列固定不動?
選上data OBJECTHSplitScroll屬性 constructor事件中: dw_1.Object.DataWindow.HorizontalScrollSplit=integer(dw_1.describe("#1.width")) //第一列的寬度 scrollhorizontal事件中: int i
if pane = 1 then
i = integer(this.OBJECT.datawindow.horizontalscrollposition2)
if i < 1 or isnull(i) then return
if scrollpos > 0 then
this.OBJECT.datawindow.horizontalScrollPosition = 0
end if
else
i = integer(this.Object.DataWindow.HorizontalScrollSplit)
if i < 1 or isnull(i) then return
if i > scrollpos then
this.OBJECT.datawindow.horizontalScrollPosition2 = i
end if
end if
把如下代碼放在某列的text color里,可實現修改某行某列后,該列變為紅色,否則為白色(前景)
If(IsRowModified(), 255, 0)

彈出式菜單
//m_module
是菜單名
m_module m_newmenu
m_newmenu=create m_module
m_newmenu.popmenu(pointerX(),pointerY())

這段代碼不用API就可以取IP
Integer lifilenum
String? lsbat , lsdat
String? lstext,lsip[]
Long??? i , llfilename
llfilename = 0
Do While True
llfilename ++
lsbat = 'C:\' + String(llfilename) + '.BAT'
If FileExists(lsbat) Then Continue
// If DirectoryExists(lsbat) Then Continue
Exit
Loop
llfilename = 0
Do While True
llfilename ++
lsdat = 'C:\' + String(llfilename) + '.DAT'
If FileExists(lsdat) Then Continue
// If DirectoryExists(lsdat) Then Continue
Exit
Loop
lifilenum = FileOpen(lsbat,linemode!, Write!, lockwrite!, Replace!)
FileWrite(lifilenum,'ipconfig > ' + lsdat)
FileClose(lifilenum)
Run(lsbat,minimized!)
Do While True
Yield()
If FileExists(lsdat) Then Exit
Loop
Do While True
Yield()
lifilenum = FileOpen(lsdat,linemode!)
If lifilenum > 0 Then Exit
Loop
Do While True
Yield()
If FileRead(lifilenum, lstext) = -100 Then
? Exit
Else
? If Pos(lstext,'IP Address') > 0 Then
?? lsip[UpperBound(lsip) + 1] = Mid(lstext,Pos(lstext,':') + 1)
? End If
End If
Loop
FileClose(lifilenum)
FileDelete(lsbat)
FileDelete(lsdat)
If UpperBound(lsip) = 0 Then
MessageBox('','
沒有網卡或網絡連接未啟用!')
Else
For i = 1 To UpperBound(lsip)
? MessageBox('IP:'+String(i),lsip)
Next
End If
(
聲明win32 API函數:
function int WSAStartup( uint UIVersionRequested, ref s_WSAData lpWSAData ) library "wsock32.dll"
function int WSACleanup() library "wsock32.dll"
function int WSAGetLastError ( ) library "wsock32.dll"
function int gethostname ( ref string name, int namelen ) library "wsock32.dll"
function string GetHost(string lpszhost, ref blob lpszaddress ) library "pbws32.dll"
使用方法:
s_wsadata l_WSAData
string ls_HostName = space(128)
string ls_IpAddress
int li_version = 257
blob{4} lb_hostaddress
IF wsastartup ( li_version, l_WSAData ) = 0 THEN
IF gethostname ( ls_HostName, len(ls_HostName) ) < 0 THEN
messagebox("GetHostName",WSAGetLastError())
ELSE
GetHost(ls_HostName, lb_HostAddress)
ls_IpAddress = string(asc(string(blobmid(lb_HostAddress,1,1))),"000") + "."
ls_IpAddress += string(asc(string(blobmid(lb_HostAddress,2,1))),"000") + "."
ls_IpAddress += string(asc(string(blobmid(lb_HostAddress,3,1))),"000") + "."
ls_IpAddress += string(asc(string(blobmid(lb_HostAddress,4,1))),"000")
END IF
WSACleanup()
ELSE
messagebox("GetHostName",WSAGetLastError())
END IF
sle_1.text=ls_hostname
sle_2.text=ls_ipaddress?
)


嵌入桌面
Function Ulong FindWindowA(string classname, String windowname) Library "user32.dll"

Function Long SetParent(Long childwin, Long parentwin) Library "user32.dll"?
long ll_handle
ll_handle=findwindowa(“Progman”, “Program Manager”)
setparent(handle("
我的窗口"),ll_handle)

?

非復合報表中的嵌套報表不可使用getchild取得,也不可使用describe取得屬性和使用modify更改屬性,你可以調用PB未載入文檔的函數來獲取/更改屬性,請看示例,注意多層嵌套時使用循環獲取最終對象.
例:數據窗口控件dw_test包含嵌套報表dw_1,dw_1有欄位dept_name.
dwobject ldwo_parent,ldwo_obj
string ls_color
ldwo_parent = dw_1.object
ldwo_obj = ldwo_parent.__get_attribute("dw_1",false)
ldwo_obj = ldwo_obj.object
ldwo_obj = ldwo_obj.__get_attribute("dept_name",false)
ls_color = ldwo_obj.color//
取顏色
ldwo_obj.__set_attribute("color",rgb(192,192,192))//
更改顏色


EXCEL
的內容導入數據窗口
string str_savename,named,s_grxh
int excelok,li_net
long li_count,i
oleobject excelserver
excelserver=create oleobject
excelok=excelserver.connecttonewobject("excel.application")
if excelok<>0 then
messagebox("
信息提示","連接excel失敗,請檢查計算機中是否安裝了excel!")
return -1
end if
li_net=getfileopenname("
選擇文件",str_savename,named,"xls","excel文件(*.xls),*xls")
if li_net>0 then
if str_savename="" then
messagebox("
信息提示","沒有指定導入文件!")
return -1
else
dw_1.settransobject(sqlca)
dw_1.reset()
excelserver.workbooks.open(str_savename)
excelserver.activesheet.cells.copy
li_count=dw_1.importclipboard(2)
clipboard("")
excelserver.quit()
excelserver.disconnectobject()
cb_2.enabled=true
this.enabled=false
destroy excelserver
return 1
end if
end if

?

PB數據轉到EXCEL里面不能求和? pb轉過去的都是字符型的 怎么解決!!
ole_object.Worksheets(1).Columns(1).NumberFormat = "@"
這個是把一個列,變成字符,"#"是數字

DW中的行單、雙行顯示不同顏色
if(currentrow()=getrow(),rgb(185,200,255),if(mod(getrow(),2)=1, rgb(255,255,255) , rgb(240,243,255)))?


滿足條件時該列字體顯示為紅色。
tab_1.tabpage_1.dw_1.Object.czr.Color = "0~tIf(string(zlzq,'yyyy-mm')<=string(today(),'yyyy-mm'),rgb(241,0,51),rgb(0,0,0))"

滿足條件時該列背景色為紅色
tab_1.tabpage_1.dw_1.modify("djh.background.mode=0")//
tab_1.tabpage_1.dw_1.object.djh.background.color = "0~tif ( string(zlzq,'yyyy-mm')<=string(today(),'yyyy-mm'), rgb(255,0,0), rgb(255,255,255))"

按下Insert鍵時插入一行
//
自定義一個PBM_DWNKEY的事件在事件里寫(可能有別的簡單的方法)
if keydown(keycontrol!) then
if keydown(KeyInsert!) then
? //
插入一行

????????????????? dwname.insertrow(0)
end if
end if


當某列獲得焦點是,光標移動到最后
方法一:
//
獲得焦點時,按下END
public Subroutine keybd_event(int bVk,int bScan,ulong dwFlags,ulong dwExtraInfo) LIBRARY "user32.dll"
if dwo.name = "sqr_gzdw" then
keybd_event(35,0,0,0)
end if
方法二:
this.setcolumn("po_gzdw")? //
讓這列先獲得焦點
this.selecttext( len(data) + 1,0 ) //
再從最后選種0個字符

?

?

轉載于:https://www.cnblogs.com/quietwalk/archive/2011/01/16/1936571.html

總結

以上是生活随笔為你收集整理的60个数据窗口技巧(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。