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

你所不知道的...Delphi的秘密0001

 
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-17 09:25:23 IP:220.130.xxx.xxx 訂閱
編輯記錄
G01 重新編輯於 2007-07-18 18:34:29, 註解 無‧
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-17 10:19:50 IP:60.248.xxx.xxx 未訂閱
小小的發現,淺顯易懂的解釋

謝謝前輩的分享,學到了
Coffee
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-17 10:57:07 IP:220.130.xxx.xxx 訂閱
附上Object在Help中的說明

Object types
As an alternative to class types, you can declare object types using the syntax

type objectTypeName = object (ancestorObjectType)
memberList
end;

where objectTypeName is any valid identifier, (ancestorObjectType) is optional, and memberList declares fields, methods, and properties. If (ancestorObjectType) is omitted, then the new type has no ancestor. Object types cannot have published members.

Since object types do not descend from TObject, they provide no built-in constructors, destructors, or other methods. You can create instances of an object type using the New procedure and destroy them with the Dispose procedure, or you can simply declare variables of an object type, just as you would with records.

Object types are supported for backward compatibility only. Their use is not recommended.
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-17 11:25:51 IP:220.130.xxx.xxx 訂閱
編輯記錄
G01 重新編輯於 2007-07-18 18:34:51, 註解 無‧
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-17 11:28:30 IP:61.222.xxx.xxx 訂閱
> type TMyEventProcType = procedure (Sender:TObject;Params:string) of Object;

多加 " of Object " 表示為面對對象(物件)的 Procedure 函數。
去掉 "of Object " 不見得這樣就不是 Event Function,端看您觸發使用的方式。

既然要談到偽裝一個物件類事件,亦可用

type
TmyObj = class
class procedure DoClick(Sender: TObject);
end;
........
class procedure TMyObj.DoClick(Sender:TObject);
begin
Showmessage('Test');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.forbidden := TMyObj.DoClick;
end;

So 沒有什麼神秘之處。不需用此強烈標題。
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-17 11:46:19 IP:60.248.xxx.xxx 未訂閱
有人願意花時間,發表文章或學習心得

值得鼓勵

ktop需要更多的熱血
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-07-17 11:52:03 IP:220.130.xxx.xxx 訂閱
編輯記錄
G01 重新編輯於 2007-07-18 18:35:13, 註解 無‧
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-07-17 13:31:19 IP:220.130.xxx.xxx 訂閱
編輯記錄
G01 重新編輯於 2007-07-18 18:35:35, 註解 無‧
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-07-17 13:37:47 IP:220.130.xxx.xxx 訂閱
編輯記錄
G01 重新編輯於 2007-07-18 18:35:57, 註解 無‧
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-07-17 13:55:19 IP:220.130.xxx.xxx 訂閱
編輯記錄
G01 重新編輯於 2007-07-17 13:56:29, 註解 無‧
G01 重新編輯於 2007-07-18 18:36:17, 註解 無‧
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-07-17 18:56:58 IP:61.222.xxx.xxx 訂閱
I mean ...  只是建議改個較貼切內容的主題。


TMyEvent1 = procedure(Abc:Integer ... );
- > 定義一個函數指針
TMyEvent2 = procedure(Abc:Integer ... ) of Object;
-> 定義一個對象函數指針
前者佔用 4 Bytes 後者 8 Bytes 差別在於前者為指向事件的位址
而後者除了指向事件位址外還指向對象物件。

缺了對象的函數指針當然跟物件扯不著關係。
編輯記錄
wameng 重新編輯於 2007-07-17 19:25:08, 註解 無‧
taishyang
站務副站長


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-07-17 19:26:29 IP:122.124.xxx.xxx 未訂閱
總算看到好久不見的高手過招了^^
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-07-17 21:19:56 IP:61.64.xxx.xxx 訂閱
編輯記錄
G01 重新編輯於 2007-07-17 21:31:05, 註解 無‧
G01 重新編輯於 2007-07-18 18:36:42, 註解 無‧
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#14 引用回覆 回覆 發表時間:2007-07-17 23:36:52 IP:58.61.xxx.xxx 訂閱
G01 兄,wangmeng 兄说的 pointer 的字节数的说法是对的。你在理解这件事上有偏差。

TMyEvent = procedure(i: Integer) of object; 定义的是和 Object 有关的 Methed 的类别。

任何一个这个类别的东西,比如:

MyEvent: TMyEvent;

