發表文章

目前顯示的是 2013的文章

Convert Excel column to integer funtion with Delphi

See also: How to convert a column number (eg. 127) into an excel column (eg. AA)


Delphi code below:
function ColumnNumber(A_ColAddress: string): Integer; var _Digits: array of Integer; _Pos: Integer; _Mul, _Res: Integer; begin SetLength(_Digits, Length(A_ColAddress)); for _Pos := 0 to Length(A_ColAddress)-1 do begin _Digits[_Pos] := Ord(A_ColAddress[_Pos+1]) - 64; end; _Mul := 1; _Res := 0; for _Pos := Length(A_ColAddress)-1 downto 0 do begin _Res := _Res + (_Digits[_Pos] * _Mul); _Mul := _Mul * 26; end; Result := _Res; end;

Visual Studio 主題和配色

DataSnap Server 開發上可參考的資源

使用 DataSnap 開發,是否要選擇 HTTPS?

圖片
最近和我們家的網管討論 WebService 應該用 TCP/IP 還是 HTTP。

但意外的是,我們家網管推薦使用 HTTPS 開發

但我想他應該沒想到後續的域名、金鑰賞味期限製作有多麻煩

不過更重要的是數位簽章的費用啊啊啊 >"< |||

ASP.NET 使用 Active Directory 驗證時的注意事項

參閱:
Building Secure ASP.NET Applications: Authentication, Authorization, and Secure Communication建置安全的 ASP.NET 應用程式:驗證、授權和安全通訊細說ASP.NET Windows身份認證
ASP.NET 專案:
Web.Config 中的 【system.web】段增加

IIS 網站設定:
允許匿名登入 + 帳號使用 AD 內成員和密碼

至於 IIS 要不要加入網域……
自己試試看吧。  ^___^


分享基於 SOAP 的 3-Tier 開發範例 及 觀後心得

某個日本公司寫的一個關於 SOAP 的分散式開發專案範例
網址:3層スタイルC/Sアプリ作成術サンプルソース

目前看了下範例後有一些簡單的想法。

充分利用 ClientDataSet 的 XML 特性,與 SOAP 完美搭配。 一樣是 C/S ,更重要的是已經 3-Tier 化了。傳統 2-Tier 下資料庫裸露在外的問題已不復見了。 開發上也不需考慮 DCOM +Socket / HttpSrvr 等搭配技術的實現,架構上顯得是相對乾淨,以及在Delphi 3 - XE n 都能夠被實現的技術。標準的無狀態 (Stateless) 的 3 層架構。(不過 SOAP 是允許有狀態 (Stateful) 實現的)SOAP 是非常成熟的 Web Service ,也就表示它的問題和 DataSnap 相比下顯得較無缺失些。多種連線方式成為可能,只要重載函式 (overload) ,就能夠讓後端使用多種 DataSet ,不論是 ADO, DBX 還是未來的 FireDAC 都能夠銜接這個框架。SOAP 的效率實在是很差,連接的成本太高,還沒開始傳封包呢!按照範例中的 Readme.txt 解釋,在多人連線上似乎會有衝突,還有調整的必要性,畢竟只是 DEMO 。可能還有些關鍵被隱藏起來了吧。  在不考慮 Socket / HttpSrvr 的問題 (?) 下,DataSnap 開發無狀態的應用程式還是相對簡單。 不過好像沒有文獻顯示SOAP Service可以承載多少 Client 同時在線。這部份可能完全取決在 HTTP Service 上?

Day11 RAD Studio XE5 iOS / Android Message Alert 的三種方法

圖片
按照 Embarcadero 公司所提供的 Demo 中,有一個 MessageAlerts 的範例。

很好奇的打開來看,居然是以前在 Win32 中的:
1. ShowMessage
2. MesssageDlg


和以前 VCL framework 的呼叫方式如出一轍

這樣學習壓力就降低很多了啊!


緊接著還有自製的訊息視窗:
3. RAD Studio XE5 -- Creating a custom MessageBox

於是便如法泡製的接在原來的 Demo 後面。






 實際呈現效果還蠻炫的!有機會可以多多嚐試看看。  ^____^

Day10 RAD Studio XE5 的 DataSnap

