Arsip: Modified Exception

 
user image
more 14 years ago

wh4nx

Temen² gue mo nanya nih bagaimana ya cara buat exception yang modelnya kaya messagedlg or messagebox jadi kita bisa modif button or caption pada dialog exception tersebut. Selama ini yg saya gunakan -> raise exception.create('bla bla bla'); tapi pada caption dialognya yg muncul project1 dan tombolnya cuma 'OK'. Nah, dialog eksepsi yg saya inginkan adalah yg bisa diganti captionnya dan tombolnya sesuka kita. thanks.
user image
more 14 years ago

Manz

gimana kalo pake

try
 ... bla bla bla
except
 ... disini buat messagebox nya sekehendak-mu
end;
IMHO :lol:
user image
more 14 years ago

_lmz

Apabila ada exception yang di-"raise" tanpa ditangkap pada "except" maka akan ditangkap oleh default exception handler milik Delphi. Default exception handler untuk aplikasi yang memiliki class TApplication akan memanggil TApplication.OnException yang bisa ditangkap dengan komponen TApplicationEvents. Lihat help delphi bagian: ExceptProc, TApplication.OnException Itu teorinya. Sekarang untuk prakteknya, menampilkan pesan untuk exception yang ingin anda tangani memang lebih baik seperti kata manz_delphi yaitu dengan try...except untuk class-class exception tertentu. Kecuali jika memang anda ingin menangani exception yang "lepas" dengan menampilkan message "oops... hubungi tech support, (021)-xxxyyyy", ya tidak ada yang melarang :) Satu lagi yang mungkin menarik: pada aplikasi console, default exception handler tidak akan melanjutkan program tapi akan langsung menghentikan program setelah mencetak pesan error.
user image
more 14 years ago

wh4nx

@lmz nah itu mas, maksud saya adalah eksepsi lepas yang blom didefinisakan oleh si Delphi. Jadi bukan kaya EConvertError ato EDivByZero :-P klo pake try..except kan harus pake Eksepsi bawaan :-( Eksepsi ini akan saya masukkan pada kelas Login yang memiliki property Username dan Password sehingga kira2 seperti ini : procedure setUsername(Value: string); begin if FUsername <> Value then begin if length(FUsername) = 0 then raise Exception.Create('Isi dulu username!') else FUsername := Value; end; end; begitu juga dengan procedure setPassword(); Nah, saya pengennya eksepsinya bisa kayak MessageDlg or MessageBox :-) Ada masukan, saran, komentar ....
user image
more 14 years ago

Manz

Gimana kalo pake ini : TCustomLoginFormAdapter.RaiseBlankUserName sama ... TCustomLoginFormAdapter.RaiseBlankPassword method ??? :D
user image
more 14 years ago

_lmz

@wh4nx: nah itu mas, maksud saya adalah eksepsi lepas yang blom didefinisakan oleh si Delphi. Jadi bukan kaya EConvertError ato EDivByZero klo pake try..except kan harus pake Eksepsi bawaan
Asal tahu saja, anda bisa mendefinisikan exception sendiri (cukup diturunkan saja classnya)... Istilah "lepas" di situ (untuk ExceptProc) mungkin salah kaprah, seharusnya "unexpected" alias tidak diantisipasi oleh programmer. Berikut contohnya exception buatan sendiri (nggak ada hubungannya dengan database sih, cuma contoh aja):

unit EuErrors;
interface
uses SysUtils;
type
  EEuCompilerError = class (Exception) end;
  EEuInternalCompilerError = class(EEuCompilerError) end;
  EEuSemanticError = class (EEuCompilerError) end;
  EEuSyntaxError = class (EEuCompilerError) end;
  EEuSymbolTableError = class(EEuSemanticError) end;
  EEuDuplicateIdentifierError = class(EEuSymbolTableError) end;
  EEuUndeclaredIdentifierError = class(EEuSymbolTableError) end;
  EEuIllegalInstructionLocationError = class(EEuSyntaxError) end;
  EEuTypeError = class(EEuSemanticError) end;
  EEuParamCountError = class(EEuSemanticError)
  protected
    FExpectedCount : Integer;
    FActualCount : Integer;
  public
    constructor CreateFmt(format : string; params : array of const; expected : Integer; actual : Integer);
    property ExpectedCount : Integer read FExpectedCount;
    property ActualCount : Integer read FActualCount;
  end;
  EEuMachineError = class(Exception)
  end;
  EEuMTypeCheckError = class(EEuMachineError)
  end;
  EEuMStackEmptyError = class(EEuMachineError)
  end;
  EEuMIllegalValueOperationError = class(EEuMachineError)
  end;

implementation
{ EEuParamCountError }
constructor EEuParamCountError.CreateFmt(format: string;
  params: array of const; expected, actual: Integer);
begin
  inherited CreateFmt(format, params);
  FExpectedCount := expected;
  FActualCount := actual;
end;
end.
Penggunaan setelah dilakukan "uses" juga sama (pada try..except menggunakan nama class anda):

procedure TFunctionCallNode.Accept(cg: TCodeGenerator);
var i : integer;
begin
  for i := FContents.Count - 1 downto 0 do begin
    INode(FContents[i]).Accept(cg);
  end;
  try
    cg.inst_CallFunction(FName, FContents.Count);
  except
    on e : EEuParamCountError do begin
      if e.ExpectedCount > e.ActualCount then begin
        INode(FContents).GetConcreteNode.ThrowError(e);
      end
      else begin // ExpectedCount < ActualCount
        INode(FContents).GetConcreteNode.ThrowError(e);
      end;
    end;
    on e : EEuCompilerError  do ThrowError(e);
  end;
end;
user image
more 14 years ago

wh4nx

:shock: :shock: :shock: Busyeeet apaan tuch Mas, jadi bingung :-D Apakah ada link² yang bisa menjelaskan listing tersebut....?
user image
more 14 years ago

EkoIndri

Kalau paling enak itu, menggunakan uerekalog kemudian tangkap errornya dan ganti dengan menggunakan messageDlg box untuk menampilkannya.
user image
more 14 years ago

wh4nx

Mas EkoIndri 'uerekalog' kuwi opo ???
user image
more 14 years ago

EkoIndri

itu tools untuk mencari bug... kemudian, tools tersebut bisa menangkap error. setelah itu, anda bisa mengetahui apa penyebab errornya. info lebih lanjut http://www.eurekalog.com/index.php
more ...
  • Pages:
  • 1
  • 2
Share to

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com