Arsip: Modified Exception

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.

more 14 years ago
Manz
gimana kalo pake
try
... bla bla bla
except
... disini buat messagebox nya sekehendak-mu
end;
IMHO :lol:
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.

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 ....

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

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 bawaanAsal 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;

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

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

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
reply |
Report Obsolete
Last Articles
- Project Group dalam Lazarus
- FastPlaz Database Explorer
- Release: FastPlaz Super Mom v0.12.22
- PascalClass #3: Web Development with Free Pascal
- Makna Pascal di Pascal Indonesia
- Kulgram : Instalasi Lazarus di Perangkat Berbasis ARM
- PascalClass #1: Analisa Database dan Machine Learning
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
- Mengenal OXYGENE – Pascal For .NET
- PascalTalk #5: UX: Research, Design and Engineer
Last Topic
- PascalTalk #6: (Podcast) Kuliah IT di luar negeri, susah gak sih?
by LuriDarmawan in Tutorial & Community Project more 3 months ago - PascalTalk #5: UX: Research, Design and Engineer
by LuriDarmawan in Tutorial & Community Project more 3 months ago - PascalTalk #4: Obrolan Ringan Seputar IT
by LuriDarmawan in Tutorial & Community Project more 4 months ago - PascalTalk #2: Membuat Sendiri SMART HOME
by LuriDarmawan in Tutorial & Community Project more 4 months ago - PascalTalk #3: RADically Fast and Easy Mobile Apps Development with Delphi
by LuriDarmawan in Tutorial & Community Project more 4 months ago - PascalTalk #1: Pemanfaatan Artificial Intelligence di Masa Covid-19
by LuriDarmawan in Tutorial & Community Project more 4 months ago - Tempat Latihan Posting
by LuriDarmawan in OOT more 1 years ago - Archive
- Looping lagi...
by idhiel in Hal umum tentang Pascal Indonesia more 8 years ago - [ask] koneksi ke ODBC user Dsn saat runtime dengan ado
by halimanh in FireBird more 8 years ago - Validasi menggunakan data tanggal
by mas_kofa in Hal umum tentang Pascal Indonesia more 8 years ago
Random Topic
- tanya error???
by chandra in Tip n Trik Pemrograman more 13 years ago - program kompresor/zip & SFX
by Dedi_Shen in Tip n Trik Pemrograman more 14 years ago - Dunia Persilatan dan dunia komputer
by danieljun in OOT more 12 years ago - storedProc komponen....????
by nioko in MySQL more 14 years ago - komponen barcode+tampilan detail d report
by icank in Network, Files, I/O & System more 12 years ago - men-disable semua dbedit/tedit dgn sedikit coding??
by imunk in Tip n Trik Pemrograman more 14 years ago - log pada mysql
by dom1n1ng in MySQL more 12 years ago - ginana koneksi ke DB pake file INI?
by putukaca in Tip n Trik Pemrograman more 13 years ago - Menghitung Jumlah Cell di stringgrid ?
by jajang in Hal umum tentang Pascal Indonesia more 12 years ago - Get The Computer Name
by kabuki_enemy in Tip n Trik Pemrograman more 12 years ago