1、用tclientdate如何处理数据库异常2、Object pascal 中的oo机制3、Delphi消息处理机制4、Ttable tquery tdirect datset 的异同5、Delphi如何支持3层结构
 

解决方案 »

  1.   

    >>1、用tclientdate如何处理数据库异常
    不知問的是原理, 還是說代碼如何處理: 
    如果是後一種, 可在 ReconcileError 或其它幾個 OnXXXError 處理
    >>2、Object pascal 中的oo机制
    >>3、Delphi消息处理机制
    inside vcl 一書可參考or 這裹: http://www.delphibbs.com/keylife/iblog_show.asp?xid=5378
      

  2.   

    >>5、Delphi如何支持3层结构
    不知是實現原理, 還是實現的方法???delphi 通過一個 RemoteModual 可實現, 具體可通過 socket, dcom 等方式來聯接
      

  3.   

    找到以前的笔记了
    上面的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函数或其他默认的缺省窗口过程。