<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Problem mit Komponente freigeben]]></title><description><![CDATA[<p>Servus!</p>
<p>Ich habe mir für meinen CBuilder5 eine Delphi Komponente umgeschrieben und bekomme die Meldung &quot;fehler: zugriffsverletzung bei adresse 00000101. lesen bei adresse 00000101&quot; wenn ich die Komponente vom Formular zur Entwicklungszeit wieder löschen möchte.</p>
<p>Wenn ich die beiden Speedbutton auskommentiere gehts..<br />
es geht aber auch wenn ich diese drin lasse und statt dessen das Panel auskommentiere. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<pre><code>destructor TMyEditEx.Destroy;                  
begin                                               
  if ProgressBar &lt;&gt; nil then ProgressBar.Free;                              
  [b]//if FSpeedButton1 &lt;&gt; nil then FSpeedButton1.Free; [/b]                            
  [b]//if FSpeedButton2 &lt;&gt; nil then FSpeedButton2.Free;          [/b]                   
  if FPanel &lt;&gt; nil then FPanel.Free;                                   
  inherited Destroy;                             
end;  
[b]
// Auch dies funktioniert fehlerfrei[/b] 
destructor TMyEditEx.Destroy;                  
begin                                               
  if ProgressBar &lt;&gt; nil then ProgressBar.Free;                              
  if FSpeedButton1 &lt;&gt; nil then FSpeedButton1.Free;                             
  if FSpeedButton2 &lt;&gt; nil then FSpeedButton2.Free;                             
  [b]//if FPanel &lt;&gt; nil then FPanel.Free;  [/b]                                 
  inherited Destroy;                             
end;
</code></pre>
<p>Erstellt werden beide so</p>
<pre><code>FPanel := TTePanel.Create(Self);
  with FPanel do begin
    Parent := Self;
    BevelOuter := bvNone;
  end;
  FSpeedButton1 := TTeSpeedButton.Create(FPanel);
  with FSpeedButton1 do begin
  	Parent := FPanel;
  	Visible := true;
  	Top := 0;
  	Left := 0;
  	Width := 21;
  	NumGlyphs := 4;
  	Invalidate;
  	OnMouseDown := SpeedButton1MouseDown;
  	OnMouseUp := SpeedButton1MouseUp;
  end;
</code></pre>
<p>Da ich beides einzeln freen kann aber nicht zusammen, gibts beim erstellen etwas das ich hätte beachten müssen bzw beim freen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/206034/problem-mit-komponente-freigeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 01:26:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206034.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Feb 2008 15:24:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Komponente freigeben on Wed, 20 Feb 2008 15:24:00 GMT]]></title><description><![CDATA[<p>Servus!</p>
<p>Ich habe mir für meinen CBuilder5 eine Delphi Komponente umgeschrieben und bekomme die Meldung &quot;fehler: zugriffsverletzung bei adresse 00000101. lesen bei adresse 00000101&quot; wenn ich die Komponente vom Formular zur Entwicklungszeit wieder löschen möchte.</p>
<p>Wenn ich die beiden Speedbutton auskommentiere gehts..<br />
es geht aber auch wenn ich diese drin lasse und statt dessen das Panel auskommentiere. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<pre><code>destructor TMyEditEx.Destroy;                  
begin                                               
  if ProgressBar &lt;&gt; nil then ProgressBar.Free;                              
  [b]//if FSpeedButton1 &lt;&gt; nil then FSpeedButton1.Free; [/b]                            
  [b]//if FSpeedButton2 &lt;&gt; nil then FSpeedButton2.Free;          [/b]                   
  if FPanel &lt;&gt; nil then FPanel.Free;                                   
  inherited Destroy;                             
end;  
[b]
// Auch dies funktioniert fehlerfrei[/b] 
destructor TMyEditEx.Destroy;                  
begin                                               
  if ProgressBar &lt;&gt; nil then ProgressBar.Free;                              
  if FSpeedButton1 &lt;&gt; nil then FSpeedButton1.Free;                             
  if FSpeedButton2 &lt;&gt; nil then FSpeedButton2.Free;                             
  [b]//if FPanel &lt;&gt; nil then FPanel.Free;  [/b]                                 
  inherited Destroy;                             
end;
</code></pre>
<p>Erstellt werden beide so</p>
<pre><code>FPanel := TTePanel.Create(Self);
  with FPanel do begin
    Parent := Self;
    BevelOuter := bvNone;
  end;
  FSpeedButton1 := TTeSpeedButton.Create(FPanel);
  with FSpeedButton1 do begin
  	Parent := FPanel;
  	Visible := true;
  	Top := 0;
  	Left := 0;
  	Width := 21;
  	NumGlyphs := 4;
  	Invalidate;
  	OnMouseDown := SpeedButton1MouseDown;
  	OnMouseUp := SpeedButton1MouseUp;
  end;
</code></pre>
<p>Da ich beides einzeln freen kann aber nicht zusammen, gibts beim erstellen etwas das ich hätte beachten müssen bzw beim freen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1459545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1459545</guid><dc:creator><![CDATA[Junt]]></dc:creator><pubDate>Wed, 20 Feb 2008 15:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Komponente freigeben on Wed, 20 Feb 2008 15:42:52 GMT]]></title><description><![CDATA[<p>Hm, ich würde mal sagen, da Du bei den Speedbuttons das Panel als Owner angibst, ist das Panel für der 'freeierung' zuständig. Setz testweise mal den Owner der Speedbuttons auf NULL (nil? self?), dann sollte das funktionieren. Respektive im Umkehrschluß brauchst Du die Speedbuttons nicht explizit freizugeben, das der Owner das implizit macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1459568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1459568</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 20 Feb 2008 15:42:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Komponente freigeben on Wed, 20 Feb 2008 15:45:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Du erstellst das Panel mit self als Owner und<br />
die Buttons mit dem Panel als Owner.<br />
D.h. für das Löschen des Panels ist Deine Komponente<br />
zuständig, was wohl automatisch gemacht wird.<br />
Für das Löschen der Buttons ist wiederum das Panel<br />
zuständig.</p>
<p>Du musst Dich also nur um das Löschen des Panels selber<br />
kümmern, die Buttons werden dann automatisch vom Panel<br />
gelöscht.</p>
<p>Die erste Version sollte meiner Meinung nach korrekt sein.</p>
<p>Gruß</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1459569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1459569</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Wed, 20 Feb 2008 15:45:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Komponente freigeben on Wed, 20 Feb 2008 16:12:59 GMT]]></title><description><![CDATA[<pre><code>FSpeedButton1 := TTeSpeedButton.Create(Self);
//Parent := FPanel;
</code></pre>
<p>Bringt leider den selben Fehler. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Es mag so sein das das Panel die SpeedButton ebenfalls löscht, aber man wird diese auf jedenfall auch seperat löschen dürfen, ansonsten könnte man ja keine Komponente mehr entfernen. und müsste immer das komplette Panel in diesem Falle löschen.</p>
<p>Achja was ich vergas, ab und an kann ich die Komponente entfernen ohne diese Fehlermeldung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1459594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1459594</guid><dc:creator><![CDATA[Junt]]></dc:creator><pubDate>Wed, 20 Feb 2008 16:12:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Komponente freigeben on Wed, 20 Feb 2008 16:35:31 GMT]]></title><description><![CDATA[<p>Junt schrieb:</p>
<blockquote>
<pre><code>FSpeedButton1 := TTeSpeedButton.Create(Self);
//Parent := FPanel;
</code></pre>
<p>Bringt leider den selben Fehler. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Jetzt hast Du Deine Komponente als Owner eingetragen.</p>
<p>Möglicherweise musst Du auch gar nichts selbst löschen, da Du<br />
inherited Destroy aufrufst. Ich vermute mal, Deine Komponente<br />
erbt von einer &quot;normalen&quot; Delphi-Komponente, also keine abstrakte<br />
Komponente. Dann sollte diese Komponente automatisch alle Komponenten<br />
löschen, für die sie als Owner eingetragen ist.</p>
<p>Junt schrieb:</p>
<blockquote>
<p>man wird diese auf jedenfall auch seperat löschen dürfen</p>
</blockquote>
<p>Nein. Normalerweise ist der Owner für das Löschen zuständig. Beim BCB kracht<br />
es da regelmäßig, wenn man dem Owner die Komponente, für deren Löschung er<br />
zuständig ist, unter dem Hintern weglöscht.</p>
<p>Entweder erstellst Du die Komponenten mit Owner nil oder löschst die Komponente<br />
mit RemoveComponent(). Kann sein, dass Du dann die Komponente über Free() frei-<br />
geben musst.</p>
<p>Gruß</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1459606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1459606</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Wed, 20 Feb 2008 16:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Komponente freigeben on Wed, 20 Feb 2008 17:23:29 GMT]]></title><description><![CDATA[<p>Ist ein TEdit, welches zusätzlich um eine Gauge und zwei SpeedButton auf einem Panel erweitert wurde.</p>
<pre><code>TMyEditEx = class(TEdit)
begin
...
public:
constructor Create(AOwner: TComponent); override;
...
end;

constructor TMyEditEx.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
...
end;
</code></pre>
<p>Wen dem so ist wäre ja fein, will kein Speicherleck haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1459634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1459634</guid><dc:creator><![CDATA[Junta]]></dc:creator><pubDate>Wed, 20 Feb 2008 17:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Komponente freigeben on Wed, 20 Feb 2008 17:41:50 GMT]]></title><description><![CDATA[<p>Junta schrieb:</p>
<blockquote>
<p>Ist ein TEdit, welches zusätzlich um eine Gauge und zwei SpeedButton auf einem Panel erweitert wurde.</p>
</blockquote>
<p>Da ist natürlich die Frage, ob ein TEdit überhaupt ein Parent von einem anderen Steuerelement sein kann.<br />
Syntaktisch vermutlich korrekt, aber sinnvoll? Normalerweise sollte ein Parent ein Container sein, z.B. TPanel, TScrollBox etc.<br />
Ich würde vielleicht ein Panel unter alles legen, d.h. die Komponente von TPanel ableiten.</p>
<p>Junta schrieb:</p>
<blockquote>
<p>Wen dem so ist wäre ja fein, will kein Speicherleck haben</p>
</blockquote>
<p>Wer will das schon?<br />
Folgende Vorschläge:</p>
<p>1. Breakpoint im Destruktor setzen und in die Destruktoren des Buttons/Panels reindebuggen.<br />
Falls Du nicht reindebuggen kannst, testweise eine weitere Komponente erstellen, in die<br />
Du dann reindebuggen kannst (nur um festzustellen, ob der Destruktor aufgerufen wird).</p>
<p>2. Eine kleine Testapplikation schreiben, die in einer Schleife viele Deiner Komponenten<br />
erstellt und wieder löscht. Dabei den Speicherbedarf kontrollieren.</p>
<p>3. Eine BCB-Applikation mit Deiner Komponente erstellen und CodeGuard anschmeißen.</p>
<p>Gruß</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1459647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1459647</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Wed, 20 Feb 2008 17:41:50 GMT</pubDate></item></channel></rss>