線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2813
推到 Plurk!
推到 Facebook!

2006 VCL夢,期待2007年完成!DB通用編輯物件、和管理物件開發

尚未結案
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-02 07:41:09 IP:220.134.xxx.xxx 訂閱
2006 VCL夢,期待2007年完成!DB通用編輯物件、和管理物件開發
各位前輩和版主大人:
我來野人獻曝了!之前在ktop問了許多問題,可見得自己對Delphi仍有許多不清楚的地方,
但是我一直有一個夢想,可不可以簡簡單單的寫程式? 我只想寫簡單的應用程式,其實不
想懂太多的技術層次問題,但是買不起太貴的開發工具和套件(如訊光EEP),因為自己之前
用了一段時間的MS-ACCESS,我發現使用MS-ACCESS真的有其優點,但是當專案越來越大,就會
出現諸多致命傷,無法如Delphi、VB等等較為專業的開發工具,進行表單的細部控制,所以一
路鑽研進Delphi VCL的世界,我一直有一個幻象,就是能不能,類似ACCESS一樣,定義好TABLE
後,開出表單,直接選擇要的欄位,然後定義該輸入欄位的屬性,如ACCESS一樣,很快的完成
一個基本表單的操作,大家一定會想說,你說的可以做到啊!
但是我真的卡了好久,希望各位前輩能給予指正和提示,一個人自己亂搞真的進步很慢
期待2007年能完成這個自己的目標,萬分感謝!
計畫說明文件
http://140.125.88.4/doc/yaotest/DIY2007.doc
原始範例
http://140.125.88.4/doc/yaotest/VCL_DIY2007.rar

------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-02 10:16:46 IP:220.130.xxx.xxx 訂閱
whatever, 請不要cross post,
不是要潑你冷水,在這個站這麼久了,你在找資料應該也會常看到那種一點用處也沒有的post,
尤其是corss post增加網頁讀取和你要瀏覽的時間,己所不欲,勿施於人
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-02 15:03:14 IP:211.76.xxx.xxx 訂閱

我來野人獻曝了!之前在ktop仍有許多不清楚的地方,
),因為自己之前用了一段時間的MS-ACCESS真的有其優點,但是當專案越來越大,就會出現諸多致命傷,無法如Delphi等等較為專業的開發工具,進行表單的細部控制,所以一路鑽研進Delphi VCL一樣,定義好TABLE一樣,很快的完成一個基本表單的操作,大家一定會想說,你說的可以做到啊!

但是我說的不只單單如此,我希望我拉一個拉出這個輸入物件後,類似Delphi 7將資料欄位的標題也設定好,當然快捷鍵也一併設定好(如按下ALT 1 跳到第二個欄位……搭配ALT我的思考是資料輸入時:
1.有些欄位是Primary_Key,就是欄位一定要輸入資料(如產品基本檔的貨品編號)
就是外鍵,如進貨單內的貨品編號一定要存在於貨品基本檔內,

2.資料型別我歸類成幾種型態,我寫程式的經驗下,常用的是這幾種
TDB_Field_TYPE = (tcDate, tcString, tcNumber, tcBoolean, tcStringList, tcDBRUNSQL);
TcDate選擇這個型別後,只接受字串
TcNumber選擇這個型別後,只能選擇「是」、「否」
TcStringList作為分隔,當資料來源為[1.測試二] 選擇這個型別後,我希望能下達SQL下拉,然後傑何第一個欄位,看是定義成Combobox能達成),或者設定欄位屬性成

3.顏色部份:我希望能針對使用者輸入時,能明確的顏色顯示,就是欄位顏色可以跟著變化。
雖然自己已寫了物件,但是總覺得還不是很理想,所以這一次心一橫將寫的爛作品公開,希望大家幫忙、完成我這個夢想!


安裝後
管理物件
1.EnterTABFocus
2.
YaoFRMYaoEdit




YaoFRM DataSource
YaoEdit能選擇資料庫內所有TABLEYaoEdit以選定後TABLE欄位清單

------
將問題盡快結案也是一種禮貌!
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-02 15:16:35 IP:211.76.xxx.xxx 訂閱
g9221712你會有 "YaoFRM 這個元件,若設定管制的DataSource會出現這個錯誤"
是因為沒有處理 Notification 的關係, 請參考以下的code
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
... 略 ...

procedure YaoFRM.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) then
begin
if (FDataLink <> nil) and (AComponent = DataSource) then
DataSource := nil;
end;
end;

