當前位置:首頁 » 凈水方式 » edi控制項
净水/纯水设备联系QQ:1098646807
商业推广合作QQ:151703941

edi控制項

發布時間: 2020-12-18 11:49:00

★. 有没有靠谱的净水或纯水设备的厂家,求联系方式!

这要看你要的具体设备是什么了?之前我们工厂新上的一个纯水设备是悦纯的。当时是我负责这块,机器的安装调试都是悦纯工厂亲自来人做的,包括调试、试用、讲解全部都说的很清楚。我感觉他们服务和产品质量都挺好的,有需要你可以联系下,联系方式是 18156052550 (微信同号)

Ⅰ 在WebService中怎麼調用alasunsmscon.ocx控制項錯誤

這就是說,你能夠用編程的方法通過來調用這個應用程序。對Web service 更精確的解釋: Web services是建立可互操作的分布式應用程序的新平台。作為一個Windows程序員,你可能已經用COM或DCOM建立過基於組件的分布式應用程序。COM是一個非常好的組件技術,但是我們也很容易舉出COM並不能滿足要求的情況。Web service平台是一套標准,它定義了應用程序如何在Web上實現互操作性。你可以用任何你喜歡的語言,在任何你喜歡的平台上寫Web service ,只要我們可以通過Web service標准對這些服務進行查詢和訪問 2. 基本概念 SOAP Web service建好以後,其他人就會去調用它。簡單對象訪問協議(SOAP)提供了標準的遠程過程調用( RPC)方法來調用Web service。SOAP規范定義了SOAP消息的格式,以及怎樣通過Http協議來使用SOAP。SOAP也是基於xml和XSD的,XML是SOAP的數據編碼方式。客戶端和服務端之間的方法調用請求和結果返回值都放在這些消息里。 XML和XSD可擴展的標記語言(XML)是Web service平台中表示數據的基本格式。除了易於建立和易於分析外,XML主要的優點在於它既是平台無關的,又是廠商無關的。無關性是比技術優越性更重要的。XML解決了數據表示的問題,但它沒有定義一套標準的數據類型,更沒有說怎麼去擴展這套數據類型。例如,整形數到底代表什麼?16位,32位,還是 64位?這些細節對實現互操作性都是很重要的。W3C制定的XML Schema(XSD)就是專門解決這個問題的一套標准。它定義了一套標準的數據類型,並給出了一種語言來擴展這套數據類型。Web service平台就是用XSD來作為其數據類型系統的。當用某種語言(如VB.NET或C#)來構造一個Web service時,為了符合Web service標准,所有使用的數據類型都必須被轉換為XSD類型。3.Webservice的技術特點 長項一: 跨防火牆的通信如果應用程序有成千上萬的用戶,而且分布在世界各地,那麼客戶端和伺服器之間的通信將是一個棘手的問題。因為客戶端和伺服器之間通常會有防火牆或者代理伺服器。在這種情況下,使用DCOM就不是那麼簡單,通常也不便於把客戶端程序發布到數量如此龐大的每一個用戶手中。傳統的做法是,選擇用瀏覽器作為客戶端,寫下一大堆ASP頁面,把應用程序的中間層暴露給最終用戶。這樣做的結果是開發難度大,程序很難維護。 舉個例子,在應用程序里加入一個新頁面,必須先建立好用戶界面(Web頁面),並在這個頁面後面,包含相應商業邏輯的中間層組件,還要再建立至少一個ASP頁面,用來接受用戶輸入的信息,調用中間層組件,把結果格式化為HTML形式,最後還要把「結果頁」送回瀏覽器。要是客戶端代碼不再如此依賴於HTML表單,客戶端的編程就簡單多了。 如果中間層組件換成Web Service的話,就可以從用戶界面直接調用中間層組件,從而省掉建立ASP頁面的那一步。要調用Web Service,可以直接使用Microsoft SOAP Toolkit或.NET這樣的SOAP客戶端,也可以使用自己開發的SOAP客戶端,然後把它和應用程序連接起來。不僅縮短了開發周期,還減少了代碼復雜度,並能夠增強應用程序的可維護性。同時,應用程序也不再需要在每次調用中間層組件時,都跳轉到相應的「結果頁」。 從經驗來看,在一個用戶界面和中間層有較多交互的應用程序中,使用Web Service這種結構,可以節省花在用戶界面編程上20%的開發時間。另外,這樣一個由Web Service組成的中間層,完全可以在應用程序集成或其它場合下重用。最後,通過Web Service把應用程序的邏輯和數據「暴露」出來,還可以讓其它平台上的客戶重用這些應用程序。 長項二: 應用程序集成企業級的應用程序開發者都知道,企業里經常都要把用不同語言寫成的、在不同平台上運行的各種程序集成起來,而這種集成將花費很大的開發力量。應用程序經常需要從運行在IBM主機上的程序中獲取數據;或者把數據發送到主機或UNIX應用程序中去。即使在同一個平台上,不同軟體廠商生產的各種軟體也常常需要集成起來。通過Web Service,應用程序可以用標準的方法把功能和數據「暴露」出來,供其它應用程序使用。 例如,有一個訂單登錄程序,用於登錄從客戶來的新訂單,包括客戶信息、發貨地址、數量、價格和付款方式等內容;還有一個訂單執行程序,用於實際貨物發送的管理。這兩個程序來自不同軟體廠商。一份新訂單進來之後,訂單登錄程序需要通知訂單執行程序發送貨物。通過在訂單執行程序上面增加一層Web Service,訂單執行程序可以把「Add Order」函數「暴露」出來。這樣,每當有新訂單到來時,訂單登錄程序就可以調用這個函數來發送貨物了。 長項三: B2B的集成 用Web Service集成應用程序,可以使公司內部的商務處理更加自動化。但當交易跨越供應商和客戶、突破公司的界限時會怎麼樣呢?跨公司的商務交易集成通常叫做B2B集成。Web Service是B2B集成成功的關鍵。通過Web Service,公司可以把關鍵的商務應用「暴露」給指定的供應商和客戶。例如,把電子下單系統和電子發票系統「暴露」出來,客戶就可以以電子的方式發送訂單,供應商則可以以電子的方式發送原料采購發票。當然,這並不是一個新的概念, Edi(電子文檔交換)早就是這樣了。但是,Web Service的實現要比EDI簡單得多,而且Web Service運行在Internet上,在世界任何地方都可輕易實現,其運行成本就相對較低。不過,Web Service並不像EDI那樣,是文檔交換或B2B集成的完整解決方案。Web Service只是B2B集成的一個關鍵部分,還需要許多其它的部分才能實現集成。用Web Service來實現B2B集成的最大好處在於可以輕易實現互操作性。只要把商務邏輯「暴露」出來,成為Web Service,就可以讓任何指定的合作夥伴調用這些商務邏輯,而不管他們的系統在什麼平台上運行,使用什麼開發語言。這樣就大大減少了花在B2B集成上的時間和成本,讓許多原本無法承受EDI的中小企業也能實現B2B集成。 長項四: 軟體和數據重用 軟體重用是一個很大的主題,重用的形式很多,重用的程度有大有小。最基本的形式是源代碼模塊或者類一級的重用,另一種形式是二進制形式的組件重用。 當前,像表格控制項或用戶界面控制項這樣的可重用軟體組件,在市場上都佔有很大的份額。但這類軟體的重用有一個很大的限制,就是重用僅限於代碼,數據不能重用。原因在於,發布組件甚至源代碼都比較容易,但要發布數據就沒那麼容易,除非是不會經常變化的靜態數據。Web Service在允許重用代碼的同時,可以重用代碼背後的數據。使用Web Service,再也不必像以前那樣,要先從第三方購買、安裝軟體組件,再從應用程序中調用這些組件;只需要直接調用遠端的Web Service就可以了。舉個例子,要在應用程序中確認用戶輸入的地址,只需把這個地址直接發送給相應的Web Service,這個Web Service 就會幫你查閱街道地址、城市、省區和郵政編碼等信息,確認這個地址是否在相應的郵政編碼區域。Web Service 的提供商可以按時間或使用次數來對這項服務進行收費。這樣的服務要通過組件重用來實現是不可能的,那樣的話你必須下載並安裝好包含街道地址、城市、省區和郵政編碼等信息的資料庫,而且這個資料庫還是不能實時更新的。 另一種軟體重用的情況是,把好幾個應用程序的功能集成起來。例如,要建立一個區域網上的門戶站點應用,讓用戶既可以查詢聯邦快遞包裹,查看股市行情,又可以管理自己的日程安排,還可以在線購買電影票。現在Web上有很多應用程序供應商,都在其應用中實現了這些功能。一旦他們把這些功能都通過Web Service 「暴露」出來,就可以非常容易地把所有這些功能都集成到你的門戶站點中,為用戶提供一個統一的、友好的界面。 將來,許多應用程序都會利用Web Service,把當前基於組件的應用程序結構擴展為組件/Web Service 的混合結構,可以在應用程序中使用第三方的Web Service 提供的功能,也可以把自己的應用程序功能通過Web Service 提供給別人。兩種情況下,都可以重用代碼和代碼背後的數據。

Ⅱ 誰知道EDIVS這個軟體

南陽油田勘探資料庫系統

為使勘探開發資料庫這一龐大的信息資源在油田的各項工作中發揮其應有的作用,河南 油田的勘探開發工作人員進行了多年的不懈努力,目前,河南油田的勘探開發資料庫 建設和應用已頗具規模,在利用計算機及網路技術、資料庫技術來解決生產、科研、 管理過程中的實際問題以及在提高日常工作效率、管理水平、決策水平等方面取得了 明顯的效益。特別是在數據共享、查詢、統計分析等表單數據的應用軟體開發方面成 績顯著。
實際上,在油田勘探開發領域,「數據」與「圖形」相輔相承,缺一不可,數據是圖形 的內容,圖形是數據的表現。資料庫、圖形庫應用軟體建設,正是要融合數據與圖形 的內容,使它們有機地結合在一起,為油田的科研生產、增儲上產服務。
為此,河南油田提出了建立本企業的勘探開發信息可視化系統(Exploration and Development Information Visualization System,簡稱EDIVS,下同)的需求,並就 EDIVS系統提出了較為詳盡的功能要求。期望建立一個以圖形化系統為工作界面,以瀏 覽器為應用工具,集數據、圖表、圖形和圖像的錄入、管理、查詢和維護於一體的勘 探開發信息資料庫綜合應用系統。

功能:
EDIVS既是一個日常工作中的通用系統,同時又是可擴展性要求很高的專業 工作系統,因此要求有很強實用性和靈活性,主要是:
速度性能:
軟體運行的速度一方面取決於硬體性能,另一方面取決於程序的代 碼效率。編程時應採用代碼效率高、編譯器功能強的編程語言工具,特別是應選用高速 的專用資料庫引擎,避免使用速度慢的通用資料庫介面(如ODBC)。
易使用性:
用戶界面友好,易於為操作員、單位領導到勘探專業技術人員掌握 和使用。所有使用代碼的地方,應以中文提示出現,用戶不需查詢和記憶代碼含義。所 有由於用戶填寫查詢條件的界面應提供所有的函數、操作符及條件項目列表,供用戶選 擇。所有提示均應以中文出現。
可理解性:
程序代碼應結構簡潔、層次明確,易於閱讀和理解。所有變數均應 說明其用途、出處,全局變數應說明其在程序代碼中使用的模塊位置。盡可能避免使用 轉移語句。用戶界面應易於操作者理解,每一步的菜單和對話框均應有相應的幫助信息。 對話框應採用中文提示。
可維護性:
包括系統可維護性和代碼可維護性。代碼中應避免出現交叉重復的 代碼段,各模塊的出入口應清楚、明確,各模塊均應有明確的助記符,模塊間應有明確 的數據協議。
可移植性:
各功能模塊的代碼結構應具有較強的獨立性,一便於移植使用。
可擴充性:
數據字典、圖例庫應具有可擴充修改能力,擴充修改後的數據字典、 圖例庫程序應能自動識別,而無需修改程序代碼。可編輯的圖件類型和表格類型也應具 有可擴充能力,新增的文件類型或表格類型應可很方便地擴充掛接到程序中,而不需大 量修改代碼段。
安全保密性:
資料庫、圖形庫、地質地理信息庫均應建立完善的安全機制。所有 用戶必須以用戶名和口令登錄方能使用本系統,用戶只能查詢和使用自己許可權范圍內的 數據。後台伺服器的資料庫對於所有前端用戶均僅為只讀,前端處理使用後的所有數據 原則上均不能返回後端資料庫。
設計實現:
在充分考慮了用戶實際需要以及用戶的工作習慣、工作流程、工作分工的基 礎上,EDIVS系統要用最直觀、最方便操作、最直接的方式來實現用戶的需求。EDIVS軟體的開 發採用瀏覽器/伺服器(B/S)的方式與客戶端/伺服器(C/S)結合的方式進行開發實現。
C/S方式實現:
通過統一的、可視化的平台定製維護工具Builder實現:用戶定製、 可視化表單定製、業務流程定製、業務功能定製、用戶許可權分配、各種數據源數據的導入導 出等功能,維護工具Builder採用C++語言開發,做到介面統一,易於維護,方便擴充,容易 移植。
B/S方式實現:
用戶在瀏覽器端按照所擁有的許可權操作C/S端定製的 業務功能,即在瀏覽器來完成數據及圖形的(單條或批量)錄入,修改,查詢功能。B/S端基 於java jsp+jdbc實現純HTML語言的代碼,避免了對第三方控制項的依賴,提高了系統的執行效 率、健壯率,使系統的維護性、擴充性、可移植性大大增強。

運行環境:
硬體環境:
伺服器:SUN伺服器,操作系統為SOLARIS 8, 9
客戶機:微機PⅢ 500,64MB以上,21」顯示器,WINDOWS98/2000/NT
軟體環境:
資料庫平台:ORACLE8i, 9i
Application Server: Jrun 4.0 或Tomcat 4.0

Ⅲ delphi 中怎麼用ListView控制項和 OPENdialog 控制項 使打開的文件夾下的 文件名在listVIEW中顯示 求具體代碼

工具,選項抄,安全性,個人信息選襲項下面,把勾選去掉 。如果是2007的話就點擊工作簿上的office徽標-Excel選項-信任中心-個人信息選項,文檔特定設置下的「保存時從文件屬性中刪除個人信息(R)」前面的「√」取消!

Ⅳ 求一款電音效果插件Autotune,是Cool Edia用的

安裝到你能找到的位置,然後刷新效果列表。

Ⅳ C++編輯框控制項對WM_CHAR的篩選

截獲++編輯框控制項的窗口過程:

WNDPROC OldEditProc=0L;
// InterceptEdit, 截獲 Edit 的 WM_CHAR 消息. 當消息處理完畢後必須把消息回送給默認的RichEdit的窗口處理過程. OldEditProc 為 Edit 的舊窗口地址。
long InterceptEdit(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){

switch(uMsg){
case WM_CHAR:{
static char g_sz[128]; sprintf(g_sz,"wParam=0x%x=%c, lParam=%x, repeat count=%d", wParam, wParam,lParam,lParam&0xF);
MessageBox(0,g_sz,0,0);
}break;

default: break;
} // switch(uMsg)

return CallWindowProc(OldEditProc, hWnd, uMsg, wParam, lParam);
}

// DialogProc, IDD_DIALOG1對應的對話框窗口過程. int CALLBACK DialogProc( HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam){
switch(uMsg){
case WM_INITDIALOG:{
// 在dialog初始化時截取Edit窗口過程. 也可以在主窗口WndProc初始化時截取。
HWND hEdit=GetDlgItem(hdlg,IDC_EDIT1); if(!hEdit) break;
OldEditProc=(WNDPROC)SetWindowLong(hEdit,GWL_WNDPROC,(long)InterceptEdit);
}break;

case WM_DESTROY: break;
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDCANCEL:
case IDOK:{ // DestroyWindow(hdlg);
EndDialog(hdlg,0);
} break;

default: break; // switch(LOWORD(wParam))} break; // case WM_COMMAND:
} // switch(uMsg)
return false;
}

