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
Exception im Designmodus anzeigen, wie?
-
- Beiträge: 1911
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Exception im Designmodus anzeigen, wie?
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:
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
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
Re: Exception im Designmodus anzeigen, wie?
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.
Jedenfalls danke ich Dir für Deine Hilfe!
Herzliche Grüße,
Ralf
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.
Jedenfalls danke ich Dir für Deine Hilfe!
Herzliche Grüße,
Ralf
-
- Beiträge: 1911
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Exception im Designmodus anzeigen, wie?
Versuchs mal mit:
Der Exception Typ ist nunmal hilfreich für Try-Except
Code: Alles auswählen
type
EInOutError = class(Exception);
Der Exception Typ ist nunmal hilfreich für Try-Except