發表文章

目前顯示的是 三月, 2010的文章

ACER AO751h安裝Windows7

嗯,剛剛打電話給客服人員,得到以下的回應Q. 安裝win7後,原有的還原磁區還能用嗎? A. 不行。
Q. 不能再用還原磁區,那怎麼辦? A. 建議你直接做成還原光碟,需要還原時只要用那張光碟就可以了。
Q. 還原是連備份磁區一起還原嗎? A. 不是,只有單一磁區。
Q. 開機時的ALT + F10功能鍵可以用BIOS手動關閉嗎? A. BIOS沒有這個項目。
Q. 751h有支援XP-mode嗎? A. 沒有。
以上,ACER的工程師真的…話很簡潔,可能是夠專業吧。
那個還原磁區好像只要重灌後就不能用了,很雞肋。 從以上解答可以知道,AO751h的VT功能確定是被關起來的!
嗯...真的要好好考慮換系統的事情了…

[轉載]用OpenOffice Writer製作一本包含封面、目錄、內容及頁數的書

圖片
資料來源:用OpenOffice Writer製作一本包含封面、目錄、內容及頁數的書如何讓OpenOffice Writer自動加入目錄,並製作成包含封面、目錄、內容及頁數的書,是一個讓我困擾已久的問題。以下的方法,是我今天在製作講義時才摸索出來,希望能對各位OpenOffice的愛用者有幫助,如果文件有問題或是有更方便的方法也歡迎提出。

我的目標如下:
1. 封面:不加頁數
2. 目錄:有章節編號及名稱,自動加上頁數
3. 內容:分章、節、小節、subsubsection,從1開始編頁碼
首先附上我製作的例子:odt pdf
以下的說明請參考這兩個例子。

1. 設定頁面樣式
為了讓不同的樣面採用不同型式的頁碼,我們必須先插入不同樣式的頁面。首先開啟一個新的文字文件,一開始預設的頁面樣式為標準。從上方工具列中選取插入=>手動換行,會出現如下圖的視窗。



選取換頁、樣式為標準、變更頁碼為1,再用同一的方法新增一頁,但這次選擇樣式為目錄。但是這樣我們仍然缺少封面,因此再從下圖中紅線框起的部分,按右方的三角形下拉選單,再選擇更多,會出現如下下圖的視窗,雙擊首頁即可將所在的頁面樣式轉換為首頁。






2. 插入頁尾及頁數
從上方工具列中選取插入=>頁尾,選擇標準及目錄就好了,因為我們不想在首頁(封面)顯示頁數。在頁尾的方框中,自上方工具列中選取插入=>欄位指令=>頁碼,即可在除了首頁以外的每一頁最底下顯示頁碼。如果想要讓目錄的頁碼使用別的格式,請在頁碼上按滑鼠右鍵選擇欄位(有時要多按幾次,不容易按到),會出現如下圖的視窗,在這裡面就可以選擇想要的頁碼格式。



3. 變更段落格式
我們在此要先變更一下段落樣式,這些格式是為了給chapter、section、subsection及subsubsection用的(我不知道subsubsection中文要怎麼翻,所以乾脆用英文)。從上方工具列選取工具=>章節編號,會出現如下圖的視窗。我是將標題1設定為第1級的格式,並且在分隔符之前加上第、在之後加上章,這樣顯示出來的結果就會是第x章。相同地,我再將標題2設定給第2級使用,不過這次就不加上文字,而是讓它顯示為x.x。我只有設定到標題4,因為我通常不會用到subsubsection以下的編號。



4. 輸入章節標題
再來就到頁面樣式為標準的頁面中輸入內容,可以先打好章的標題之後再將滑鼠游標移到所…

Win7執行BCB6時,發生問題的解決辦法

圖片
BCB6可以安裝在Win7上面,不過在開啟BCB6時,會告訴你說ooxx的檔案無法開啟,而導致Project開不了。

由於Win7的架構與Vista幾乎是一樣的,所以解決方式應該大同小異