Ⅵ 如何對DBEdi進行t編輯Delphi

將其和「數據表控制項」 或者 「數據查詢控制項」中的某個欄位相關聯,就可編輯此DBEdit。

Ⅶ 裝的破解版Edius6.08,求能用的好用的經典的字幕插件啊,(雷特字幕、傳奇字幕等Edius6不能用的除外)!!

我的看法是,LZ還是不要太去看中那些傳說中的字幕插件了,因為你即使擁有了版它,你不是權還得去系統地學習它的使用方法?這不是走了一大截彎路嗎?在我看來,這是不值得的。
以上看法,純屬個人觀點,LZ可別生氣哦。
我常用的做法是:先用PS做出自己想要的文字效果,保存成PSD文件導入EDIUS里,然後再把那些什麼「掃光了、走光了」的特效拖放進去,想要多炫就有多炫。

Ⅷ 如何自定義iOS中的控制項

在開發過程中,有時候UIKit的標准控制項並不能滿足我們的需求,例如你需要一個控制項能支持用戶方便的選擇0-360°之間的一個角度值,此時就需要根據自己的需求自定義控制項了。

對於選擇角度值的控制項可以這樣實現:創建一個圓形的滑塊,用戶通過拖動手柄操作就能選擇角度值。實際上這樣的控制項在別的一些平台中你可能看到過,但是在UIKit中並沒有。

