明天要考试,几个DELPHI的基础问题还忘大家指点一下!一个问题散100,急!!! 1、用tclientdate如何处理数据库异常2、Object pascal 中的oo机制3、Delphi消息处理机制4、Ttable tquery tdirect datset 的异同5、Delphi如何支持3层结构 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 >>1、用tclientdate如何处理数据库异常不知問的是原理, 還是說代碼如何處理: 如果是後一種, 可在 ReconcileError 或其它幾個 OnXXXError 處理>>2、Object pascal 中的oo机制>>3、Delphi消息处理机制inside vcl 一書可參考or 這裹: http://www.delphibbs.com/keylife/iblog_show.asp?xid=5378 >>5、Delphi如何支持3层结构不知是實現原理, 還是實現的方法???delphi 通過一個 RemoteModual 可實現, 具體可通過 socket, dcom 等方式來聯接 找到以前的笔记了上面的tmsg记录是由windows定义的 hwnd 域表示其窗口过程将要接受此消息的窗口句柄, message 为消息标识域 wparam或lparam域表示的附加信息,time 为消息发出的时间,pt表示消息发出时光标在屏幕的位置。 消息处理 发生某件事情时,windows将根据发生的事情创建一条消息,并将其放到应用程序的消息队列(message queue)的末尾,应用程序然后从消息列表中 获取消息并分配给指定的窗口或组件。每个窗口都定义了一个所谓的窗口过程,该窗口过程负责接受并响消息,并将结果再返回给操作系统。 procedure TAppliacation.ProcessMessage; var Msg: TMsg; begin while ProcessMessage(Msg) do (loop); end; processMessage 方法中的while循环就是所谓的消息循环, 该循环除了不停的调用processmessage方法处理每个消息并根据该方法的返回值判断退出条件外,其他的都不做。 消息处理机制 delphi中的消息记录 type PMessage =^Tmessage Tmessage = packed record Msg : Cardinal; case Integer of 0:(wParam: longint; LParam: Longint; Resutlt: longint); 1:(WParamLo: word; WParamHi: word; LparamLo: word; LparamHi: word; ResultLo: word; ResultHi: word); end; Vcl 消息处理 vcl中的每个消息处理过程只负责处理一条消息 消息处理过程应该继承父累的消息处理过程,除非不希望进行常规的消息处理,并且inherited条用一般都在消息处理过程的最后进行。 消息处理过程中的inherited关键字后可以不跟随要继承的方法名 消息处理过程的继续机制使用message关键字后的消息类型确定要继承的方法。 消息返回值 不风消息在处理后需要一个返回值,此时可以对消息记录的result域进行赋值。 procedure TCustomForm.WMQueryDragIcon(var Message: TWMQueryDragIcon); begin Message.Result:=GetIconHandle; end; 设置消息返回值一般在inherited关键字的调用之后。 消息在生存中经过发送,接受,处理三个阶段。消息的接受是自动进行的,windwos消息以及vcl自定义的消息的发送也是自动的 而我们定义的消息必须编程实现消息的发送 消息的发送 在vcl类中,消息的发送可以使用三种方法 1 使用win32api函数,sendmessage postmessage或postthreadmessage: 2 使用tcontrol类的perform方法, 3 使用 twincontrol类的broadcast type TControl = class (TComponent) public function Perform(Msg: Cardinal; WParam,LParam: Longint); Longint; end; TWinControl=class(TControl) public function Broadcast(var Message); end; function PostMessage(hWnd: HWND; Msg: Cardinal;WParam,LParam: Longint): LongBool; function PostThreadMessage(hWnd: HWND; Msg: Cardinal;WParam,LParam: Longint): LongBool; function SendMessage(hWnd: HWND; Msg: Cardinal;WParam,LParam: Longint): LongBool; 一般来说 ,需要自己给自己发笑,调用控件类的perform方法,隐藏了控件类的窗口句柄参数。 procedure TForm1.Button1Click(Sender: TObject); begin Self.perform(JM_DATA,29,31); end; 等效 SendMessage(self.Handle,jm_data,29,31); PostMessage(self.Handle,jm_data,29,31); Broadcast 方法向所有当前控件的子控件广播某条消息。 vcl消息处理流程 对于每一条消息 TApplication类的processmessage方法都将应用程序的主消息循环processmessage方法调用 type TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of object; TMessageEvent过程带有一个handle参数,如果onmessage事件处理完消息后将此参数设为true 则该消息已经处理完毕,后继代码将不会再响应该消息 在次之后 processmessage方法调用win32 函数 DispatchMessage 将消息派发到某个出口的过程,次窗口过程就是所谓的StdWndProc函数,StdWndProc 函数起到消息中转站的作用,由它将消息派发给对象。 如果接受消息的对象为 twincontrol 等类的实例 则 MainWndProc方法会调用处理该消息,之后WndProc方法将得到该消息 消息在WndProc 方法进入vcl消息派发机制---由Dispatch 方法将消息派发给某个消息句柄 在消息处理过程处理完消息以后, TControl类的DefaultHandler 方法获得了消息处理权 DefaultHandle对消息进行最后的处理。 消息处理流程离开vcl派发机制,返回到windows的DefWindowProc函数或其他默认的缺省窗口过程。 关于时间的查询!!! 请问前台用delphi后台用oracle,如何操作连接?在线等 请问以下代码会造成内存泄露吗? 初学者提问:大家现在用的delphi是6.0还是7.0? 解除 占用 stringgrid如何实现非连续多选 delphi 存储过程 在delphi设计时,怎样查看资源的ID? 谁能告诉我这些WinAPI函数都有什么功能? 菜鸟问题,大赠分 大哥们救我,关于OleContainer控制word的问题! 请教大虾改进一下我这个简单的控件啦
不知問的是原理, 還是說代碼如何處理:
如果是後一種, 可在 ReconcileError 或其它幾個 OnXXXError 處理
>>2、Object pascal 中的oo机制
>>3、Delphi消息处理机制
inside vcl 一書可參考or 這裹: http://www.delphibbs.com/keylife/iblog_show.asp?xid=5378
不知是實現原理, 還是實現的方法???delphi 通過一個 RemoteModual 可實現, 具體可通過 socket, dcom 等方式來聯接
上面的tmsg记录是由windows定义的
hwnd 域表示其窗口过程将要接受此消息的窗口句柄,
message 为消息标识域 wparam或lparam域表示的附加信息,time 为消息发出的时间,pt表示消息发出时光标在屏幕的位置。 消息处理
发生某件事情时,windows将根据发生的事情创建一条消息,并将其放到应用程序的消息队列(message queue)的末尾,应用程序然后从消息列表中
获取消息并分配给指定的窗口或组件。每个窗口都定义了一个所谓的窗口过程,该窗口过程负责接受并响消息,并将结果再返回给操作系统。
procedure TAppliacation.ProcessMessage;
var
Msg: TMsg;
begin
while ProcessMessage(Msg) do (loop);
end; processMessage 方法中的while循环就是所谓的消息循环,
该循环除了不停的调用processmessage方法处理每个消息并根据该方法的返回值判断退出条件外,其他的都不做。 消息处理机制 delphi中的消息记录 type
PMessage =^Tmessage
Tmessage = packed record
Msg : Cardinal;
case Integer of
0:(wParam: longint; LParam: Longint; Resutlt: longint);
1:(WParamLo: word; WParamHi: word; LparamLo: word; LparamHi: word; ResultLo: word; ResultHi: word);
end; Vcl 消息处理
vcl中的每个消息处理过程只负责处理一条消息
消息处理过程应该继承父累的消息处理过程,除非不希望进行常规的消息处理,并且inherited条用一般都在消息处理过程的最后进行。
消息处理过程中的inherited关键字后可以不跟随要继承的方法名
消息处理过程的继续机制使用message关键字后的消息类型确定要继承的方法。 消息返回值
不风消息在处理后需要一个返回值,此时可以对消息记录的result域进行赋值。
procedure TCustomForm.WMQueryDragIcon(var Message: TWMQueryDragIcon);
begin
Message.Result:=GetIconHandle;
end;
设置消息返回值一般在inherited关键字的调用之后。 消息在生存中经过发送,接受,处理三个阶段。消息的接受是自动进行的,windwos消息以及vcl自定义的消息的发送也是自动的
而我们定义的消息必须编程实现消息的发送 消息的发送
在vcl类中,消息的发送可以使用三种方法
1 使用win32api函数,sendmessage postmessage或postthreadmessage:
2 使用tcontrol类的perform方法,
3 使用 twincontrol类的broadcast
type
TControl = class (TComponent)
public
function Perform(Msg: Cardinal; WParam,LParam: Longint); Longint;
end; TWinControl=class(TControl)
public
function Broadcast(var Message);
end; function PostMessage(hWnd: HWND; Msg: Cardinal;WParam,LParam: Longint): LongBool;
function PostThreadMessage(hWnd: HWND; Msg: Cardinal;WParam,LParam: Longint): LongBool;
function SendMessage(hWnd: HWND; Msg: Cardinal;WParam,LParam: Longint): LongBool; 一般来说 ,需要自己给自己发笑,调用控件类的perform方法,隐藏了控件类的窗口句柄参数。
procedure TForm1.Button1Click(Sender: TObject);
begin
Self.perform(JM_DATA,29,31);
end;
等效
SendMessage(self.Handle,jm_data,29,31);
PostMessage(self.Handle,jm_data,29,31); Broadcast 方法向所有当前控件的子控件广播某条消息。
vcl消息处理流程
对于每一条消息 TApplication类的processmessage方法都将应用程序的主消息循环processmessage方法调用
type
TMessageEvent = procedure (var Msg: TMsg; var Handled: Boolean) of object;
TMessageEvent过程带有一个handle参数,如果onmessage事件处理完消息后将此参数设为true 则该消息已经处理完毕,后继代码将不会再响应该消息
在次之后 processmessage方法调用win32 函数 DispatchMessage 将消息派发到某个出口的过程,次窗口过程就是所谓的StdWndProc函数,StdWndProc
函数起到消息中转站的作用,由它将消息派发给对象。
如果接受消息的对象为 twincontrol 等类的实例 则 MainWndProc方法会调用处理该消息,之后WndProc方法将得到该消息
消息在WndProc 方法进入vcl消息派发机制---由Dispatch 方法将消息派发给某个消息句柄
在消息处理过程处理完消息以后, TControl类的DefaultHandler 方法获得了消息处理权 DefaultHandle对消息进行最后的处理。
消息处理流程离开vcl派发机制,返回到windows的DefWindowProc函数或其他默认的缺省窗口过程。