所以參考了
BCB6:
在Vista執行BCB6
Delphi: Delphi on Windows Vista
測試過之後,真的可以用耶! 呵呵呵!
附上執行結果圖: 那麼…就再繼續用BCB6吧 不過畫面還是鳥鳥的…等存夠錢再來升級一下吧 ^ ^

放棄…也算是勇於面對自我吧?

準備領隊導遊的考試也有了一段時間,其間也對觀光資源概要做了很多很多的研讀
但不知怎麼的,每次的考古題都可以考出很多從沒看過的題目

平均一直都在3x附近排徊…而實務一、實務二也因為長時間沒複習而只有約5x分的水平。

這樣的情況,叫我怎麼去應考呢!!!

猜答案都沒猜對過的經驗來看,放棄應該是明智的選擇吧。

傳說明年度及格分數會調高到75分,看來這張證照離我真是越來越遙遠了呀~~~~~

[轉載] C++ Builder: Use a mutex to achieve synchronization

在網路上有看到一篇:C++ Builder中引用API函数禁止应用程序多次启动
看得不是很明白
於是找到另一篇,C++ Builder Developer's Journal / Use a mutex to achieve synchronization
但編排不是很好,所以我有稍微做了一下程式碼的排版,其它內容一字不變地轉載:
January 1998
Use a mutex to achieve synchronization
by Sam Azer

Over the past few months, a few people on the CPB-Thread listserv have asked how to prevent more than one instance of an application from being started. (To subscribe to CPB-Thread, visit www.cobb.com/cpb.) Several people have worked very hard on a variety of answers to this question. It seems, though, that the simplest solution is one suggested by members of Borland's TeamB on their news server: a named mutex. As you know, Windows 95 provides a number of built-in functions for running multiple tasks and threads within a task. Accordingly, a group of Synchronization functions is available to ensure that your tasks and threads are able to work together effectively.

One of the more common problems in a multitasking environment is resource sharing. If you'r…

哼…TDataSetProvider…真是被你打敗了呀

