發表文章

目前顯示的是 2018的文章

關於WPF裡面動態圖片(Animate Image)和靜態圖片(Static Image)並存問題

圖片
要在 WPF 程式上顯示一般圖片(BMP、JPG、PNG、GIF..) 都不是甚麼太大問題,大概像下面一樣用 image 標籤即可。 <Grid>     <Grid.ColumnDefinitions>         <ColumnDefinition/>         <ColumnDefinition/>         <ColumnDefinition/>     </Grid.ColumnDefinitions>     <Grid.RowDefinitions>         <RowDefinition/>     </Grid.RowDefinitions>     <Image Grid.Column="1" Grid.Row="0" Source="D:\MyImages\Taiwanmap.jpg"/> </Grid> 但遇到動畫圖檔 GIFa 就是一件麻煩事了。 這個 image 標籤遇到 GIFa 就只能顯示第一張畫面,然後也不會有動畫。 <Image Grid.Column="1" Grid.Row="0" Source="D:\MyImages\ cutecoupletogether.gif "/> 我的目的是需要的是在同一種圖像元件標籤下,能夠同時顯示動畫或是靜態圖片的方法。 也就是說如果我要做一個圖片展示區或清單(動態生成),就很難去依照圖片類型一直去更換樣版標籤,所以我希望一種標籤就能夠解決問題。 能夠支援的標籤類型當然不是只有 Image,還有很多種方法: (底下標籤都會加上 Grid.Column 和 Grid.Row 屬性,因為我會放在上面 Grid 版面上的) 1、 MediaElement 標籤 ,他也可放置靜態圖片或動態圖片,但這個標籤早期只能支援URI方式提供來源,不過 .NET 4.0後 好像就改成可以放置路徑。 我試圖在 MediaElement 放置 gif 圖片 &

WPF 的 MVVM 測試

圖片
甚麼是WPF WPF(Windows Presentation Foundation) 簡單的說是一種把UI跟程式碼拆開來做的windows應用程式,早期UI的設計與動作都會和程式碼扯上關聯(因為程式碼寫在UI裡面),導致做美編的人員要動到畫面設計時,還得小心考慮到每個物件裡面的程式碼。而微軟在2006年的.NET Framework 3.0以後,重新去定義Windows APP設計的方向與概念而訂製了 WPF 架構。 我想有在設計android程式的人大概見怪不怪了,畢竟android程式的設計就是如此的,UI跟程式碼本來就是分開在設計的。當然習慣於舊式Coding的程式設計師還是會有點難以適應的,因為它不是『直覺』去設計程式的,而是透過『分析』→『模組化』→『開發設計』這種方式去進行開發的。 雖然WPF也可以用比較傳統方式去開發(把各種程式碼寫在UI的片段下)。 但由於『模組化』才是WPF的精隨 ,所以一開始就栽進 M-V-VM 的環境,對於將來開發會比較有幫助的。 網路上也有不少資料可以參考,我這邊就以我 自己的想法去解釋 ,如一開始的圖片。 Model : 主要負責資料結構 (Data Model:Data Structure)的建立或與資料庫連結的存取(DAL;Data Access Layer)的各類模組化都是由這一層負責處理。 View : 主要負責畫面的設計與成型 ,它是一個 .xaml 的 XML 描述檔案,這個描述檔案描述了畫面個元件如何擺放與屬性等,通常它會搭配一個 .cs 的程式碼檔案,雖然可以把程式碼寫在 .cs 裡面,但為了把運算邏輯分離,所以盡可能不要寫入任何與畫面無關的程式碼,甚至根輸入有關的互動運算邏輯也不應該寫在這裡。 ViewModel : 這個才是View的邏輯核心 ,通常一個View會搭配一個ViewModel,而這個ViewModel負責 View 的資料保存(輸入或是顯示用)與畫面元件的互動或是指令,例如按鈕的行為、輸入資料後的自動動作等等,都是在這個模組去完成。透過 View 與 ViewModel 進行結繫(Biding)的方式,也可以讓 View 接收 ViewModel 傳回來的事件要求。 基本型: 假如我需要一個可以輸入產品名稱、數量、成本 與計算小計的功能。 所

