Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Meine Komponente wirft Exceptions zur Designtime. Warum? (https://www.delphipraxis.net/142569-meine-komponente-wirft-exceptions-zur-designtime-warum.html)

LDericher 30. Okt 2009 19:21

Re: Meine Komponente wirft Exceptions zur Designtime. Warum?
 
So.
Hab den Fehler gefunden: Ich hatte das "read" nach der published property Code vergessen. Jetzt stimmts aber so weit... Und mal ehrlich: Dass hättet ihr doch sehen müssen? Ihr seid doch sonst so gut drauf ;) {Ist jetzt echt ernst gemeint, also nichts falsches reininterpretieren bitte :)}

Euer LDer

PS: Wenn man einer property den Typ TFileName gibt, kann man im OI ja per Doppelklick/Dialog eine Datei wählen. Gibt es da auch eine Möglichkeit, Ordner auswählbar zu machen?

Alter Mann 30. Okt 2009 21:22

Re: Meine Komponente wirft Exceptions zur Designtime. Warum?
 
Hi,

bin ja nicht so :wink:

nachdem ich einige Sachen (Win7 SDK, WAIK usw. runtergeladen habe) habe ich den Code mal durch D7 und D2K9 gejagt.

Ergebnis:
Der Destructor von THandle ist nicht sauber!
Es sind zwei unterschiedliche Ergebnisse zu erwarten:

1) So wie schon geschreiben, neue App, Unit mTHandler einbinden, Variable deklarieren, zwei Buttons (ein Create, ein Destroy) drauf, F9, Create drücken, App beenden: -> läuft!

2) F9, Create drücken, Destroy drücken, App beeenden: -> läuft nicht.


Her der geänderte destructor:
Delphi-Quellcode:
destructor THandler.Destroy;
var
  I:integer;
begin
  vRawCode.Free;
  vParsedCode.Free;
  for I:= (High(vPlugins))downto 0 do FreeLibrary(vPlugins[I]);
  inherited Destroy;
end;
Und hier die TestApp:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, mTHandler, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    TH : THandler;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  TH := THandler.Create(Self);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Button2Click(Sender);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if (TH <> nil) then FreeAndNil(TH); // ein TH.Free geht garnicht, warum?!
end;

end.
So LDericher, nun quäl dich mal selber ein wenig, bis zur Lösung.

An deinem 'vergessenen' read liegt es wohl nicht.

Gruß

LDericher 30. Okt 2009 22:20

Re: Meine Komponente wirft Exceptions zur Designtime. Warum?
 
Also bei mir läufts... ich hab natürlich auch den Destruktor geändert, hatte ich das nicht erwähnt? sorry :wall: bin etwas verplant heute ;)

Wie gesagt, bei mir gibts keine Probleme; wenn ich die Komponente installiere, kann ich sie so benutzen, wie ich will ;)

LDericher


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz