2015年11月27日 星期五

數碼的Shadow技術

近來Delphi的活動不少,廖啟甫先進設計了APP在2015-11-25 行動開發成功案例分享研討會上做了發表,筆者覺得很不錯,在這邊給他推一下。有興趣的朋友可以連結以下的網址
YouTube:
https://www.youtube.com/watch?v=J03O9fwq23Q

另外也推薦一下廖先生的部落格:

http://nolanliao1965.pixnet.net/blog

http://nolanliao1965.blogspot.tw

本週參加這麼多活動,要寫文章有點時間不夠,前一陣子看到了另一位Delphi先進寫的部落格 大匠之風 覺得他在寫他進入程式設計這領域的文章很好玩,突然覺得好像有系統的介紹一些技術也是一種可行的方式。

最近在寫公司的專刊文章,其中Shadow技術對如何善用別人的Delphi程式碼,算是一種新的技術應用。當然不一定每個人都需要,不過不一定要用我們家的產品才可以善用別人的程式碼。觀念是可以四處用在適合它的地方,只要你瞭解它。

有興趣的朋友可以參考一下

數碼的Shadow技術

2015年11月21日 星期六

DELPHI做EXCEL的加總

我們常會把資料庫的資料匯到EXCEL中,讓使用者可以用EXCEL來做一些額外的資料計算,例如數值的加總。為了使用者方便,通常在資料轉出時,我們也會把公式放上去,例如=SUM(A2..A10)。
筆者的客戶有一種需求,就是將不同的小計的欄位加總到總計,但是因為中間有正常的資料,所以要跳著加,例如=A3+A7+A10。筆者為了這種情形寫了一篇專刊做法,各位Delphi同好如果有興趣可以參考

EXCEL的跳行加總

2015年11月14日 星期六

Delphi的for迴圈很慢嗎?

有Delphi同好提出一個問題,要計算C(39,5)這種階層的計算,並產生出排列組合的結果。這部分用遞迴或用迴圈來做都可以達到目標。他的問題在產生這些資料太慢了。以上述的計算,會產生37萬筆左右的資料,大約要八分鐘,太慢了,如下圖。
筆者覺得這應該有改善的空間,以前在學生時代寫程式交作業時,這種計算大約五分鐘就出來了,怎麼可能經過那麼多年,CPU都改了幾個世代了,這種數值的計算反而會花的時間更多?
於是筆者要了程式看了一下,加了二行程式,結果如下:
時間變成一分多,為什麼?

  Memo1.Visible := False;
  // 開始時間
  stime := now;
...
...遞迴程式
...
  // 結束時間
  etime := now;
  // 顯示計算時間和產生的數量
  Label1.Caption := '時間: '+FloatToStr(Trunc((etime-stime)*24*60*1000+0.5)/1000)+' 分';
  Label2.Caption := '數量: '+IntToStr(Memo1.Lines.Count);
  Memo1.Visible := True;

紅色是筆者加上的程式,主要的目的在計算過程中,不要讓Memo一直做資料的顯示,等到全部的資料做完,再一次顯示。時間就差了八倍。

Delphi的for迴圈其實是很快的,重點是在迴圈讓Delphie專注做它要做的工作。

2015年11月5日 星期四

Delphi和其他應用程式的溝通

WORD和EXCEL是常用的文書和試算表工具。如果有資料要做統計或做成漂亮的文件,通常我們不會重新寫一個試算表程式,而是會把資料轉到WORD或EXCEL中,再讓這些應用程式接手做往後的工作。
筆者最近因為工作上的需求,做了一些WORD和EXCEL資料轉出的程式工作,寫了二篇和轉WORD、EXCEL的相關文章,有興趣的朋友可以參考一下。

Delphi如何在WORD文件產生表格

Delphi如何產生EXCEL文件