公告資訊

未經授權,禁止轉載網站文章與內容。如有需要可以跟我聯絡,謝謝!!




2008年9月20日 星期六

Silverlight 2.0 線上講堂通知(09/20)

原本計畫要在這一個月多寫一些內容的,但因為我在恆逸資訊有很多課,加上異位性皮膚炎發作要多休息,所以最近就沒有很多時間可以維護線上講堂的內容。謝謝很多朋友透過線上以及Email來關心線上講堂的進度,你們的問題我也都會盡快回覆給各位。

在這裡先通知各位線上講堂的同學,下個星期(9/21~~9/26)我休假去了,所以無法在線上回答各位的問題,同時線上講堂也休息一星期。如果你有任何的問題,仍然還是可以透過Email跟我聯絡(john_chang@uuu.com.tw),我會在回國之後盡快回覆的,謝謝。

2008年9月19日 星期五

Microsoft Online Services

你對於建置系統這檔子事累了嗎 ?

為了實現軟體即服務(SaaS),微軟現在提供了許多的線上軟體服務 -- Microsoft Online Services,讓中小企業的 IT 人員,可以花最少的時間與建置成本,就可以直接線上使用微軟的產品,建置企業所需要的解決方案。這些線上產品包括了:

  • Office Live Meeting
  • Exchange Hosted Service
  • Exchange Online
  • Sharepoint Online
  • Office Comminications Online
  • Dynamics CRM Online

透過這些線上的產品,將來中小企業的 IT 人員就不需要在公司中安裝跟維護這一些產品,相對的也可以節省更多的建置成本 !

除此之外,SQL Server目前也提供了免費線上存取的資料服務 -- SQL Server Data Service (SSDS),讓MIS人員可以將程式中的資料,直接存放在微軟所提供的線上資料庫當中。換句話說,對於中小企業而言,將來只需要購買SDSS的服務,就不需要再去採買、維護SQL Server資料庫所需要的伺服器 ! 而目前SDSS提供了免費註冊使用的Beta 版,想要使用微軟雲端運算架構建置系統的開發人員,不妨去試用看看!!

而在不久的將來,微軟的產品BizTalk Server、Windows 作業系統等,也都會可以透過這種方式使用;對於系統操作、管理、開發方式等,微軟的雲端運算的SaaS架構都會帶來重大的改變 !

問題與回應(09/19)

1.

不好意思~我是一個想自學Silverlight的學生,我想請問一下八月那篇的講堂14的最後小練習:

3. 接下來,將 MyCarouselWeb測試專案當中的HTML測試網頁開啟。
開啟後將網頁中的<object> ... ...</object>標籤範圍中的內容,
複製到TimeSampleWeb網站的測試網頁的HTML內容中。

問題是:我把<object>標籤的內容全部貼到TimeSampleWeb html的<object>裡面

不過跑出來還是只有TimeSample的效果而已
我也把MyCarousel的XAP檔加到ClientBin裡面了
是否貼的位置不對呢?

這是我MyCarousel的object標籤內容

<object data="data:application/x-silverlight," type="application/x-silverlight-2-b2" width="100%" height="100%">

<param name="source" value="ClientBin/MyCarousel.xap"/>
<param name="onerror" value="onSilverlightError" />
<param name="background" value="white" />
<a href="http://go.microsoft.com/fwlink/?LinkID=115261" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
</a>
</object>

這是我TimeSample的object的標籤內容

<object data="data:application/x-silverlight," type="application/x-silverlight-2-b2" width="100%" height="100%">

<param name="source" value="ClientBin/TimerSample.xap"/>
<param name="onerror" value="onSilverlightError" />
<param name="background" value="white" />
<a href="http://go.microsoft.com/fwlink/?LinkID=115261" style="text-decoration: none;">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
</a>
</object>

後來我發現這兩個標籤檔的內容幾乎一樣~所以我把<param name="source" value="ClientBin/TimerSample.xap"/>的TimerSample.xap改成MyCarousel.xap
沒想到還是跑出TimerSample的效果= =

==>