本文就實現一個選擇角度值的控制項來介紹控制項的自定義。下面先來看看到底要做成什麼樣子:

1. 子類化UIControl
UIControl 是UIView的子類,它又是所有UIKit控制項的父類(例如UIButton、UISlider和UISwitch等)。

UIControl的主要作用是創建相應的邏輯將action分發到對應的target,另外90%的情況下,它會根據自身的狀態(例如Highlighted, Selected和Disabled等)來繪制用戶界面。

通過UIControl,我們主要管理3個重要的任務:

繪制用戶界面
跟蹤用戶的操作
Target-Action模式
在本文的圓形滑塊中,我們要做如下一些事情:

定製一個用戶界面(圓形滑塊本身),通過該界面用戶可以通過手柄進行界面交互。用戶的交互操作會被轉換為控制項target對應的action(控制項將滑塊按鈕的frame origin轉換為0-360之間的一個值,並用於target/action上)。

建議在學習本文的時候從文章尾部的連接中下載完整的示例工程。

下面我將從上面列出的3個重要任務一一進行分解介紹。

這些步驟都是模塊化的,所以如果你對界面的繪制不感興趣,可以跳 繪制用戶界面 ,直接學習後面的步驟。

打開工程文件中的 TBCircluarSlider.m 文件。然後開始學習下面的內容。

