Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Die IDE-Killer-Komponente (https://www.delphipraxis.net/47448-die-ide-killer-komponente.html)

Dani 11. Jun 2005 11:14


Die IDE-Killer-Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Servus,

Wer kann mir helfen meine IDE-Killer-Komponente zu testen? Benötigt wird nur die Hier im Forum suchendpCollection Unit. Und so geht's: Komponente aus Anhang installieren, TKillerEdit auf Formular platzieren, Areas Eigenschaft auswählen und Eintrag hinzufügen. Die Oberfläche sollte dann einfrieren und irgendwann meldet Delphi einen Stack-Overflow. Würde gerne wissen ob nur meine IDE einfriert oder ob da tatsächlich etwas mit der Komponente nicht in Ordnung ist.

Gruß,
Dani

SirThornberry 11. Jun 2005 11:24

Re: Die IDE-Killer-Komponente
 
warum erstellst du die Komponente nicht einfach dynamich und debuggst dann warum ein StackOverflow kommt? Ich tippe mal du versuchst in einer SetMethode das Property erneut zu setzen womit du wieder in diese SetMethode reinkommst, ist aber nur eine Vermutung (ist ein sehr häufiger Fehler).

Keldorn 11. Jun 2005 11:47

Re: Die IDE-Killer-Komponente
 
würd ich auch so sehen. Ich würd den Fehler hier vermuten:

Delphi-Quellcode:
procedure TDrawAreas.SetDrawItem(Index: Integer; Value: TDrawArea);
begin
  Items[Index].Assign(Value);
end;
damit rufst du immer wieder die Setmethode auf. da fehlt das inherited, wie bei der getmethode.

Mfg Frank

Dani 11. Jun 2005 12:27

Re: Die IDE-Killer-Komponente
 
Zitat:

Zitat von Keldorn
würd ich auch so sehen. Ich würd den Fehler hier vermuten:

Delphi-Quellcode:
procedure TDrawAreas.SetDrawItem(Index: Integer; Value: TDrawArea);
begin
  Items[Index].Assign(Value);
end;

damit rufst du immer wieder die Setmethode auf. da fehlt das inherited, wie bei der getmethode.

Mfg Frank

Edit:Da hab ich mich zu früh gefreut, daran liegts wohl nicht. In Assign werden zwar properties des Items gesetzt, aber das dürfte eigentlich nicht dazu führen, dass SetDrawItem nochmal aufgerufen wird. Mal schauen ob der Overflow auch zur laufzeit kommt.

Edit#2: Zur Laufzeit gibts keinen Buffer Overlfow und auch keinen Hänger.
Delphi-Quellcode:
var C: TKillerEdit;
    A: TDrawArea;
begin
 C := TKillerEdit.Create(Self);
 C.Parent := Self;
 A := C.Areas.Add;
 A.Comment := 'Dies ist ein Test';
 C.Area[0].DrawRect := Rect(0, 0, 2399, 2939);

Dani 12. Jun 2005 17:59

Re: Die IDE-Killer-Komponente
 
Wenn mir jemand bestätigen könnte, dass sich nicht nur meine IDE aufhängt, das wär schon sehr hilfreich :mrgreen:

Sergej 12. Jun 2005 18:08

Re: Die IDE-Killer-Komponente
 
Tag. Kanns bestätigen. Hängt auch bei mir.



Greetz Sergej

Jens Schumann 12. Jun 2005 18:55

Re: Die IDE-Killer-Komponente
 
Hallo,
ich würde TmxJsCollection durch TCollection ersetzen. Die dpCollection unit wurde entwickelt, damit man die TCollection-Fähgikeiten auch außerhalb von Komponenten zur Verfügung hat. Die dpCollection unit wurde nicht entwickelt um sie innerhalb von Komponenten einzusetzten.

Dani 12. Jun 2005 20:51

Re: Die IDE-Killer-Komponente
 
Zitat:

Hallo,
ich würde TmxJsCollection durch TCollection ersetzen. Die dpCollection unit wurde entwickelt, damit man die TCollection-Fähgikeiten auch außerhalb von Komponenten zur Verfügung hat. Die dpCollection unit wurde nicht entwickelt um sie innerhalb von Komponenten einzusetzten.
:gruebel: Das hat aber bisher ganz gut funktioniert. Warum auch nicht? TCollection unterstützt von sich aus kein speichern der Items in Streams, das ist aber letztendlich der Zweck dieser DrawAreas.

Dani 13. Jun 2005 10:33

Re: Die IDE-Killer-Komponente
 
Der Hänger bleibt trotz Umstellung auf TCollection. Vielleicht in Bug in der IDE?

Dani 19. Jun 2005 23:28

Re: Die IDE-Killer-Komponente
 
Delphi-Quellcode:
   
 {...}
 published
   property OwnerObj: TPersistent read FOwnerObj write FOwnerObj;
 end;
Da OwnerObj die zugehörige TCollection ist, habe ich hier eine ganz vorzügliche ressourcenterminierte Quasi-Endlosrekursion entworfen. Fiel mir auf, als ich bei einem Nachbau der Klasse zu faul war, im Constructor die Werte zu initialisieren und plötzlich OwnerObj im Objektinspektor sichtbar wurde.

Hab nur 9 Tage gebraucht, das rauszufinden. :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

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