這問題發生的主要原因,就是因為在VS 2008專案預設建立的測試頁中,會將Silverlight的控制項的width與height屬性預設都設為100%,因此你只需要將網頁中的兩個<object>標籤的width跟height屬性調整成Silverlight表單的大小即可。

順便記住下面的這一個小技巧:

將Silverlight 2.0 表單嵌入網頁中使用時,記得根據網頁顯示需要,調整Silverlight控制項的width與height屬性 !

2008年9月11日 星期四

瀏覽器之戰? 你錯了....

9/3 號,Google發表了Chrome瀏覽器測試版以來,很多人以為以後將會是Google瀏覽器對抗IE的時代,但是事實是這樣的嗎?

如果你有安裝Chrome瀏覽器,你會發現到主要的功能其實跟Firefox差不多(目前為止)。根據Google的說法,未來Chrome瀏覽器將採開放式的架構,針對用戶端提供更穩定、快速的瀏覽效果。但我覺得更重要的是,在Google瀏覽器當中,提供了一個新的JavaScript Engine-- V8。

關於V8,你可以參考Google V8 JavaScript Engine的說明。簡單的說,這一個新的JavaScript Engine最主要的特點,包括:

1. 更快,你可以參考Benchmarks的資訊

2. 可將JavaScript編譯成機器碼執行

"There are no intermediate byte codes, no interpreter.",

"This greatly improves the speed at which most JavaScript code can be executed."。

3. 更有效率的資源回收機制(Garbage Collection)。

注意到重點了嗎? 很多人都將Google推出瀏覽器的重點擺在跟IE比較功能與穩定性,但這有啥好比較 ? 目前IE 8還沒有正式推出,唯一有新功能的瀏覽器是Firefox 3.0,要比也是先跟Firefox比,IE 有啥可以比的?

Google瀏覽器推出的真正的意義,應該是Google宣示要開始在用戶端程式環境的部分,正式開始跟微軟一別苗頭了! 長久以來,Google致力於開發與提供網路服務平台;而用戶端的環境,則是一直由微軟所掌控(參考Windows作業系統的市占率)。但是隨著網際網路開發技術的發展,"作業系統" 的作用,慢慢的簡化成為開機用的程式而已。換句話說,在Browser + Web Service(SaaS)的架構發展完成之後,用戶端程式開發的重點,就變成要使用哪一種 "技術" 來建立使用者操作介面與用戶端的功能

若是你使用過Chrome瀏覽器瀏覽www.silverlight.idv.tw,你會發現SIlverlight 2.0的應用程式沒有辦法正常的執行。換句話說,雖然Chrome是使用公版(開放原始碼計畫Webkit)下去發展的,但是實作的部分卻不一樣。所以未來微軟若是要將Silverlight 2.0 術推廣到Goole瀏覽器上面的話,勢必要再推出一個新的Silverlight安裝套件的版本。然而,微軟會為每一種瀏覽器,都提供Silverlight的安裝套件嗎?

這問題我就暫時不回答了,但是從V8的JavaScript引擎的架構來說,從編譯成機器碼到提供資源回收器這些特性來說,都和Silverlight 2.0執行環境目標差不多 -- 換句話說,Google推出瀏覽器,真正的意義,應該是要在用戶端環境透過JacaScript技術和Silverlight宣戰! 兩者之間目前的差異:

1. Silverlight 2.0 提供了比較方便的開發、設計環境。

2. JavaScript提供了跨不同瀏覽器平台,用戶端不需要安裝額外套件就可以執行的能力。

若是從本質上看來,就類似從前的JavaScript技術與Activex Control技術的對抗 -- 只是這次JavaScript技術有Google加持,Silverlight有.NET做後盾,那一種技術會成為主流,我想未來的半年,會是一個關鍵。不過微軟這次兩邊都押寶(ASP.NET AJAX、Silverlight 2.0),因此了不起最多輸一半,也不至於會在用戶端的開發技術中出局就是了.....

2008年9月9日 星期二

問題與回應(09/09)

Brian來信問了一些問題,也有人問過類似的問題,所以統一回應一下:

1.

當我初始化一個控制項後,我可以對控制項作move嗎? (所有的控制項都這樣嗎?)

