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

如何產生Form的這個事件

尚未結案
kool0318
一般會員


發表:14
回覆:17
積分:6
註冊:2005-01-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-17 17:25:04 IP:220.130.xxx.xxx 未訂閱
請問各位專家 TApplicationEvents物件要如何產生 將 procedure TForm1.ApplicationEvents1Exception(Sender: TObject;E: Exception); 的程序直接寫程式中,執行後沒有反應,是不是不能直接寫,還是不能寫在unit裡,麻煩各位專家幫忙解答 謝謝 發表人 - kool0318 於 2005/02/17 17:31:16
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-17 18:12:22 IP:202.39.xxx.xxx 未訂閱
看不懂您的問題 是指動態產生 TApplicstionEvent 元件嗎? 那試試:
var
  AppEvents: TApplicationEvents;    procedure TForm1.FormCreate(Sender: TObject);
begin
  AppEvent := TApplication.Events.Create(Self);
  AppEvent.OnException := ApplicationEvent1Exception;
end;
如果不用元件的話:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnException := ApplicationEvent1Exception;
end;
兩者都要先將 procedure TForm1.ApplicationEvents1Exception(Sender: TObject;E: Exception); 這部份做好.
kool0318
一般會員


發表:14
回覆:17
積分:6
註冊:2005-01-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-18 08:22:12 IP:220.130.xxx.xxx 未訂閱
不好意思,問的不清不楚的,我再重新描述我的問題 我在程式中利用DirectoryListBox來開啟檔案,但是如果點選光碟機,如果 光碟機中無光碟片就會出現錯誤,我在站上尋找相關文章, 找到jest0024大大發表的文章:如下 "放置個TApplicationEvents物件攔劫例外 procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception); begin if e is EInOutError then begin if GetLastError=21 then ShowMessage('光碟機沒光碟片!!'); end; end;" 可是我找不到TApplicationEvents這個物件,直接將這個procedure寫在程式中 也沒反應,不知道是少作哪個步驟? 大大提供的兩個方法我都試過了,都會出現錯誤 第一個出現 undeclared identiifier TApplicationEvents 第二個出現 undeclared identiifier ApplicationEvent1Exception 麻煩大大幫我解答 謝謝
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-18 08:36:14 IP:202.39.xxx.xxx 未訂閱
好像 Delphi5 還是 Delphi4 以後才有 TApplicationEvent 元件 (在元件盤的 Additional 頁) 沒有這個元件可用如下的方試試:
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;    type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    // 這裡要宣告
    procedure ApplicationException(Sender: TObject; E: Exception);
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.DFM}    { TForm1 }    procedure TForm1.ApplicationException(Sender: TObject; E: Exception);
begin
  if E is EInOutError then
  begin
    if GetLastError=21 then
      ShowMessage('光碟機沒光碟片!!');
  end;
end;    procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnException := ApplicationException;
end;    end.
發表人 - hagar 於 2005/02/18 08:39:27
kool0318
一般會員


發表:14
回覆:17
積分:6
註冊:2005-01-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-18 09:05:37 IP:210.68.xxx.xxx 未訂閱
大大 不好意思還是無法觸發TForm1.ApplicationException這個事件 而且我的程式碼中沒有 { TForm1 } 這一行,手動加入後還是無法成功 麻煩大大解答 謝謝 不過我有找到 TApplicationEvent這個物件(我用7.0),但把程式碼加入 仍然無反應
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-18 09:16:15 IP:202.39.xxx.xxx 未訂閱
小弟這邊試的結果是會觸發 EInOutError 的 但 GetLastError 的值卻不一定是 21 大部份是 87
procedure TForm1.ApplicationException(Sender: TObject; E: Exception);
var
  iError: integer;
begin
  if E is EInOutError then
  begin
    iError := GetLastError;        if iError=21 then
      ShowMessage('光碟機沒光碟片!!') 
    else
      ShowMessage(SysErrorMessage(iError));
  end;
end;
發表人 - hagar 於 2005/02/18 09:20:49
kool0318
一般會員


發表:14
回覆:17
積分:6
註冊:2005-01-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-18 09:30:42 IP:210.68.xxx.xxx 未訂閱
小弟出現的錯誤訊息是這個,所以應該還是沒觸發成功,不知道原因出在哪耶 以下是我測試的程式碼 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, FileCtrl, AppEvnts; type TForm1 = class(TForm) DriveComboBox1: TDriveComboBox; DirectoryListBox1: TDirectoryListBox; FileListBox1: TFileListBox; procedure FormCreate(Sender: TObject); private procedure ApplicationException(Sender: TObject; E: Exception); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ApplicationException(Sender: TObject; E: Exception); var iError: integer; begin if E is EInOutError then begin iError := GetLastError; if iError=21 then ShowMessage('光碟機沒光碟片!!') else ShowMessage(SysErrorMessage(iError)); end; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnException := ApplicationException; end; end.
kool0318
一般會員


發表:14
回覆:17
積分:6
註冊:2005-01-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-02-18 09:54:06 IP:220.130.xxx.xxx 未訂閱
我找到原因了 原來是還沒執行完畢 感謝大大的回答
系統時間:2024-05-22 5:47:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!