1.1 繪制用戶界面
我比較喜歡使用Core Graphics,唯一用到UIKit的就是通過textfield來顯示滑塊的值。

提醒 :此處需要用到一些 Core Graphics 知識,如果你不懂也沒多大關系,我會盡量把代碼做詳細的講解。

我們先來看看控制項的不同組成部分,這樣更有利於後面的學習。

首先,是用一個 黑色的圓環 當做滑塊的背景。

可操作區域(active area) 是一個從藍色到紫色的梯度漸變效果。

用戶通過拖拽下面的這個手柄按鈕來選擇值:

最後,用於顯示選中值的 TextField 。在下一版中,我計劃讓用戶可以通過鍵盤輸入角度值。

控制項界面的繪制主要使用drawRect函數,首選我們需要獲取到當前使用的圖形上下文,如下代碼所示:

CGContextRef ctx = UIGraphicsGetCurrentContext();
1.1.1 繪制背景

背景是360°的,所以只要用CGContextAddArc給圖形上下文添加正確的path,並設置正確的stroke即可。

下面的代碼可以就可以完成背景的繪制:

//Add the arc path
CGContextAddArc(ctx, self.frame.size.width/2, self.frame.size.height/2, radius, 0, M_PI *2, 0);

//Set the stroke colour
[[UIColor blackColor]setStroke];