我舉一個例子, 假如我有個textbox, 當我page load 時 已經出現在page中,

如果我想讓滑鼠拖曳著textbox可以在page上動,請問做得到嗎,我有自己試過,但是不像image, rectangle...那麼好處理

==>

要開發拖曳的功能其實一點都不難,只要透過滑鼠事件處理一下就可以了:

下次線上講堂再插入一堂課來教各位好了,不過程式碼很簡單,你可以參考SDK自己先開發看看。我在My Windows Desktop專案中把這功能做到元件當中,你可以下載這一個組件:

然後加入參考到Silverlight專案當中,在Page的建構子中將需要支援拖曳的控制項加入Canvas控制項,然後將控制項名稱傳入RegisterDragDrop方法中:

public Page()
{
    InitializeComponent();
    MyExtenders.MyWindows.RegisterDragDrop(txtName);
}

這樣就可以了。

(不過這一個組件還在開發中,因此暫時提供給各位的是還沒有final的版本)

2.

有沒有教學的網站或是sample 是在教如何customize 控制項的 另外自訂的控制項如何讓silverlight 參考到

(是當成silverlight的resource嗎)

==>

自訂控制項的部分,線上講堂後面會安排課程介紹;另外,你也可以參考Silverlight 2.0 SDK,裡面也有介紹作法。。不過在你要自訂控制項之前,可以先思考一下:

"我要擴充的是功能,還是操作介面 ?"

"真的有需要重複使用嗎 ?"

"自訂控制項對效能有多大的影響 ?"

如果你只是要使用Silverlight 2.0 開發一些有動態效果的Banner,我建議你一般不需要自訂控制項--除非你是要發展Rich Client的應用程式或是要賣Silverlight 2.0擴充元件。

3.

上禮拜麻煩你做一個textbox sample, 當我滑鼠沒按到textbox 時 textbox是沒有邊框的

當我按到textbox時 textbox 邊框是虛線 ,如果來得及的話,可以教一下我 我還是沒辦法從blend2 to silverlight project做出來

==>

請參考Silverlight 2 線上講堂 -21:淺談控制項外觀效果,謝謝。

Silverlight 2 線上講堂 -21:淺談控制項外觀效果

上個星期有位Brian朋友在線上問我,如何在使用者滑鼠移到TextBox控制項的時候,在TextBox控制項的外面顯示虛線的框線,提示使用者輸入資料。Brian說,想用繼承的方式建立一個自訂的TextBox控制項,然後再去客製化外觀。我一聽,天啊! 千萬不要有這樣的想法!! 趕緊先加了一堂課來為各位說明一下外觀的控制技巧。

在建立Silverlight 2.0應用程式外觀的時候,各位千萬要記住一句話,那就是:

"外觀要用設計師(Designer)的想法來思考!!"

不要動不動就想到元件,想到繼承,然後把簡單的事情給複雜化。如果是物件導向跟繼承、override就可以解決的事,交給VS 2008就好了,要Expression Blend做啥?

要做出Brian想要的效果,其實很簡單,讓我們來看看技巧在哪:

1. 首先,我們要先用一些設計工具"畫"出虛線的外框,開啟小畫家。

2. 你沒聽錯,就是Windows內建的--"小畫家"。

3. 將畫布調整成適當的大小(大約比TextBox控制項大一點),然後選取填入色彩按鈕( 快照2 ),再從色盤中選取黑色,再點選畫布,將畫布填滿黑色:

快照1

4. 選取圓角矩形按鈕( 快照3 ),在下方選取粗一點的框線,然後從色盤中選取你喜歡的顏色,最後在畫布中建立矩形區域:

快照4

5. 接下來選取粉刷工具( 快照6 ),然後選取矩形的筆觸,然後從色盤中選取黑色:

快照5

6. 接著,在畫布上的矩形上,每隔一段間隔圖上黑色,虛線的框線就完成了:

快照7

7. 將這一個圖檔存成View.jpg。然後使用VS 2008新增一個Silverlight應用程式專案,取名為MyTextBox。

8. 使用Expression Blend 2.5設計工具開啟MyTextBox專案,將<UserControl>標籤中的子元素(預設是Grid)換成Canvas,並且將大小設為400x100,底色為黑色。