这个变量(变数)如果你要指定一个真正的 method 给它,必须是一个 Object 的 method,而不是一个普通的 pascal function 或者 procedure.

简单点说,它是面向对象的。至于它放在 published 还是 protected 是没有关系的,随便你想放哪里都可以。
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#15 引用回覆 回覆 發表時間:2007-07-18 01:28:02 IP:61.64.xxx.xxx 訂閱
同意,標題不甚正確
這不是秘密,是寫作元件的基本常識與OOP原理

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

So 沒有什麼神秘之處。不需用此強烈標題。

======================================================

有心是不錯,但無奈所寫資訊,不甚正確

程式不過是放在記憶體內給CPU去執行的指令,OOP規則不見得要遵循,所以才會有
----> 引言>>去掉 "of Object " 不見得這樣就不是 Event Function,端看您觸發使用的方式
所以此時IDE會無法以 Event Function 的方式編輯,要用Borland 的 IDE就要按照其規則,不然自己寫一個,愛怎麼編輯都行

> 前者佔用 4 Bytes 後者 8 Bytes 差別在於前者為指向事件的位址
> 而後者除了指向事件位址外還指向對象物件。

應修正為

前者佔用 4 Bytes 後者 8 Bytes 差別在於前者為指向函數的位址
而後者除了指向事件位址外還指向對象物件。


#13 的 Example 1 與 Example 2 ,建議初學者,把它忘掉,當作沒看過
還是去看書上寫的正規OOP知識與規則,以免在不清楚的裝況下,學到錯誤的認知
Example 1 與 2 本身沒錯,但不懂的人,會有錯誤的認知,看書比較實在
原因,VCL,OOP設計上本來就是分四個區段 private, protected, pubilc, published
四種區段在繼承上,會有不同的可見度,想知道詳細,請看書,所以只要是 published 的都可以在 Object Inspector 上編輯,這是規則,沒甚麼好驚訝的
同時,property SSS:TtestEvent read FSSS write FSSS; 指定的格式,只要相同,就可以assign ---> OBJ.SSS := DoSSS;
這是程式設計基本規則,非Pascal所特有

但是問題在於,Example 1 使用非物件的函式,指派為property,這是違反OOP原則,或許有人說這是特殊技巧
但是我說,這是 BUG 的開端,不安全的程式設計,只是給他人入侵你寫的程式的機會

你要用非OOP的規則去給OOP Compiler編譯,編譯出來,要是哪天出現成是錯誤,包你除錯到死,都找不到錯誤
程是要怎麼寫,是程式設計者的權利,但,要寫出[安全]、[正確]的程式,也些方式,就不要用,除非你百分之兩百確定你在做什麼

去看書上的OOP規則,並遵循之,才是正確的方式,不然乾脆用組合語言寫,愛怎麼寫都隨你意,安不安全,就看個人功力

要如何 assign ,隨你高興都可以,只要可以編譯,可以跳到該位址,並由CPU執行,都是可行的方式

但是
簡單的說,在物件內呼叫非物件的函式,可以
而將非物件的函式,指定到物件上,會破壞物件的完整性,不好,這是 BUG 的開端,不安全的程式設計,只是給他人入侵你寫的程式的機會






G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#16 引用回覆 回覆 發表時間:2007-07-18 08:08:26 IP:220.130.xxx.xxx 訂閱
To pcPlayer99:
我知道TMethod這個類別,您誤會小弟的意思;小弟並沒有說諸位大大說明
關於幾個字節的說法不正確,而是著眼在於應用面如何在這些規範之下,能
達成一些特殊的做法!! 感謝您賜教!!
編輯記錄
G01 重新編輯於 2007-07-18 08:09:15, 註解 無‧
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#17 引用回覆 回覆 發表時間:2007-07-18 08:54:25 IP:220.130.xxx.xxx 訂閱


        
編輯記錄
G01 重新編輯於 2007-07-18 08:55:02, 註解 無‧
G01 重新編輯於 2007-07-18 08:56:08, 註解 無‧
G01 重新編輯於 2007-07-18 08:56:53, 註解 無‧
G01 重新編輯於 2007-07-18 08:57:44, 註解 無‧
G01 重新編輯於 2007-07-18 08:58:19, 註解 無‧
G01 重新編輯於 2007-07-18 08:59:30, 註解 無‧
G01 重新編輯於 2007-07-18 09:00:34, 註解 無‧
G01 重新編輯於 2007-07-18 09:02:18, 註解 無‧
G01 重新編輯於 2007-07-18 18:37:48, 註解 無‧
danny
版主


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