//set Line width and cap
CGContextSetLineWidth(ctx, TB_BACKGROUND_WIDTH);
CGContextSetLineCap(ctx, kCGLineCapButt);

//draw it!
CGContextDrawPath(ctx, kCGPathStroke);
CGContextArc 函數的參數包括圖形上下文,弧度的中心坐標點,以及半徑(是一個私有變數),接著是弧度開始和結束時的角度(在TBCircularSlider.m文件的頭部可以看到一些關於數學計算的方法),最後一個參數標示繪制的方向,0表示逆時針方向。

接下來的3行的代碼是用來設置一些信息的,例如顏色和線條寬度等。最後使用 CGContextDrawPath 方法完成背景的繪制。

1.1.2 繪制用戶的可操作區域

這部分需要利用一點小技巧才行。此處我們繪制一個線性漸變的掩碼圖片,下面看看原理:

此處掩碼圖片的工作原理是可以看到原始漸變矩形框的一個孔。

在這里繪制的弧度有一個陰影,這是創建掩碼圖時使用了一點模糊的效果。

下面是創建掩碼圖的相關代碼:

UIGraphicsBeginImageContext(CGSizeMake(320,320));
CGContextRef imageCtx = UIGraphicsGetCurrentContext();

CGContextAddArc(imageCtx, self.frame.size.width/2 , self.frame.size.height/2, radius, 0, ToRad(self.angle), 0);
[[UIColor redColor]set];

//Use shadow to create the Blur effect
CGContextSetShadowWithColor(imageCtx, CGSizeMake(0, 0), self.angle/20, [UIColor blackColor].CGColor);