9. 在[Project]視窗中選取MyTextBox專案,按下滑鼠右鍵選取[Add Existing Item...],將View.jpg加入專案當中。

10. 將View.jpg從[Project]視窗中拖曳到畫布上,此時Blend設計工具會自動建立Image控制項。調整Image控制項到適當大小,然後到[Properties]視窗中設定Image控制項的Name屬性值為imgBorder:

快照8

11. 將TextBox控制項加入表單中,放置在Image控制項的框線範圍中,調整成適當大小(可以透過View-->Zoom in幫忙)。然後到[Properties]視窗中設定Image控制項的Name屬性值為txtName,並清除Content屬性的內容。完成的結果如下:

快照10

12. 接下來,選取imgBorder控制項,在[Properties]視窗中設定[Appearance]的Visibility屬性值為Collapsed,隱藏imgBorder控制項。

13. 完成之後,選取[File]-->[Save All],存檔並關閉Expression Blend設計工具。

   ----------------  操作介面設計完成  -------------------

14. 使用VS 2008開發工具開啟MyTextBox專案中的Page.xaml,在TextBox控制項元素中設定MouseEnter事件對應的處理常式,然後按下滑鼠右鍵選取[巡覽置事件處理常式]:

快照11

快照12

15. 在txtName_MouseEnter事件處理常式中,加入顯示imgBorder控制項的程式碼如下:

private void txtName_MouseEnter(object sender, MouseEventArgs e)
{
    imgBorder.Visibility = Visibility.Visible;
}

16. 重複步驟14,建立MouseLeave事件的事件處理常式txtName_MouseLeave。在txtName_MouseLeave事件處理常式中,加入隱藏imgBorder控制項的程式碼如下:

private void txtName_MouseLeave(object sender, MouseEventArgs e)
{
    imgBorder.Visibility = Visibility.Collapsed;
}

17. 完成之後建置專案,然後執行測試網頁。完成的效果如下:

稍微修改一下,又可以有不一樣的效果。例如,讓使用者按下框線矩形區域,才可以輸入資料:

很簡單,不是嗎 ? 不要再去想啥控制項繼承、自訂控制項之類的動作,記住下面的這句話:

"外觀要用設計師(Designer)的想法來思考!!"

你就不會被一些錯誤的觀念,誤導到錯誤的方向,走進死胡同!

2008年9月8日 星期一

問題與回應(09/07)

1.

請問我在XXX講師網站中,看到有介紹可以開發支援輸入密碼的TextBox控制項,但是我按照步驟做出來卻有很多的問題。在您的範例網站首頁中,我看到老師有開發登入表單的功能,請問一下老師是不是有更好的解決方式?

==>

其實在My Windows Desktop專案中,已經做好登入表單的功能--當然也包含可以輸入密碼的TextBox控制項。要製作可以輸入密碼的TextBox控制項程式碼並不難,但是有一些需要注意的"眉角"。如果你是照著他所提供的範例做不出來的話,可能要請你去問XXX講師,看看他是操作步驟寫錯,還是copy了別人網站不完整的範例。

陸陸續續也有很多朋友問我關於控制項客製化的問題,先給大家一個觀念:Silverlight應用程式中,UI的問題不是靠物件導向解決的,千萬不要把問題複雜化。

我的可以輸入密碼的TextBox控制項中還有一些小bug,不過大致上完成的差不多了,有興趣可以先試一下這一個例子:

至於程式碼的部分,會再安排在後面的講堂課程中介紹。

2008年9月5日 星期五

Silverlight 2 線上講堂 -20:使用OpenFileDialog開啟用戶端檔案

在Silverlight 2.0的執行環境當中,除了提供使用者操作介面的動態效果之外,也提供了部分存取用戶端資源的方式,像是可以透過OpenFileDialog開啟用戶端的檔案,以及使用IsolatedStorage暫存區等等。

然而在使用上必須要注意的觀念是:雖然Silverlight 2.0相對於DHTML技術而言,可以算是Rich Client的技術,但是仍然是執行在瀏覽器中的程式,因此無論是在安全性或是存取用戶端資源的動作來說,都受到瀏覽器框架設定的限制。若是你要開發的是可以完整存取用戶端資源的真正Rich Client的程式的話,請使用WPF或是傳統的Windows Form的技術。