發送簡訊給我
#18 引用回覆 回覆 發表時間:2007-07-18 10:34:39 IP:211.76.xxx.xxx 訂閱
首先, 對於 G01 願意在此分享他的心得, 我想大家應該給予他高度的肯定. 
至於一些OOP觀念上的爭議, 經由大家的討論也可以越來越清楚, 也未嘗不是一件好事.
對於這算不算 "Delphi的秘密" 這要因人而異, 對於從不碰VCL內部的人來說算, 當然對於自己開發VCL的人來說不算是, 所以我覺得標題雖然不夠精準, 但還可以接受.
總之對於願意在此分享心得的會員, 大家應該多多鼓勵, 對於大家來說也是可以增長知識, 謝謝大家!!!

至於VCL的問題, 有興趣的人可以參考以下文章 ....

Delphi 元件設計初步(一)
Delphi 元件設計初步(二)
偷龍轉鳳的物件設計方式
淺談 Interface
Interface Designing
關於 RegisterClass 的使用心得
------
將問題盡快結案也是一種禮貌!
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#19 引用回覆 回覆 發表時間:2007-07-18 12:57:41 IP:61.222.xxx.xxx 訂閱
個人認為G兄花很多心思在撰寫本文,這種精神是值得鼓勵的。
但有些觀念需要被導正或互相學習,沒有人是無敵鐵金剛。
很多觀念我們都是在學了又忘、忘了又學中打滾。

這是 TMethod 原型
TMethod = record
Code, Data: Pointer;
end;
通過 TObject(TMethod(Button2.OnClick).Data) 可以得到事件的物件。

範例1只不過是TProcedure的應用,對它而言只不過傳遞了一個指針。
但這是不安全的作法,對撰寫人員容易混淆。

通常我會運用在某一函數中代入事件。












syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#20 引用回覆 回覆 發表時間:2007-07-18 16:32:50 IP:61.64.xxx.xxx 訂閱

G 兄不需動氣,本是陳述事實而已,沒人要你閉嘴
我也沒有強調甚麼,所說,都是 [事實]

同時也解釋了為什麼,要忘掉Example 1 與 Example 2 的理由,你不接受也行
想了解,可以建議你去看相關的書籍,例如 Writing Secure Code 2 ED (不可看中文版,翻得很爛,錯誤不少,很多字都是硬翻,離其意甚遠)

comp.Number := 10; <<-----------------這樣算不算是違反OOP原則呢? 不應算,依據物件導向的理念,封裝的其中主要是資料的處理方式
該行只是單純的指定數值,指定後存放的欄位或是前置的處理,都被封裝在其後,就不算是違反
但若是
comp.FNumber := 10; 就是違反了OOP(不可直接存取物件內部欄位),不過,這個Borland的編譯器會幫你抓出來

然而,指定一個非物件的函式給物件,就違反了其精神,但是一如所言,還是可以指定,畢竟OOP只是一種概念

但是,編譯器,就沒有您聰明了,哪天編出有問題的程式碼,你可會因此除錯到瘋掉吧,當然如果你除錯樂此不疲,我也是沒有意見
但是板上的初學者,就會張貼一堆如果依據規則設計就不會出現的問題的問題
我想搬石頭砸腳再來看醫生,是很辛苦的事

如果OOP的寫作者,還是喜歡將非物件的函式指派給物件,那就乾脆不要使用 OOP,才不會OOP的好處得不到(繼承與複載),同時還損失效率(多了一層呼叫的解析)

//--------------------------------------G 兄---------------------------------------------------------------------------------------------------
小弟是覺得如果今天真的有心要
入侵你寫的程式;就算是天羅地網的保護也有力有未逮之時,
更何況只是指定一個屬於物件的Function 呢?
//--------------------------------------G 兄-----------------------------------------------------------------------------------------------------

你說得沒錯,但是太消極,難道人都會死,所以就不用太愛護健康 ?
C# 努力除去指標的使用,也是依據安全、完善的立意
那 C#, Java 的設計者,在你的說法下,又成了什麼 ? 你第一次貼文章的立意,不也是追求完善的結果 ?

而你自己也說 "
然而在VCL之中又多了published , 這個是VCL所獨有的!!"
那就不要使用非 Borland IDE 規則外的方式,不然
Object Inspector 抓不到,也容易有 BUG
但我也說了,如果你是高手,知道自己在做什麼,那請便,也是如此,才會有一堆外掛
(程是不過是一堆在記憶體中給CPU執行的CODE)