//define the path
CGContextSetLineWidth(imageCtx, TB_LINE_WIDTH);
CGContextDrawPath(imageCtx, kCGPathStroke);

//save the context content into the image mask
CGImageRef mask = CGBitmapContextCreateImage(UIGraphicsGetCurrentContext());
UIGraphicsEndImageContext();
在上面的代碼中首先創建了一個圖形上下文,然後設置了一下陰影。通過 CGContextSetShadowWithColor 方法,我們可以設置如下內容:

上下文
偏移量(此處不需要)
模糊值(該值是通過參數控制的:使用當前的角度除以20,當用戶與此控制項交互時,以此獲得一個簡單的動畫模糊值)
顏色
接著是根據當前的角度繪制一個相應的弧度。

例如,如果當前的角度變數是360°,那麼就繪制一個圓弧,如果是90°,就繪制一個弧度為90°的一個弧。最後,利用 CGBitmapContextCreateImage 方法獲取一張圖片(剛剛繪制的弧)。這個圖片就是我們所需要的掩碼圖了。

裁剪上下文:

現在我們已經有一個漸變的掩碼圖了。接著利用函數 CGContextClipToMask 對上下文進行裁剪——給該函數傳入上面剛剛創建好的掩碼圖。代碼如下所示:

CGContextClipToMask(ctx, self.bounds, mask);
最後我們來繪制漸變效果,代碼如下所示:

//Define the colour steps
CGFloat components[8] = {
0.0, 0.0, 1.0, 1.0, // Start color - Blue
1.0, 0.0, 1.0, 1.0 }; // End color - Violet

CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = (baseSpace, components, NULL, 2);

//Define the gradient direction
CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

//Choose a colour space
CGColorSpaceRelease(baseSpace), baseSpace = NULL;

//Create and Draw the gradient
CGContextDrawLinearGradient(ctx, gradient, startPoint, endPoint, 0);
CGGradientRelease(gradient), gradient = NULL;
繪制漸變效果需要很多處理,不過我們可以將其分為4部分:

定義顏色的變化范圍
定義漸變的方向
選擇顏色空間
創建並繪制漸變
最終的顯示效果(看到漸變矩形框的一部分)要歸功於之前創建的掩碼圖。

另外,為了在背景邊框模擬光線反射,我添加了一些燈光效果。

1.1.3 繪制手柄

下面我們根據當前的角度值,在的正確位置繪制出手柄。

實際上,在繪制過程中,這一步非常簡單,復雜一點的就是計算一下手柄所在的位置。

這里我們需要使用三角函數將一個 標量值(scalar number) 轉換為 CGPoint 。不要擔心有多復雜,只需要使用Sin和Cos函數就可以完成。代碼如下所示:

-(CGPoint)pointFromAngle:(int)angleInt{

//Define the Circle center
CGPoint centerPoint = CGPointMake(self.frame.size.width/2 - TB_LINE_WIDTH/2, self.frame.size.height/2 - TB_LINE_WIDTH/2);

//Define The point position on the circumference
CGPoint result;
result.y = round(centerPoint.y + radius * sin(ToRad(-angleInt))) ;
result.x = round(centerPoint.x + radius * cos(ToRad(-angleInt)));

return result;
}
上面的代碼中,指定一個角度值,然後計算出在圓周上面的位置,當然,這里需要圓周的中心點和半徑。

使用sin函數在使用sin函數時,需要一個Y坐標值,而cos函數則需要X坐標值。

需要注意的是此處每個函數返回的值都認為半徑為1,所以需要將所得結果乘以我們指定的半徑大小,並相對於圓周的中心做計算。

希望下面的公式對你的理解有所幫助:

1
2
point.y = center.y + (radius * sin(angle));
point.x = center.x + (radius * cos(angle));
通過上面的計算,現在我們已經知道手柄的具體位置了,所以,接下來就直接將手柄繪制到指定位置即可,如下代碼所示:

-(void) drawTheHandle:(CGContextRef)ctx{

CGContextSaveGState(ctx);

//I Love shadows
CGContextSetShadowWithColor(ctx, CGSizeMake(0, 0), 3, [UIColor blackColor].CGColor);

//Get the handle position!
CGPoint handleCenter = [self pointFromAngle: self.angle];

//Draw It!
[[UIColor colorWithWhite:1.0 alpha:0.7]set];
CGContextFillEllipseInRect(ctx, CGRectMake(handleCenter.x, handleCenter.y, TB_LINE_WIDTH, TB_LINE_WIDTH));

CGContextRestoreGState(ctx);
}
具體操作步驟如下:

保存當前的上下文(當在一個單獨的函數中進行繪制任務時,將上下文的狀態進行保存是編程的一個好習慣)。
給手柄設置一些陰影效果
定義手柄的顏色,然後利用 CGContextFillEllipseInRect 將其繪制出來。
我們在drawRect函數的最後調用上面這個方法:

1
[self drawTheHandle:ctx];
至此,我們就完成了繪制部分的任務。

1.2 跟蹤用戶的操作
在UIControl的子類中,我們可以 override 3個特殊的方法來提供一個自定義的跟蹤行為

1.2.1 開始跟蹤

當在控制項的bound內發生了一個觸摸事件,首先會調用控制項的 beginTrackingWithTouch 方法。

我們就看看如何 override 這個方法吧:

-(BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
[super beginTrackingWithTouch:touch withEvent:event];

//We need to track continuously
return YES;
}
該函數返回的BOOl值決定著:當觸摸事件是dragged時,是否需要響應。在我們這里的自定義控制項中,是需要跟蹤用戶的dragging,所以返回YES。

上面這個函數有兩個參數:touch對象和事件。

1.2.2 持續跟蹤

在上一個方法中我們指定了這里的自定義控制項需要跟蹤一個持續的事件,所以當用戶進行drag時,會調用一個特殊的方法: continueTrackingWithTouch :

