Delphi/CBC学习心得(转抄)(0分)

C

coolren

Unregistered / Unconfirmed
GUEST, unregistred user!
下面这篇文章是我的处女作 :)
请指点 oldplantegg@163.com

哈哈,这几天狂看VCL源代码,简直是心旷神怡!!如果你还不习惯看源代码,如果你还不
习惯看帮助文档,如果你还没装上MSDN。那么就请赶快,越快越好!!这样你会有一种超
脱的感觉。确实,Delphi/CBC中有太多的东西在书本上根本找不到,甚至连帮助文当中都
找不到,这不能不说是Delphi/CBC学习这最大的障碍,确切来说是这些人突破的最大障碍
!!而这些东西,你可以在帮助文档、源代码中一览无余。虽说这种办法有点不爽,但是
实在使没办法呀!那天等我成为高手了,一定将这些东西整理成册,让Delphi/CBC的学习
这脱离这种尴尬!至于如今市面上的Delphi/CBC书籍实在是不敢让人去恭维,我真不知道
那些作者与出版社是怎么想的?没钱花吗?有必要将这些书弄得千篇一律吗?每本书总是
冠以适合初学者、高手,这可能本,就那三四百业的小册子。这帮人真是可笑,想提高销
售数目也不必这样捂着良心说话呀!算了不说那帮没良心的人,免得影响我写东西的心情
JJJ
刚刚看了一下Set(集合),感觉C++Language的功底深厚一点还是很有必要的。比如我们经
常看见的:
//This example sets a Label's Font Style to fsBold and fsUnderline.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label1->Font->Style = TFontStyles()<< fsBold << fsUnderline;
/*TfontStyles是一个集合
Determines whether the font is normal, italic, underlined, bold, and so on.
enum TFontStyle { fsBold, fsItalic, fsUnderline, fsStrikeOut };
typedef Set<TFontStyle, fsBold, fsStrikeOut> TFontStyles;
__property TFontStyles Style = {read=GetStyle, write=SetStyle, nodefault};
Description
Use Style to add special characteristics to characters that use the font. Styl
e is a set containing zero or more values from the following:
Value Meaning
fsBold The font is boldfaced.
fsItalic The font is italicized.
fsUnderline The font is underlined.
fsStrikeOut The font is displayed with a horizontal line through it.
同时Set中重载了<<operator >>operator =operator等操作符
这样看过这些以后我想你该不会对这段代码有点陌生了吧,用C++的眼光看来一切都是那么
自然!!J*/
}
//This example demonstrates how to clear any Styles that were previously set.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Label1->Font->Style = TFontStyles();
}
还有一个明显的例子就是C++中的函数指针(function pointer)在Delphi/CBC中用得最多
的就是事件句柄了(实际上,事件句柄就是函数指针)
我们来看一个例子:

typedef void __fastcall (__closure *TMessageEvent)(tagMSG &Msg, bool &Handled
);
__property TMessageEvent OnMessage = {read=FOnMessage, write=FOnMessage};
这里定义了一个函数指针TmessageEvent
这样你只要 Tform1.hpp中这样写:TmessageEvent AppMessage;
就定义了一个TmessageEvent的函数指针
看这个例子:
//The following code handles a custom message that the application sends to //
itself when a file is ready for reading.
const WM_FILEREADY = WM_USER + 2000;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnMessage = AppMessage;
/*关键是这里将自定义的函数指/赋给Application->OnMessage
这样就可以重载//Application->OnMessage方法了
怎么样很简单吧J但如果你不懂事件句柄的原理,嘿嘿
不过茄子不得不告诉你这样做是很危险的,因为OnMessage收到的消息太多了*/
}
//在下面就可以处理你想要处理的消息了:
void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
if (Msg.message == WM_FILEREADY)
{
Memo1->Lines->LoadFromFile(AnsiString((char *)Msg.lParam));
Handled = true;
}
/* for all other messages, Handled remains False so that other message handl
ers can respond */
}
而事件句柄是怎么处理的呢?有时候我们不一定为事件句柄写代码了,比如Application-
>OnMessage事件,有时候就没有为它写什么,那程序是怎么处理这些的呢?看下面的代码

function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
var
Handled: Boolean;
begin
Result := False;
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
Result := True;
if Msg.Message <> WM_QUIT then
begin
Handled := False;
//关键是下面这行,Assigned(FonMessage)就是判断你有没有为//Application->OnMessa
ge写下你自己的代码,在上面的例子中我们写//了,所以 Assigned(FonMessage)返回得直
就是true,这样调用//FonMessage事件,而这时由于有这句:
// Application->OnMessage = AppMessage;//关键是这里将自定义的函数指针//赋给App
lication->OnMessage
//这样就可以重载//Application->OnMessage方
法了
//怎么样很简单吧J但如果你不懂
//事件句柄的原理,嘿嘿
//所以,程序就会处理你的代码了,明白了吗?
//如果没有上面这句,Assigned(FonMessage)返回的就是false这样程序//就不必管这些了
if Assigned(FOnMessage) then
FOnMessage(Msg, Handled);
if not IsHintMsg(Msg) and not Handled and not IsMDIMsg(Msg) and
not IsKeyMsg(Msg) and not IsDlgMsg(Msg) then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end
else
FTerminate := True;
end;
end;

怎么样看了上面的这些你有点感觉了吗?如果没有可别骂我,多看看帮助文档吧,先咬咬
牙,慢慢的你就发现不就是那几个单词吗?久了自然就熟了JJ我的6级才考20多分不也一样
看吗?哎呀,泄漏个人隐私了,你得替我保密哟
好了,我还没吃饭,等着就要上课了,下回再写!!
请指点 oldplantegg@163.com


--
※ 来源:.哈工大紫丁香 http://bbs.hit.edu.cn [FROM: 210.46.79.154]
 
我来帮你提前,你说的话对我的信心有很大提升!!!!
 
up!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!![:D]
 
如何看VCL源代码呢?
 
源代码一般放在安装目录/Source 下面,你只要在Delphi中打开它们,你就可以一饱眼福了
[^]
 
这些东西学学sdk也就好了。两年以前开始用delphi编程,主要用于大型企业架构,当时有李维
的delphi5.x系列,工作还算顺利,一年前开始用vc,因为不喜欢mfc,所以都用sdk,如今再用
delphi,感觉已经大大不同。建议大家也都学学。呵呵。当然,假如您有时间的话。
 
顶部