而就是有安全程式設計的準則,與許多人的努力發展概念(如OOP)與FrameWork(如Jave .Net)
才會有今天易用的環境與不易出錯的程式

你有心,是很好,但是錯誤或是誤導,並不會因為你好心,就消失
要真有心,就要依據書上的規則,與你的經驗,詳詳細細的,依據事實說出

我想,讓學的人理解錯誤的觀念,不會是你的本意吧,所以你的範例,不是不好,但不適合不懂的人看

所以建議初學者,把它忘掉,當作沒看過


至於高手,應該都懂了,看了也是白看

所以要是你真有心,就改的詳細一點,以免初學者茫茫然,也可為KTOP 增添一篇好文章

G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#21 引用回覆 回覆 發表時間:2007-07-18 17:45:37 IP:220.130.xxx.xxx 訂閱
To Syntax

感謝回覆,受教了......

看來有些想法還是自己瞭解就好....

今將前述的文章內容移除...

煩請版主將前述的發言刪除....感激不盡!!

反而越描越黑了.....殘念!!
編輯記錄
G01 重新編輯於 2007-07-18 18:41:02, 註解 無‧
G01 重新編輯於 2007-07-18 19:42:52, 註解 無‧
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#22 引用回覆 回覆 發表時間:2007-07-19 11:17:21 IP:61.30.xxx.xxx 訂閱
文章並沒有錯~
寫了不必要刪除..
因為他將成為回憶~

===================引 用 G01 文 章===================
To Syntax

?????????????????? 感謝回覆,受教了......

?????????????????? 看來有些想法還是自己瞭解就好....
??????????????????
?????????????????? 今將前述的文章內容移除...

?????????????????? 煩請版主將前述的發言刪除....感激不盡!!
???????????????????
?????????????????? 反而越描越黑了.....殘念!!
------
======================
昏睡~
不昏睡~
不由昏睡~
system72
中階會員


發表:15
回覆:114
積分:55
註冊:2005-08-17

發送簡訊給我
#23 引用回覆 回覆 發表時間:2007-07-19 12:58:49 IP:219.81.xxx.xxx 訂閱

其實也許,
可以考慮像電視上現場 特技表演那樣,

在 原文底捕上,



"危險動作"

"叔叔有練過,小朋友(改初學者)勿輕易模仿"

之類的警示語.




適合老手 閒閒沒事,打發時間..




甚至,還是某些場合,可能會派上用場的.




想想看,比方像印表機廠, 主機有的才1000上下,但用完後新買時附的墨水,要買黑色/彩色墨水都各要600上下,
主機根本是貼錢在賣,而靠墨水賺錢才需要把墨水夾設計有點複雜.


如果是 open source,或source code 很廉價,
是要靠服務賺錢,
那,source code 如果在容易修改,好像就沒機會繼續服務大眾了.




所以,高手如果把程式碼寫的太好,簡單易董,

連新手都容易上手修改,會的人一多就崩盤不值錢,
且除非本身是老闆,或合夥人,不然可能提早被人取代.

甚至,提早完成,不但沒好處,反而有壞處.(這個就自行體會啦)


改天有需要大改, 一般人功力不夠,越寫越複雜,不好維護,
但又行情價錢已經崩盤, 要找廉價的高手來改大概會找很久.

也是有缺點的.




===================引 用 G01 文 章===================
To Syntax

?????????????????? 感謝回覆,受教了......

?????????????????? 看來有些想法還是自己瞭解就好....
??????????????????
?????????????????? 今將前述的文章內容移除...

?????????????????? 煩請版主將前述的發言刪除....感激不盡!!
???????????????????
?????????????????? 反而越描越黑了.....殘念!!
編輯記錄
system72 重新編輯於 2007-07-19 13:08:02, 註解 無‧
system72 重新編輯於 2007-07-19 13:14:19, 註解 無‧
system72 重新編輯於 2007-07-19 23:21:50, 註解 無‧
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#24 引用回覆 回覆 發表時間:2007-07-19 22:33:50 IP:121.35.xxx.xxx 訂閱
G01 兄,谢谢你的分享。其实你说的这个对我来说的确是个秘密呢。我还真的不知道可以直接定义一个 object 呢。

我理解,TMyObj = class(TObject) ... 然后 MyObj := TMyObj.Create 是 Create 了一个 TMyObj 的实例;