今天原本是想寫個 DataSnap 的 Demo
可是無意間找到了這個網站:
iOS Apps 分散式系統建置興導入

於是今日一整天就在這個網站研習囉~~~ ^_^

Day9 RAD Studio XE5 FireMonkey 兩種 Layout 的方法 -- Grid 和 Flow

圖片
Grid 和 Flow 兩個都是擺放多個物件對齊的好工具,這兩個容器最大的不同點在於:

Grid: 可擺放多個相同大小的物件容器。
Flow: 擺放多個,但寬度不一定相同的物件容器。

原廠的教學在此:
Tutorial: Using Grid and Flow Layouts in FireMonkey FM2

實際成果圖如下:



Day8 RAD Studio XE5 為 App 加入手勢功能

圖片
承襲VCL的手勢功能
讓 TabControl 和 GestureManager 及 TAction 綁定,再決定要使用什麼樣的手勢。

實作上意外的很簡單的手勢功能。 ^___^

Day7 使用 LiteDAC 仿造一個 IBLite 的 Demo

圖片
在 EMBT 的 Youtube 中有一段 Demo 是在描述 dbExpress with IBLite 的範例

看起來很是麻煩,畢竟是單向資料集,需要用很多元件才能達成存取的目的。

使用 LiteDAC 時,就像在 VCL framework 的 2-Tier 下一樣簡單,底下是範例 Code
procedure TForm1.AddButtonClick(Sender: TObject); var DeptName: String; NewDeptNo: Integer; begin try if InputQuery('Enter New Dept Name', 'DNAME', DeptName) and not (DeptName.Trim() = '') then begin LiteQuery1.Last(); NewDeptNo := LiteQuery1.FieldByName('DEPTNO').AsInteger + 10; LiteQuery1.Append(); LiteQuery1.FieldByName('DNAME').Text := DeptName; LiteQuery1.Post(); LinkFillControlToField1.BindList.FillList(); end; except on e: Exception do begin ShowMessage(e.Message); end; end; end; /// procedure TForm1.DeleteButtonClick(Sender: TObject); begin try if LiteQuery1.Locate('DNAME', ListView1.Selected.Text, []) then LiteQuery1.Delete(); LinkFillControlToField1.BindList.FillList(); except on E: Ex…

Day6 FireMonkey 的幾個樣版

圖片
在新建立的專案中,Blank Application 是最常用的樣版,但 Header / Footer 和 Header / Footer with Navigation 實際上到底能不能用 Blank Application 做出來?

直接看看 Header / Footer 樣版的結構吧。
非常直白的三個元件 - Footer(TToolbar) + Header(TToolbar) + Label(TLabel)
如此就能構成一個帶有頭和尾的專案,就算用 Blank Application 先建立也不過是拉三個元件的時間。


再來看看 Header / Footer with Navigation 樣版的結構。
和原先的H / F很接近,主要是多了 TTabControl 這個頁面管理元件
和 VCL 裡的 TPageControl 很接近。

嗯,所以可以參考樣版來設計屬於自己的 Blank 專案。一面加強對 FireMonkey 元件的熟悉度。

Day5 LiteDAC - iOS開發的利器

圖片
當窮得只剩 PC 的時候...那就戰到不能戰為止吧!

在 iOS 應用程式部屬到設備上時有個很嚴重的限制:
就是在發佈應用程式時不能附帶任何的 libraries (*.dylib) 。

難道在資料庫的存取上就只能走 DataSnap 嗎?

當然不是,我們還可以使用 iOS 內部支援的 SQLite 當作本機資料庫使用,現在就來介紹新的工具吧 -- LiteDAC!

Devart 的 DAC 元件群(ODAC、MyDAC、PgDAC、IBDAC、UniDAC 和 LiteDAC)有個最大的特色,就是它不需要任何的 libraries (*.dylib),就可以直接存取資料庫。

今天就初步來介紹本次的主角 -- LiteDAC!

使用上非常的輕鬆,底下是原始碼:


procedure TForm1.FormCreate(Sender: TObject); var _Count: Integer; _Temp: TLiteQuery; begin _Temp := TLiteQuery.Create(Self); _Temp.Connection := LiteConnection1; LiteConnection1.Options.ForceCreateDatabase := True; LiteConnection1.Database := IncludeTrailingPathDelimiter(TPath.GetDocumentsPath) + 'emps.sqlite'; LiteConnection1.Connect(); _Temp.SQL.Text := 'SELECT count(*) FROM sqlite_master WHERE type=''table'' AND name=''DEPT'' '; _Temp.Open(); _Count := _Temp.Fields[0].AsInteger; _Temp.Close(); if _Count = 0 then begin _Temp.SQL.Text := '' +'CREATE TABLE DEPT '…

Day4 RAD Studio XE5 第一支快快樂樂學寫手機程式誕生

圖片
非常快速的寫了一支Demo程式
真的很快啊!

可是在Android上卻發生沒有回應的問題
嗯……這該怎麼辦呢?


Day3 RAD Studio XE5 的 C++ ... 還是先從 Delphi 開始練習好了

圖片
不知道為什麼 C++ Builder 老是出怪手,不過我也沒時間 Debug 它了
等它的正式版推出了再回過頭來測試吧。

再來看看 Delphi 的實作狀況:

果然是順多了,沒有怪怪的異常訊息,和ClientDataSet也能夠正確 Binding 。

明日再來試著 ApplyUpdate 的實作

Day2 RAD Studio XE5 資料庫連線測試

圖片
因為測試時間不多
所以想快一點連線到資料庫

但…dbExpress怎麼突然都連不到資料庫了?

所以來到了 Devart 網站尋求支援了


搭配了 Firebird 2.5
底下 Devart dbExpress for Firebird 的連結畫面


好不容易裝好,卻在Compile時出現以下的錯誤

奇怪…照著手冊上的教學卻出錯了,不知道是哪裡的問題
總之,先這樣吧!

Day1 RAD Studio XE5 前置準備

圖片
首先就是準備下載 RAD Studio XE 5 ,準備進行 30 天的試用
以及準備一台 MAC 進行模擬測試

究竟 30 天可以玩出什麼東西呢?


我也不知道

總之,先做了再說吧 ^___^

FireMonkey框架核心概念是 LiveBinding 和 dot NET / Flex 所指的 Binding有異曲同工之妙

但我還是喜歡 Flex 的全時 Binding 的概念

FireMonkey / dot NET 都是一次性 Binding 的概念
如果資料異動了就需要重新 Binding …… 這和 Binding 的本意不太一樣吧 哈哈

在使用行動平台前,先用 C++ Builder 來試試看吧


[轉]在asp.net中使用javascript中alert的三種方法

HTML Table標籤教學網站

學習Excel XP Components的網站

Automating Microsoft ExcelExcelの書式設定を行うDelphi 调用 Eexcel方法要点Re: Excel fernsteuerun mit OLE: TExcelChart Objekt★★★★★ 太精華了!

以下這個內容好重要嘿!
==================
对Excel单元格的访问通常是使用Range属性,其调用格式如下(以下都正确): // property Range[Cell1: OleVariant; Cell2: OleVariant]: ExcelRange read Get_Range; ExcelApp.Cells.Range['A1:C2', EmptyParam].Value := 'ab'; ExcelApp.Cells.Range['A1', 'C2'].Value := 'ab'; ExcelApp.Cells.Range['A1:C2', EmptyParam].Value2 := 'ab'; ExcelApp.Cells.Range['A1', 'C2'].Value2 := 'ab';
但是奇怪:参数Cell1, Cell2不能为数字,也不能为Null,否则会报 “OLE error 800A03EC.” 的错误!

Dbexpress driver is Thread Safe?

這陣子在為Dbexpress Driver for SQL Server的選擇在測試著,進行到Debug DataSetProvider.OnBeforeUpdateRecord事件時,卻意外的發現各家的Driver在對Thread使用上的處理都不盡相同,於是做了點小小的研究。

DataSnap 應用中 Variant 會傻傻分不清 NULL 和 Empty String 的問題

這個問題會在 Delphi 7 ~ 2009 版本上出現,官方雖然說在 Delphi2009 的 SP4 (Database pack update) 上修正完成,但實際上卻是依然無解。