不知道是不是BCB6過於老舊,對ClientDataSet做Edit工作(SQL's Update)
一直很不順利,老是出現:
"Table unkown 'TableName'"

於是丟了個SQLMonitor去除錯
結果從SQLMonitor查到的語法是這樣的:
update "TableName" set 'Field' = ? where set 'Field' = ?

[轉載]Delphi ListView基本用法大全

Delphi ListView基本用法大全 作者:不明,取自CSDN轉載



//增加項或列(字段) ListView1.Clear; ListView1.Columns.Clear; ListView1.Columns.Add; ListView1.Columns.Add; ListView1.Columns.Add; ListView1.Columns.Items[0].Caption :='id'; ListView1.Columns.Items[1].Caption :='type'; ListView1.Columns.Items[2].Caption :='title'; ListView1.Columns.Items[2].Width :=300; Listview1.ViewStyle := vsreport; Listview1.GridLines :=true;//注:此處代碼也可以直接在可視化編輯器中完成,也可寫成以下這樣beginwith listview1 dobegin Columns.Add; Columns.Add; Columns.Add; ViewStyle := vsreport; GridLines :=true; columns.items[0].caption :=' 進程名'; columns.items[1].caption :='進程ID'; columns.items[2].caption :=' 進程文件路徑'; Columns.Items[0].Width :=100; Columns.Items[1].Width :=100; Columns.Items[2].Width :=150;endend;//增加記錄with listview1.items.add dobegin caption :='1212'; subitems.add('hh1'); subitems.add('hh2');end;//刪除 listview1.items.delete(0);//從數…

讀書心得:蟹工船

「誒!下地獄囉!」

上面就是這本書的開場白。

前陣子這本書的內容被翻拍成電影,印象中說是「以詼諧的手法來描述資本主義社會的黑暗」。

覺得可能會很好看,於是去圖書館借。

在排隊排了很長的一段時間,總算是排到了,收到通知的當天就去拿回來看。

剛開始看的時候,就感覺內容好昏暗
看到中期,啊,怎麼這麼可憐
看到後期,機車!怎麼還不反抗!
熬到結局………自己去看吧!(眾人毆)

看完之後的感想是,真的,現在台灣的社會環境和80年前的日本,其實有越來越像的趨勢

資本家越來越來富有,而窮苦的人卻越來越窮苦…

在這本書上可以看到幾種人,以很鮮明的個性表達了現在的各種角色,比方說像是:
書裡的漁、雜工 = 現在的窮忙的現代人 = 羊、鹿…只要是草食動物就行
書裡的薦頭 = 現在的人力仲介 = 誘餌、獅子的僕人?還是動物管理員?
書裡的監督 = 現在的中階幹部 = 鬚狗
而boss呢?還是boss = 獅子

就這樣,一個活生生的食物鏈就在這本書上演了。

其中,有2/3的劇情真的讓人高興不起來,不過卻又讓你有不得不看下去的衝動。

如果,我們的生活結構不去改變,那麼,就真的如同這本書的開場白一樣:
「誒!下地獄囉!」

不過,這樣一來,可憐的就是那些中階幹部了吧!哈哈!

最近開發案子之後的心得

自上次看了Delphi Databases: Dynamic Datamodules at Runtime後,就一直在找機會將這個方式移植到自己的專案上面。

所幸最近BOSS開了新的案子,才有機會將這個方式導入到專案中。

期間遇到的事情也不少,簡單的記錄一下好了。

一、auto_ptr很好用,但出問題時會不知道為什麼發生。(這和自己的功力有關)
二、DataModule Class只做了一個,然後包裝到其它的class中,這個方式會造成很多很多重複new delete的程式碼,比較好的作法應該還是依靠IDE對datamodule的實作,這樣new/delete就會很少出現。
三、承第二點,若未來要改成n-tier的作法,datamodule會改很大,所以也不建議這樣改。
四、想到再繼續寫…

也有一些優點的啦!
一、資料存取時,DB壓力較小
二、因為採用了部分設計模式,大部分程式都靠自己的CLASS解決了,IDE FORM裡的程式碼可以很簡潔。
三、承第二點,IDE FORM專門處理自己的事件,同樣的,商業程式碼也都轉向自己的CLASS來處理,在程式修改上可以很方便的處理。
四、發現用DELPHI來寫時,速度會更快(汗)
五、更加了解DBX的運作過程
六、多玩了DATASNAP的架構
七、一樣,想到再繼續寫…(逃)

TClientDataSet Run-time時期應注意的地方

主旨:為了避免已建立的VCL的屬性莫名指向NULL,建議由使用者自己使用new建立TClientDataSet。

說明:

如果不想在Design-time時期設定好TClientDataSet各項參數,可以採用Run-time設計模式。

但如果TClientDataSet是於Design-time時期就已建立,在Run-time時期,該TClientDataSet開啟後,TDataProvider會指向NULL,此時再對該TClientDataSet->Close();,就會發生ACCESS ERROR。

解決方式:
Design-time時期於form表上加入TClientDataSet時,IDE會在 __published 區自動增加TClientDataSet *Temp;
而在Rum-time時,TClientDataSet資料傳輸的主控權即交給IDE自行處理。

所以使用者要擁有較高的管理權,可採自行於程式碼中 new /delete TClientDataSet即可。

2010/3/4 更新
在Help裡查到:
TClientDataSet若是使用SetProvider指向DataSetProvider(Run-time),則TClientDataSet Close()再開前需要再使用SetProvider指向DataSetProvider




動態建立 ClientDataSet 的範例可參考:
ADO and ClientDataSet

No BOOLEAN field in Firebird?

No BOOLEAN field in Firebird?
There is no built-in boolean field, but you have several options:

1. use char(1)
2. use smallint
3. use domains

Domains are probably the best solution. You can create domain like this:


CREATE DOMAIN BOOLEAN
AS SMALLINT
CHECK (value is null or value in (0, 1));


Later in table definition you can refer to it as a regular datatype.


CREATE TABLE t1
(
C1 VARCHAR(10),
B1 BOOLEAN,
B2 BOOLEAN NOT NULL,
...
);


If you use a connectivity library like OleDB under .Net, you can override the OleDB provider's GetSchema method, so the DataTables you get from queries have native .Net booleans.