另外, 建議你元件的類別以T開頭, 例如: TYaoFRM, 這樣才不會在使用時分不清楚是 Class 還是 Object.
------
將問題盡快結案也是一種禮貌!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-02 16:23:18 IP:220.134.xxx.xxx 訂閱
我對你這樣的批評,我可以認同,但是我不能接受,因為我這個議題除了跟vcl開發有關,
也是自己開發的元件,若是你要將他定義成cross post,說真的我很難過!
因為我花了快一年的時間思考這個物件,我不只是單單想尋求答案的人!
若增加了您的困擾,我會將所有的文章刪除,造成您的困擾,我很對不起!
===================引 用 文 章===================
whatever, 請不要cross post,
不是要潑你冷水,在這個站這麼久了,你在找資料應該也會常看到那種一點用處也沒有的post,
尤其是corss post增加網頁讀取和你要瀏覽的時間,己所不欲,勿施於人
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-02 16:28:08 IP:220.130.xxx.xxx 訂閱
我並沒有要批評你的意思,我也不認為你的作品不好或者其它類似的意思
雖然這篇文章可以指涉的範圍很大,但應該還是要選一個比較好發揮的地方
我指Cross post也僅僅止於其動作,並不是說這個post的內容不好

suppose後面的人在找資源時發現有這樣的東西有三篇,那麼他還是要看這三篇才發現其中一篇有用
或者是文章被散在三篇中,看的不是很累嗎?
而且這還只是三篇,當我們在搜尋要用的資源時不會是只有這些吧?
而我們也希望今天在這裡留下問題有人解,或者是替別人解問題,後來的人也能利用這些資源吧?
一個人三篇的威力是很可怕的,找資料的人累,主機loading也大,我沒別的意思,請不要誤會。

我相信你並不是來只是要答案的人,否則也不會把文件跟想作的事寫的這麼詳細
我相信你的用心,只是要請你體諒一下主機跟使用這個網站的人。
我自己也有很多懸而未解的問題,到現在還在找答案中...
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-02 17:11:50 IP:210.241.xxx.xxx 未訂閱
Coffee 兄並無惡意, 禁止 "一文多貼" 是很多論壇的規定
不管您那篇和幾個分類相關, 建議您選個最接近的分類張貼, 而不是相關的全部張貼
某些網站的作法, 一文多貼站長或版主是不知會而直接砍剩下一篇
===================引 用 文 章===================
因為我這個議題除了跟vcl開發有關,
也是自己開發的元件,若是你要將他定義成cross post,說真的我很難過!
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-01-02 17:16:44 IP:220.134.xxx.xxx 訂閱
感謝兩位前輩的提醒!不知道我要如何跟版主聯繫,可以將bcb的VCL所post的文章,和自己發表的作品部份刪除!
可能太急著想要得到回應,忘記了造成大家的困擾,再次跟大家深深地說聲抱歉,對不起!

===================引 用 文 章===================

Coffee 兄並無惡意, 禁止 "一文多貼" 是很多論壇的規定
不管您那篇和幾個分類相關, 建議您選個最接近的分類張貼, 而不是相關的全部張貼
某些網站的作法, 一文多貼站長或版主是不知會而直接砍剩下一篇
===================引 用 文 章===================
因為我這個議題除了跟vcl開發有關,
也是自己開發的元件,若是你要將他定義成cross post,說真的我很難過!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-01-02 21:30:39 IP:220.134.xxx.xxx 訂閱
danny前輩感謝您的回覆,還將我圖檔處理成網頁可以直接觀看!真是很感謝您!
我火侯其實都不足各位前輩的萬分之一,只是我想雖資質愚鈍,但是作苦力我還是
期待能有一些成果,尤其面對開發工具越來越強(如VS2005),我實在有點迷失,
尤其看到VS2005開發自訂元件如此簡單,說真的我真的心動了!但是看到ktop上
各位前輩回應,我實在很感動,說真的努力想找到問題答案!
Coffee前輩,其實您的回應我一樣很感謝您,就如您說的我的作法可能招致反感,
我會改進並小心的參與ktop討論的!
問題:
danny前輩,我有照您的的方式加入:
procedure YaoFRM.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) then
begin
if (FDataSource <> nil) and (AComponent = DataSource) then
DataSource := nil;
end;
end;
仍難會出現如下錯誤訊息:
http://140.125.88.4/doc/yaotest/20060102_bug.jpg
另外一個怪問題,當我將所以所有自訂物件都如前輩您加上T開頭
但是卻會發生Delphi7 元件盤上的[YAOS]這個分頁無法出現,不知道
是否我有哪邊出錯了!
感謝各位前輩,希望2007年是個可以進展的一年!
===================引 用 文 章===================

g9221712你會有 "YaoFRM 這個元件,若設定管制的DataSource會出現這個錯誤"
是因為沒有處理 Notification 的關係, 請參考以下的code
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
... 略 ...

