madExcept Settings (Tab 9)

You can click on the tabs in the left side of the image:

assistant manager...

A madExcept assistant is a series of forms, all of which are displayed to the end user one after the other. Usually a madExcept assistant is shown when the user presses the button "send bug report", or in similar situations. However, you can also configure madExcept so that it shows an assistant instead of the exception box. Or you can show madExcept assistants manually at runtime.

If the user doesn't abort any of the assistant steps/forms, the input fields of the assistant are cached for the current exception. So if the user e.g. prints the bug report twice, the 2nd time the assistant is shown, all input fields are already filled with the values the user gave in earlier.

Assistants have to be thread safe, because they will often be shown in the context of secondary threads. Because of that the assistant GUI system doesn't use the VCL internally, but is built on pure win32 API calls.

madExcept predefines a set of default assistants. You can customize them or replace them with your own. Also you can add further assistants. All the assistants are stored into your executable in a way that gives translation tools access to the strings.

form manager...

Each assistant consists of one or more forms. Each form consists of three buttons (continue, skip, abort), some properties and eventually some more components like labels, edit/memo boxes, check boxes, buttons and images.

Setting up forms works somewhat similar to Delphi's object inspector. However, in madExcept you can't really locate the components freely. The layout of the forms is automatically generated by madExcept for you. The spacing between the components on the form is calculated in a way that should fit most situations quite fine. If you find the automatic spacing algorythm lacking, you can change the spacing manually. That's about the only control you have over component position, though.

There are no custom events, there's only one central event named "OnAction". You can put in there your event handler by specifying it via "UnitName.EventHandlerName". Your handler is called for all possible events. You have to check the parameters of the handler to find out which event has happened. The event handler must look like this:

type TNVActionHandler = procedure (form: INVForm; action: TNVAction; item: INVItem; exception: IUnknown);

The properties of the controls are explained here:

control documentation link
(all controls) INVItem
label INVLabel
button INVButton
checkbox INVCheckBox
edit INVEdit
image INVImage
form INVForm