我最近在一家公司開始了一項新工作,我的第一個任務是爲他們更新一些相當老的軟件。PowerBuilder粘貼在選項卡式數據窗口中
有一個很大的背景故事,但基本上這個軟件是用PB8編寫的(大約在1997年),公司內部沒有人(包括我)在PowerBuilder之前有過任何經驗,並且我已經負責更新和新手保持它直到更換被批准並且可以開發。
我們擁有PowerBuilder 12.5的許可證,因此我使用PB12.5 Classic來完成所有工作。無法聯繫原始開發人員獲取支持,並且不存在任何文檔。
有一兩件事我想知道,這將是在未來的一個巨大的幫助,是如何確定的功能定義並在變量得到他們的價值觀..
我在工作的例子時刻是以下情景。 有一個帶標籤的數據窗口,名字爲tab_detail
每個標籤顯示不同的,不管樹上的小橙人是誰。
其中之一被稱爲dw_detail
它允許粘貼數據。其他選項卡都不允許粘貼數據,但我希望它們能夠粘貼。 dw_detail
與在它下面的代碼的事件rbuttondown()
:
Window w_parentwin
If ib_add_mode Or ib_chg_mode Then
w_parentwin = Parent.GetParent().GetParent()
m_dwpaste m_pop_paste
m_pop_paste = CREATE m_dwpaste
m_pop_paste.idw_data = This
If ii_agent_code > 0 And Not IsNull(id_period) And Clipboard() <> "" Then
m_pop_paste.m_popup.m_paste.Enabled = TRUE
Else
m_pop_paste.m_popup.m_paste.Enabled = FALSE
End If
m_pop_paste.m_popup.PopMenu(w_parentwin.PointerX(), w_parentwin.PointerY())
DESTROY(m_pop_paste)
End If
當我的代碼添加到rbuttondown()
事件的標籤編號2(dw_adjustment
)選項卡現在允許貼在我的dw_adjustment
數據窗口中單擊鼠標右鍵,但數據將被粘貼到dw_detail
選項卡中的字段而不是dw_adjustment
選項卡上的字段。
我已經嘗試過調試和單步執行代碼,但變量窗口中有成千上萬的值,並且沒有搜索能力我找不到上面使用的變量和它們的值是什麼或爲什麼數據粘貼到dw_detail
選項卡當我粘貼到dw_adjustment
選項卡時,而不是dw_adjustment
選項卡。
基本上我尋找到哪裏尋找或任何有用的提示,上面有哪些是做,爲什麼一切粘貼到標籤1,而不是我在點擊粘貼的標籤。
如果從代碼需要從更多的細節需要一個不同的位置或更多的信息我很樂意提供它。
正如關建議我找到了m_popup
雙點擊時就想出了wf_pastereturn()
:
Integer li_idx, li_rows, li_dwrows, li_comm, li_seqno
String ls_approval_type
If tab_detail.tabpage_details.dw_detail.RowCount() > 0 Then
li_idx = 1
li_dwrows = tab_detail.tabpage_details.dw_detail.RowCount()
Do Until li_idx > li_dwrows
ls_approval_type = tab_detail.tabpage_details.dw_detail.Object.approval_type [li_idx]
If IsNull(ls_approval_type) or ls_approval_type = "" Then
tab_detail.tabpage_details.dw_detail.DeleteRow(li_idx)
Else
li_idx++
End If
li_dwrows = tab_detail.tabpage_details.dw_detail.RowCount()
Loop
End If
If li_dwrows > 0 Then
li_seqno = Long(tab_detail.tabpage_details.dw_detail.Object.seq_no [li_dwrows])
End If
li_seqno += 10
If Clipboard() <> "" Then
If tab_detail.tabpage_details.dw_detail.ImportClipboard(1, li_rows, 1, 4, 3) <= 0 Then
MessageBox("Invalid Data", "Unable to paste!", StopSign!)
Return -1
End If
li_rows = tab_detail.tabpage_details.dw_detail.RowCount()
li_dwrows++
For li_idx = li_dwrows To li_rows
tab_detail.tabpage_details.dw_detail.Object.approval_type [li_idx] = trim(tab_detail.tabpage_details.dw_detail.Object.approval_type [li_idx])
tab_detail.tabpage_details.dw_detail.Object.approval_no [li_idx] = trim(tab_detail.tabpage_details.dw_detail.Object.approval_no [li_idx])
tab_detail.tabpage_details.dw_detail.Object.agent_code [li_idx] = ii_agent_code
tab_detail.tabpage_details.dw_detail.Object.period [li_idx] = id_period
li_comm = f_new_commission(Long(tab_detail.tabpage_details.dw_detail.Object.value_of_work[li_idx]), id_period)
tab_detail.tabpage_details.dw_detail.Object.levy_payable[li_idx]= &
inv_rate.of_CalculateLevyPayable (Long(tab_detail.tabpage_details.dw_detail.Object.value_of_work[li_idx]), id_period)
tab_detail.tabpage_details.dw_detail.Object.comm_deductable [li_idx] = li_comm
tab_detail.tabpage_details.dw_detail.Object.commission [li_idx] = li_comm
tab_detail.tabpage_details.dw_detail.Object.seq_no [li_idx] = li_seqno
li_seqno += 10
tab_detail.tabpage_details.dw_detail.Object.agent_return_detail_create_date[li_idx] = Today()
tab_detail.tabpage_details.dw_detail.Object.agent_return_detail_create_user[li_idx] = SQLCA.Logid
Next
Clipboard("")
Return 0
Else
Return -1
End If
我修改的功能使用Windows SelectedTab
財產。數據現在會粘貼到選項卡中,但是在錯誤的輸入字段中。我查看了更多,並且ImportClipboard
函數的數據列沒有對齊。
如何更改所選數據庫列的順序?
這裏是什麼我由製表符的意思是一個屏幕截圖:
所以主程序窗口內,有上述突出部,每個凸片(其中輸入字段)內有標記的一個數據窗口與前綴dw_
。
謝謝你的幫助。
讓建議變得複雜的一件事是,您所指的是名稱前綴爲dw_的「選項卡」。假設開發人員已經使用了由PowerBuilder(Powersoft,Sybase,SAP)的不同製造商推廣的流行命名標準,這些更可能是數據窗口而不是標籤。 (它們在代碼中的用法也暗示了DataWindows。)如果您有我們PB開發人員所稱的選項卡,並且您希望根據所選選項卡更改行爲,那是一條建議。如果這些DW是單個窗口中的窗格,那是其他建議。你可否確認? – Terry
已更新原始帖子,更多關於如何設置標籤的信息。 – Jake
太糟糕了,你失去了開發人員,他/她的代碼很好。我喜歡他的功能編程。 –