procedure YaoFRM.Notification(AComponent: TComponent;Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) then
begin
if (FDataLink <> nil) and (AComponent = DataSource) then
DataSource := nil;
end;
end;

另外, 建議你元件的類別以T開頭, 例如: TYaoFRM, 這樣才不會在使用時分不清楚是 Class 還是 Object.
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-01-02 22:25:23 IP:203.73.xxx.xxx 訂閱
我不是前輩,我是爛草莓,不要太在意我說什麼
你寫的成品比我好太多了,我只是單純的希望這個站能夠好好的維持下去
畢竟用Delphi的人越來越少,真正有熱忱的人也越來越少。
但是我仍熱衷如此而已
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-01-02 22:49:04 IP:220.134.xxx.xxx 訂閱
感謝danny前輩、Coffee前輩和版主大人:
Coffee前輩您不用客氣啦!我其實能力有限啦!尤其參與KTOP討論越久,發現自己所知有如滄海一粟,就如您所說使用Delphi的人越來越少,
原因就是簡單可直覺使用的物件太少(或者說我跟它不熟吧!)Delphi是個高級的玩具,我真心的想拿他來開發好用的資料庫程式
我是從Clipper、Foxpro、Visual Foxpro、VB、Access一路走來,發現vcl元件開發的模式,真是一個美麗天堂,但是我卻在這個
天堂門口一直撞牆,不得其門而入,看到版上大家問的問題其實都是針對一些物件使用,難得有一套開發元件的制定及使用,我
心中一直有這樣的幻想,能不能簡單一點、能不能再簡單一點,我po上得這個範例,我看到有如毒藥產生的幻境,恰似可以完成
這樣的美麗,我也期待版上得前輩給我一些建議和提示,讓我早日看見這美麗的境界!
目前改寫狀況:
=============================================================================================
以遵照danny 前輩指正和提示加入,上一個發言錯誤訊息已經沒有了!我打錯部份字元。
procedure YaoFRM.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) then
begin
if (FDataSource <> nil) and (AComponent = DataSource) then
FDataSource := nil;
end;
end;
目前問題列表:
=============================================================================================
當我使用YaoFRM這個物件procedure YaoFRM.NewStateChange(Sender: TObject);內我偵測
表單上公用的dataSource物件,我想讓YaoFRM自動將游標移到第一個YaoEdit物件上(因為我以前寫vb時
都需要下達很笨的xxx.SetFocus指令去將游標移到第一個輸入物件上),但是我在表單上得按鈕
上下達ds1.DataSet.Append(ds1是我BaseForm的dataSource物件),但是我發現觸發YaoEdit 的SetFocus
事件,好像會發生需要下達兩次ds1.DataSet.Append、ds1.DataSet.Append才會正常,不知道是否可以
煩請各位前輩給予提示!

=============================================================================================
dsinsert: // 新增
begin
if Trim(Get_FocusObject_Edit) <> '' then
begin
if FRM.FindComponent(Get_FocusObject_Edit) is YaoEdit then
begin
yaoedit(FRM.FindComponent(Get_FocusObject_Edit)).Setfocus;
end;
end
else
begin
// 假設沒有設定編輯的物件Fcosu設定Primary key 為第一個
if Has_tcPrimary_Key then
begin
yaoedit(FRM.Components[Has_tcPrimary_Key_Item]).Setfocus;
end;
end;
end;
=============================================================================================
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-01-02 23:18:28 IP:211.76.xxx.xxx 訂閱
danny前輩感謝您的回覆,還將我圖檔處理成網頁可以直接觀看!真是很感謝您!
我火侯其實都不足各位前輩的萬分之一,只是我想雖資質愚鈍,但是作苦力我還是
期待能有一些成果,尤其面對開發工具越來越強(如VS2005),我實在有點迷失,
尤其看到VS2005開發自訂元件如此簡單,說真的我真的心動了!但是看到ktop上
各位前輩回應,我實在很感動,說真的努力想找到問題答案!

VS2005(or 2006) 開發自訂元件如此簡單 ?
Delphi 的 VCL 開發從來都是手工業, 不曉得 VS2005(or 2006)是如何簡單了.

我有照您的的方式加入:
procedure YaoFRM.Notification(AComponent: TComponent; Operation: TOperation);
... 略 ...
所有元件都有加上 Notification 處理嗎 ?
看起來不像是 YaoFRM 的問題(我改寫成 Delphi 5 VCL 測試沒問題), 因為我只有 Delphi 5, 6 沒有 Delphi 7 , 而你的範例有使用 .bpl (不是獨立執行檔) 我無法開啟或執行, 因此無法測試.
請用searching功能找 "YaoFRM" 再全部換成 TYaoFRM,
另外,
Register 應該如下
RegisterComponents('YAOS', [TYaoFRM]);