-(BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
該方法返回的BOOL值標示是否繼續跟蹤touch事件。

通過該方法我們可以根據touch位置對用戶的操作進行過濾。例如,我們可以:僅當touch位置與手柄位置相交的時候才激活控制項(activate control)。不過在這里我們的控制邏輯並不是這樣的,我們希望用戶點擊任何位置都能對手柄做出相應的位置處理。

本文的該方法負責更新手柄的位置(在後面的一節中會看到我們把該位置信息傳遞給對應的target上)。

對上面這個方法的override代碼如下所示:

-(BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
[super continueTrackingWithTouch:touch withEvent:event];

//Get touch location
CGPoint lastPoint = [touch locationInView:self];

//Use the location to design the Handle
[self movehandle:lastPoint];

//We'll see this function in the next section:
[self sendActionsForControlEvents:UIControlEventValueChanged];

return YES;
}
上面的代碼中,首先利用 locationInView 獲取到touch的位置,然後將該位置傳遞給 moveHandle 方法,該方法會將傳入的值轉換為一個有效的手柄位置(a valid handle position)。

此處「a valid position」的意思是什麼呢?

此控制項的手柄只能在背景圓弧定義的邊界范圍內做移動,但是我們不希望強制要求用戶必須在很小的圓弧內才可以移動手柄,如果非要這樣的話,用戶體驗會非常的糟糕。

moveHandle 的任務就是負責把任意的位置值轉變為手柄可移動的值,另外,另外,在該函數中,還對指定的滑塊角度值做了轉換,代碼如下所示:

-(void)movehandle:(CGPoint)lastPoint{

//Get the center
CGPoint centerPoint = CGPointMake(self.frame.size.width/2,
self.frame.size.height/2);

//Calculate the direction from the center point to an arbitrary position.
float currentAngle = AngleFromNorth(centerPoint,
lastPoint,
NO);
int angleInt = floor(currentAngle);

//Store the new angle
self.angle = 360 - angleInt;

//Update the textfield
_textField.text = [NSString stringWithFormat:@"%d",
self.angle];

//Redraw
[self setNeedsDisplay];
}
上面代碼中,實際上主要任務都是在 AngleFromNorth 方法中處理的:根據兩個point,就會返回一個連接這兩點對應的一個角度關系, AngleFromNorth 方法的實現如下所示:

static inline float AngleFromNorth(CGPoint p1, CGPoint p2, BOOL flipped) {
CGPoint v = CGPointMake(p2.x-p1.x,p2.y-p1.y);
float vmag = sqrt(SQR(v.x) + SQR(v.y)), result = 0;
v.x /= vmag;
v.y /= vmag;
double radians = atan2(v.y,v.x);
result = ToDeg(radians);
return (result >=0 ? result : result + 360.0);
}
提醒: angleFromNorth 方法並不是我的原創,我是直接從蘋果提供的OSX示例clockControl中拿過來用的。

在上面的代碼中,獲得了角度值以後,將其存儲到 angle 中,然後更新一下textfield的值。

接著調用的 setNeedDisplay 是為了確保 drawRect 被調用,以盡快在界面上做出相應的更新。

1.2.3 結束跟蹤

當跟蹤結束的時候,會調用下面這個方法:

-(void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event{
[super endTrackingWithTouch:touch withEvent:event];
}
在本文中,我們並不需要override該方法。如果當用戶完成控制項的界面操作時,你希望做一些處理,那麼該方法會非常有用。

1.3 Target-Action模式
至此,圓形滑塊控制項可以工作了,你可以drag手柄,並能看到textfield中值的改變。

發送action——控制項事件

如果希望自己定製的控制項與UIControl行為保持一致,那麼當控制項的值發生變化時,需要進行通知處理:使用 sendActionsForControlEvents 方法,並制定特定的事件類型,值改變對應的事件一般是 UIControlEventValueChanged 。

蘋果已經預定義了許多事件類型(Xcode中,在UIControlEventValueChanged上 cmd + 滑鼠單擊 )。如果你的控制項是繼承自UITextField,那麼你可能會對 感興趣,如果你要做一個touch Up action,那麼可以使用UIControlTouchUpInside。

如果你注意的話,在本文前部分的continueTrackingWithTouch方法裡面,我們調用了 sendActionsForControlEvents 方法:

[self sendActionsForControlEvents:UIControlEventValueChanged];
這樣處理之後,當控制項值發生變化時,每一個對象(觀察者——注冊該事件)都會收到響應的通知。

Ⅸ 在VC中MFC,新建對話框該如何建立控制項啊(比如static text , edit box等等)

|可以在工具箱中來點擊對源應的圖標。然後在對話框上畫出即可,如動態創建,如cedit,
CEdit* pEdit = new CEdit;
pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
CRect(10, 10, 100, 100), this, 1);

Ⅹ edi文件閱讀問題,急急急

EDI是電子數據交換,是數據存在的一種形式,為了方便數據交換,他有自己的標准,用得比較多的是x12(美國標准)和Edifact(聯合國標准),你可以用記事本或者寫字本等文本文件打開edi文件。

EDI由一個個的segment組成segment都由一個個element組成。為了方便說明,我們先看一個edi的片段(打開你的edi後,你可以看到相似的片段):

.......
NAD*BY*Wal-Mart~
NAD*SE*ABC~
......

第一個NAD的一行是一個segment(segment用~隔開),NAD是segment的名稱, BY和Wal-Mart是它的element,用*隔開。BY是buyer(買家)的縮寫,Wal-mart(沃爾瑪)是buyer的名字。他說明了買家是walmart.同樣第二行描述的是SE(SELLER,賣家的信息)。由於edi的segment和elment可以根據不同的事務,去定義是否需要,所以所有的edi都是有一個文件去說明他的segment和element的詳細信息的。所以我們只有擁有了這個文件才能知道EDI是拿來干什麼用的。

對於oa人員來說等非專業人員,本身往往無法明白edi的內容,但是不要忘記edi的作用是什麼?是數據交換,軟體人員會根據edi的說明文件,去編寫edi的轉換系統,把edi裡面的數據轉化為表單,pdf,網頁等形式,這樣oa人員就很容易去閱讀理解了。

如果你是oa人員,請問一下相關的軟體人員吧,看看是否你們的oa系統有這樣能夠轉化edi數據的系統。

熱點內容
丁度巴拉斯情人電影推薦 發布:2024-08-19 09:13:07 瀏覽:886
類似深水的露點電影 發布:2024-08-19 09:10:12 瀏覽:80
《消失的眼角膜》2電影 發布:2024-08-19 08:34:43 瀏覽:878
私人影院什麼電影好看 發布:2024-08-19 08:33:32 瀏覽:593
干 B 發布:2024-08-19 08:30:21 瀏覽:910
夜晚看片網站 發布:2024-08-19 08:20:59 瀏覽:440
台灣男同電影《越界》 發布:2024-08-19 08:04:35 瀏覽:290
看電影選座位追女孩 發布:2024-08-19 07:54:42 瀏覽:975
日本a級愛情 發布:2024-08-19 07:30:38 瀏覽:832
生活中的瑪麗類似電影 發布:2024-08-19 07:26:46 瀏覽:239