由網頁呼叫本機端列印方式

圖片
※本篇會參考使用到  將 RDLC 報表不需預覽直接列印(Print RDLC Report without Preview) 部分程式實作方式,重覆部分不再說明。 現在,很多系統都是開發成為 WEB 型態(也稱雲端平台之類...)。 因此,只需要 Browser (瀏覽器) 即可進行系統操作。雖然有很大的便利程度,但是現實中還是會面臨到一些問題,像是 I/O控制等。這是因為受限於 瀏覽器的安全性不得直接讓程式碼介入系統控制,以免被駭客入侵等.... 但這也造就許多問題 ...... 撇開其它不談,就以我們常見的列印來說好了。 也許大家都知道,瀏覽器也是可以列印的啊,不管是直接列印,或是輸出成PDF列印等等。 但所謂不在其位不知其苦,部分行業或是以目前台灣推行的電子發票的列印格式(奇特格式),基本上瀏覽器列印就做不到了。 目前,有接觸過幾家廠商在做這類的系統,遇到電子發票列印實的做法怎麼處理呢? 當然回歸老路囉........ IE + ActiveX ....... 說真的,我有點語塞了。 怎麼有種回歸到 IE 綁架的時代的 Feel 呢? IE only 都會遇到 Windows 重大改版後導致 IE不支援繼續更新會始操作版面出現怪異現象 ,然後 ActiveX 有無法移植到其它瀏覽器(Chrome/FireFox/Safari/Opera...)的問題存在。 當然不是沒有辦法解決,只是台灣可能很多軟體公司面臨賺錢問題,不太願意花太多時間/金錢做研究是擺明事實(IT行業是個很燒錢的行業,由其它的RD部門更是如此),既有技術能快速上手開發賺錢,憑甚麼不做? 有天,在研究 MIT 開發的 Android App 開發(MIT app inventor) 介面得到了很棒的靈感(外國都已經行之有年了) 技術上,大致就像一開始的圖一般: 那個齒輪狀的東西就是一個本地(使用者電腦上的)一個程式或是服務,它提供了基本的 HTTP 通訊能力用來接收指令,並控制印表機。 通訊圖 所以,我有一台伺服器 www.myweb.com.tw 提供了作業頁面 localprint-test.html <html> <head> <meta http-equiv= "

RDLC 報表不預覽直接列印(Print RDLC Report without Preview)

圖片
RDLC 報表在使用時,一般情況下都會開啟預覽畫面,再按列印才能列印出來。 但是如果設計的程式沒有畫面呢?(Console Mode / Service Mode) 所以,這次我就使用 Console 程式設計方式把報表列印出來,並且使用 Class Data Mode 方式處理資料,不使用 RDLC 報表直接連接資料庫。 由於我使用的是 Visual Studio 2017,本身以不含RDLC報表設計功能,所以必須先到 NuGet 安裝 『Microsoft.ReportingServices.ReportViewerControl.Winforms』 這裡測試的方式是把一篇文章(SourceDoc.txt)讀取出來,然後放到 Report1.rdlc 做成的版面上,然後再將它印出來。 1、建立 DataModel.cs 用來儲存資料 namespace PrintRDLCWithoutPreview {     class DataModel     {         public int no { get; set; }         public string line { get; set; }     } } 2、先進行方案的建置,因為RDLC要使用Class Model 資料來源時,需要建置過才能看到。 3、建立 Report1.rdlc 展開專案後可以看到自己定義的 DataModel.cs,選擇它作為資料來源 注意資料集的名稱,待會設定 DataSource 需要用到 拉取要顯示的欄位到需要顯示的類型,由於我們只有文字資料,所以只有拉『line』到顯示『值』上面 如果不需要統計值,直接『下一步』即可 調整位置與版面 4、需要用到的參考,由於會使用到Draw和winform集合的功能,所以必須引入 5、 記得 資料檔案和 RDLC 檔案必須將屬性設成『 一律複製 』,才不會發生找不到檔案問題 6、程式碼(說明在注解上) using System; using System.Collections.Generic; using System.Text; using Syst