接下來的線上講堂,我們將透過前面學過的分散式架構開發技巧,開發可以將用戶端檔案上傳到伺服器端的程式。首先我們先學習使用OpenFileDialog物件,顯示"開啟舊檔"對話方塊的技巧。

1. 使用VS 2008新增一個Silverlight應用程式專案,取名為OpenFileSample。

2. 使用Expression Blend 2.5設計工具開啟OpenFileSample專案,將<UserControl>標籤中的子元素(預設是Grid)換成Canvas,並且將大小設為800x600,底色為黑色。設定完成的XAML組態如下(紅色為調整過的設定):

<UserControl x:Class="OpenFileSample.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="800" Height="600">
    <Canvas x:Name="LayoutRoot" Background="Black">

    </Canvas>
</UserControl>

3. 從Expression Blend 2.5設計工具列中,加入一個按鈕到Canvas控制項中。然後在[Properties]-[Layout]視窗中,將Width屬性值設為400,Height屬性值設為40,Left屬性值設為200,Top屬性值設為40:

快照1

4. 接著,在[Properties]--[Common Properties]視窗中,將Content屬性值設為"開啟文字檔/圖檔";然後在[Text]視窗中,將字型大小設為16:

快照2

5. 將來我們希望可以透過這一個Silverlight表單顯示文字檔或是圖檔的內容,你有兩種選擇:

    a. 先將顯示資料的控制項置入表單當中,再透過Visibility屬性控制顯示的時機。

    b. 當程式執行時再動態的建立控制項,加入Canvas當中顯示。

   若是你有搭配使用者操作介面設計師一起工作,或是沒有其他的動態改變顯示介面需求的話,建議你選擇 a.,因為比較容易控制項顯示的操作介面,同時須要維護的程式碼比較少;若是你有需要像Silverlight 2.0 - My Windows Desktop一樣有很多需要結合程式的動態頁面效果的話,那我才建議你採用 b.的方式。在這一個練習當中我們先教大家 a.的做法,後面進階一點的課程再來教大家。

6. 從工具箱中選取TextBox控制項,然後置放在Canvas控制項上:

快照3

   在[Properties]視窗中將TextBox控制項名稱設為txtData;然後在[Properties]--[Layout]視窗中,將Width屬性值設為600,Height屬性值設為420,Left屬性值設為100,Top屬性值設為130。最後在[Properties]--[Common Properties]視窗中,清除Text屬性值。

7. 完成之後,在[Objects and Timeline]視窗中選取Hide/Show按鈕,在設計工具中隱藏TextBox控制項,以免影像到後面的動作:

快照4

8. 選取工具列中的Assert Library按鈕,開啟[Assert Library]視窗:

快照5

選取[Assert Library]視窗右上角的Show All核選方塊,然後選取Image控制項,加入Silverlight表單的Canvas控制項中:

快照6

9. 在[Properties]視窗中將Image控制項名稱設為imgData;然後在[Properties]--[Layout]視窗中,將Width屬性值設為600,Height屬性值設為420,Left屬性值設為100,Top屬性值設為130。

10. 完成之後,選取[File]-->[Save All],存檔並關閉Expression Blend設計工具。

   ----------------  操作介面設計完成  -------------------

11. 使用VS 2008開發工具開啟Page.xaml,在Button控制項元素中設定Click事件對應的處理常式,然後按下滑鼠右鍵選取[巡覽置事件處理常式]:

快照7

快照8

12. 接下來,我們要在Button控制項的Click事件處理常式(Button_Click)中,加入顯示開啟舊檔對話方塊的程式碼。如果你有在Windows Form當中使用OpenFileDialog控制項的經驗的話,那你將會覺得相當的得心應手。

在Silverlight 2.0應用程式中,OpenFileDialog是定義System.Windows.Controls命名空間中的類別,提供了下面的屬性成員:

