Exception im Designmodus anzeigen, wie?

Rund um die LCL und andere Komponenten
Antworten
dl5eu
Beiträge: 33
Registriert: Do 12. Sep 2013, 12:40

Exception im Designmodus anzeigen, wie?

Beitrag von dl5eu »

Hallo an alle,

ich benötige mal wieder einen kleinen Schubs in die richtige Richtung :-)

Ich habe ein Package mit eigenen Komponenten erstellt und in die Lazarus-IDE eingebunden. Wenn beim Ändern von Eigenschaften der Komponenten Fehler auftreten, wird eine von EInOutError abgeleitete Exception ausgelöst, die ich um eine Fehlermeldung in Textform ergänzt habe. EInOutError habe ich gewählt, weil es sich um Komponenten zur Ein- und Ausgabe von Daten handelt.

Beim normalen Programmablauf funktioniert das auch korrekt. Soll heißen, die Fehlermeldung wird korrekt gesetzt und ich kann sie mit ShowMessage() anzeigen. Ändere ich jedoch im Designmodus im Objektinspektor eine Eigenschaft und es tritt ein Fehler auf, wird zwar eine Exception ausgelöst aber lediglich ein leeres Fenster ohne Fehlermeldung angezeigt. Was muss ich tun, damit auch im Objektinspektor die Meldung angezeigt wird? Muss ich evtl. meine Exception von einer anderen Klasse ableiten? Wenn ja, von welcher?

Vielen Dank für Eure Hilfe!

Ralf

Warf
Beiträge: 1424
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Exception im Designmodus anzeigen, wie?

Beitrag von Warf »

Also nur damit ich das richtig verstehe, du hast ein Package mit einer Komponente, welche mit den Falschen Properties eine Exception feuert.

Lazarus kümmert sich um das Handeln von Exceptions zur design zeit selbst. Du musst kein eigenes error management mit ShowMessage vornehemen


Ich hab mal eben getestet mit dieser simplen Komponente:

Code: Alles auswählen

 
type
  TTestComp = class(TComponent)
  private
    FTest: Integer;
    procedure SetTest(AValue: Integer);
  published
    property Test: Integer read FTest write SetTest;
 
  end;
 
procedure Register;
 
implementation
 
procedure Register;
begin
  RegisterComponents('Additional',[TTestComp]);
end;
 
{ TTestComp }
 
procedure TTestComp.SetTest(AValue: Integer);
begin
  raise Exception.Create('abc');
end


Sobald ich Test einstellen will zeigt mir Lazarus wunderbar eine Fehlermeldung mit dem Text abc.

Wenn du den fehler selbst abfängst (und ihn dann mit ShowMessage zeigen willst) tu das nicht innerhalb der Komponente, sondern innerhalb der Software die die Komponenten verwendet (so wie Lazarus die Komponenten Fehler abfängt).

Leider ist mir nach wie vor nicht genau klar was du eigentlich für ein Problem hast, denn exceptions funktionieren (wie oben das beispiel) in Lazarus zur Designzeit wunderbar

dl5eu
Beiträge: 33
Registriert: Do 12. Sep 2013, 12:40

Re: Exception im Designmodus anzeigen, wie?

Beitrag von dl5eu »

Hallo Warf,

mir gelingt es leider immer wieder, mich unverständlich auszudrücken. Trotzdem hat mir Deine Antwort geholfen, das Problem zu lösen :-)

Mein Problem waren eigentlich zwei. Hätte ich mir den Vorfahren von EInOutError (also die Klasse Exception) richtig angesehen wäre mir gleich aufgefallen, dass ich mit meiner Klasse, so wie ich sie erstellt habe, das warme Wasser neu erfunden habe. Das war aber nicht weiter schlimm, sondern nur überflüssig. Das eigentliche Problem lag darin, dass ich am Ende des Konstruktors meiner Exception-Klasse das "inherited Create" mit der Fehlermeldung vergessen hatte. :oops:

Jedenfalls danke ich Dir für Deine Hilfe!

Herzliche Grüße,

Ralf

Warf
Beiträge: 1424
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: Exception im Designmodus anzeigen, wie?

Beitrag von Warf »

Versuchs mal mit:

Code: Alles auswählen

type
  EInOutError = class(Exception);


Der Exception Typ ist nunmal hilfreich für Try-Except

Antworten