TMyObj = object; var Myobj: TMyObj; 则是编译器直接帮我们 Create 了一个 TMyObj 的实例,就好比 TMyRecord = Record, var ARec: TMyRecord 一样。

语法其实就是一堆规定,编译器按规定办事。既然它支持这种语法而我居然不知道,对我来说就是一个秘密。

所以,有什么心得,请写出来。大家讨论,也可以帮助大家整理清楚思路,更好地理解。
system72
中階會員


發表:15
回覆:114
積分:55
註冊:2005-08-17

發送簡訊給我
#25 引用回覆 回覆 發表時間:2007-07-19 23:16:03 IP:219.81.xxx.xxx 訂閱
 雖然這種寫法可以稱上秘密,但還真的不是好的寫法,


倒是,多留意看看那些寫法,


可以讓反組譯時,更難閱讀,
或給那些想破解的人,更難追蹤程式.


或者真的為了保護一些智慧財,
(比方,商業間諜 或 想模仿堆出相似產品的廠商多,)

是該夾雜些較不好越讀的寫好, (甚至可以說是必要的.)

總不能我方花了30人月的,對方3人月就堆出相近低價產品.
這樣成本會很難回收的,
那不如多花1個人月,把程式碼稍微改造一下,如果能讓對方延後幾個月,是很划算的.


但要注意每個方法/寫法的潛在代價與成本. 自行取捨得失.




===================引 用 pcplayer99 文 章===================
G01 兄,谢谢你的分享。其实你说的这个对我来说的确是个秘密呢。我还真的不知道可以直接定义一个 object 呢。

我理解,TMyObj = class(TObject) ... 然后 MyObj := TMyObj.Create 是 Create 了一个 TMyObj 的实例;

TMyObj = object; var Myobj: TMyObj; 则是编译器直接帮我们 Create 了一个 TMyObj 的实例,就好比 TMyRecord = Record, var ARec: TMyRecord 一样。

语法其实就是一堆规定,编译器按规定办事。既然它支持这种语法而我居然不知道,对我来说就是一个秘密。

所以,有什么心得,请写出来。大家讨论,也可以帮助大家整理清楚思路,更好地理解。
Coffee
版主


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

發送簡訊給我
#26 引用回覆 回覆 發表時間:2007-07-19 23:54:26 IP:203.73.xxx.xxx 訂閱
暫不管這樣的觀念是否正確、好用,就這個論壇而言我想應該是正面的吧!

尤其現在這個一堆人上來問作業要程式的狀況下,終於開始有人討論有趣的題目了,這樣不是很好嗎?
站上的前輩們都有各自有強項,願意分享就是一個好的開始,
尤其syntax大你也說過,在K.Top越來越難學到東西了,好不容易有人起個頭了,應該要多多支持才是,
方法不好可以討論,觀念不對可以指教,但是一口氣抹殺了發文者的好意真的很可惜!
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
system72
中階會員


發表:15
回覆:114
積分:55
註冊:2005-08-17

發送簡訊給我
#27 引用回覆 回覆 發表時間:2007-07-20 17:53:24 IP:219.81.xxx.xxx 訂閱

其實就如使用 Goto 一樣,

如果 書/文章 有要教人使用 goto,

單因為 goto, 就會讓那文章作者大概會被不少人批評,
(幾乎已經是制式反應了)

因為新手應該避免養成使用 goto 的習慣,



但, goto 有個好處是,可以讓想破解,或反組譯的人,追蹤起來比較辛苦,

所以當你程式有5年以上經驗, Solid code, secure code 的觀念都已經很熟練了,
當所開發 產品可能是被破解惑反組譯的對象時,

這時候,把一些原有程式碼,較重要部分用 goto 改寫,變成是很好的選擇.


而且都有幾翻經驗下,應該可以控制的很好.


也有其妙用,不是嗎?





===================引 用 Coffee 文 章===================
暫不管這樣的觀念是否正確、好用,就這個論壇而言我想應該是正面的吧!

尤其現在這個一堆人上來問作業要程式的狀況下,終於開始有人討論有趣的題目了,這樣不是很好嗎?
站上的前輩們都有各自有強項,願意分享就是一個好的開始,
尤其syntax大你也說過,在K.Top越來越難學到東西了,好不容易有人起個頭了,應該要多多支持才是,
方法不好可以討論,觀念不對可以指教,但是一口氣抹殺了發文者的好意真的很可惜!
系統時間:2024-05-03 0:06:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!