Filter 篩選要顯示的檔案類型
FilterIndex 預設篩選的檔案類型
Multiselect 是否允許多選
SelectedFile 使用者選取的檔案
SelectedFiles 允許多選時,使用者所有選取的檔案

設定好之後,只需要呼叫ShowDialog方法,就可以顯示對話方塊了!

13. 再加入更多程式之前,首先先在Page.Xaml.cs程式檔最前面宣告引用下面的命名空間:

using System.IO;
using System.Windows.Media.Imaging;

14. 接下來,在程式碼中建立下面的副程式,根據輸入的檔案類型,開啟檔案並透過TextBox控制項或是Image控制項顯示檔案內容:

private void ShowData(FileDialogFileInfo file)
{
    if (file.Name.EndsWith(".txt")) {
        using (StreamReader reader
            = file.OpenText()) {
                txtData.Text = reader.ReadToEnd();
                reader.Close();
                txtData.Visibility = Visibility.Visible;
                imgData.Visibility = Visibility.Collapsed;
                return;
        }
    }

    if (file.Name.EndsWith(".jpg")) {
        using (Stream data = file.OpenRead()) {
            BitmapImage image = new BitmapImage();
            image.SetSource(data);
            imgData.Source = image;
            imgData.Visibility = Visibility.Visible;
            txtData.Visibility = Visibility.Collapsed;
            return;  
        }
    }

}

其中,輸入參數FileDialogFileInfo的用途主要是用來接收使用者在OpenFileDialog物件中所選取的檔案資訊用的。

15. 接下來,在Button_Click事件處理常式中加入開啟對話方塊的程式碼。首先建立OpenFileDialog物件實體,然後透過Filter屬性設定所要篩選的檔案類型。Filter屬性值必須要設為下面格式的字串:

"檔案類型說明文字|篩選條件"

完成設定之後,再呼叫ShowDialog方法顯示[開啟舊檔]對話方塊。若是使用者有選取檔案,則ShowDialog方法會回傳true,此時再將使用者所選取的檔案資訊透過ShowData方法顯示即可。完成的程式碼如下:

private void Button_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog openFileDialog1 = new OpenFileDialog();
    openFileDialog1.Filter = "Text Files (*.txt)|*.txt|JPEG Files (*.jpg)|*.jpg;
    openFileDialog1.FilterIndex = 1;
    openFileDialog1.Multiselect = false;

    if (openFileDialog1.ShowDialog() == true)
    {
        ShowData(openFileDialog1.SelectedFile);
    }
}

16. 最後,在Page初始化完成之後,加入程式碼將TextBox控制項與Image控制項的Visibility屬性值設為隱藏(Collapsed),程式碼如下:

public Page()
{
    InitializeComponent();

    txtData.Visibility = Visibility.Collapsed;
    imgData.Visibility = Visibility.Collapsed;

}

17. 完成之後建置專案,然後執行測試網頁,就可以透過Silverlight 2.0的表單,開啟並顯示用戶端的文字檔或是圖檔內容了! 下面是完成的結果:

 

但是就像一開始跟各位介紹的一樣,雖然我們可以在Silverlight 2.0應用程式當中開啟用戶端的檔案內容,但是因為瀏覽器框架本身執行環境上的限制,在預設狀況之下我們是無法透過Silverlight 2.0應用程式將檔案再回存到用戶端的檔案系統中。不過這沒有關係,因為這一個表單的主要用途,並不是開啟用戶端的檔案;在雲端運算的分散式架構下,使用者的檔案資料是存放在Server上的! 因此將來擴充這一個表單的功能,就可以提供使用者上載、新增、修改、儲存Server端檔案資料的介面,而在用戶端並不需要安裝額外的軟體! 我想,這才是SIlverlight 2.0表單迷人的地方。

2008年9月3日 星期三

Google的瀏覽器

連Google都已經加緊腳步推出瀏覽器,看來雲端運算的地盤爭奪戰已經開始了.....

瀏覽Google瀏覽器的特點

點選這裡下載Google瀏覽器(Chrome)Beta

最新回應

Loading...

即時與版主對話


(若狀態顯示"忙碌"時,我可能無法馬上回應。你可以留下Email,我會盡快跟你聯絡,謝謝喔!!)