------
將問題盡快結案也是一種禮貌!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-01-03 01:52:36 IP:220.134.xxx.xxx 訂閱
danny前輩:
謝謝您花了這麼多時間測試和提供意見!不知道怎麼感謝您!
我有原版的Delphi7如果您覺得有需要,我可以提供給您測試!
>> VS2005(or 2006) 開發自訂元件如此簡單 ?
>> Delphi 的 VCL 開發從來都是手工業, 不曉得 VS2005(or 2006)是如何簡單了.
我使用VS2005撰寫自訂物件,雖然還沒有摸熟,但是只少都是透過視覺化拖拉
方式開發,不用類似Delphi 手工加上幻想,才可以達成!當然細部的控制,
我還沒有實際開發!!

所有元件都有加上 Notification 處理嗎 ? 這部份我今晚會熬夜看看自己的程式
Notification 真是重要啊!YaoEdit其實是我這組套件內,比較核心的部份,
真是想把Delphi對資料庫開發,搞得跟Access一樣,但是以我的能力,
可能還在幾萬公里之後! 不過前輩又給小弟一點點98高級汽油,多了更多的動力!
danny前輩,實在很高興能得到您的回應!版上要是多幾位您這樣的高手
我想Delphi一定可以更有前景!

------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-01-03 02:54:49 IP:220.134.xxx.xxx 訂閱
最新撰寫問題1/3/2007 2:12:58 AM
當我按下新增Button執行self.DS1.DataSet.Append;,這是正常狀況
因為我將商品編號設定成tcPrimary_Key,也就是新增時,他會透過YaoFRM
偵測到表單DataSource的StateChange而我在YaoFRM內撰寫了若StateChange
我會設定Focus到第一個yaoedit物件上(因為寫了n年的純手工SetFocus)
所以想讓程式自動化一點! 但是問題來....
我將範例改寫了一下,變為繼承一個BaseForm的方式執行,比較符合我實際
開發的方式,開發問題如下:
我將整個問題放到
http://140.125.88.4/doc/yaotest/20060103_BUG.doc
原始範例
http://140.125.88.4/doc/yaotest/20060103_BUG.rar
不知道各位前輩是否可以給予建議,懇請給予一些建議!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-01-03 03:22:34 IP:220.134.xxx.xxx 訂閱
前輩
我看了一下,我DBEDIt的Enter事件部份不知道是否為這個問題,導致錯誤
但我還是找不到錯誤在哪!
procedure YaoEdit.UTEdit_Enter(Sender: TObject);
begin
if UTEdit.ReadOnly = True then
begin
// 進入設定顏色 呈現不可編輯顏色
UTEdit.Color := cl3DDkShadow;
UTEdit.Font.Color := clWhite;
// 旁邊按鈕不顯示
UTButton.Visible := False;
end
else
begin
UTEdit.Color := FUTEdit_Color_InTo;
UTEdit.Font.Color := clBlack;
// 旁邊按鈕顯示
if F_UTButton_Visible = True then
begin
UTButton.Visible := True; // 旁邊按鈕顯示
end
else
begin
UTButton.Visible := False; // 旁邊按鈕不顯示
end;
end;
TControl_arrangement;
UTEdit.SetFocus;
if Assigned(UTEnter) then UTEnter(Sender);
end;
//==============================================================================$
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#16 引用回覆 回覆 發表時間:2007-01-03 16:25:06 IP:59.124.xxx.xxx 未訂閱
不好意思,小弟覺得此討論串比較適合放在討論區中,可以讓更多有經驗的前輩們幫忙
故將此篇文章移至[Delphi VCL討論區]

g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#17 引用回覆 回覆 發表時間:2007-01-03 18:04:07 IP:220.134.xxx.xxx 訂閱
感謝taishyang前輩:
因為這個物件實在還說不上成熟的物件,希望大家討論後,能成為一個更成熟的作品,懇請大家幫忙!
萬分感謝!


------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#18 引用回覆 回覆 發表時間:2007-01-04 04:52:48 IP:220.134.xxx.xxx 訂閱
對了!有人反應他裝的時候少了物件,無法執行,因為裡面我為了可以讓編輯物件
可以看到一些特殊中文字體,所以我繼承了tnt的物件(這個物件要先裝,才可以正常使用)
http://www.tntware.com/delphicontrols/unicode/
感謝各位前輩的持續關注!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
系統時間:2024-05-13 11:05:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!