Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Probleme mit VirtualStringTree und Nodes zu Entwurfszeit


Erichgue - Fr 30.03.12 16:41
Titel: Probleme mit VirtualStringTree und Nodes zu Entwurfszeit
Hallo,
ich habe mir eine Klasse von TVirtualStringTree abgeleitet und kann im zur Entwurfzeit Knoten (Nodes) hinzufügen.
Aber sobald der Tree zur Entwurfszeit Knoten hat spielt meine IDE verückt.
Da kommen beim neukompilieren des Packages, oder mal einfach so,
nach dem das Formular mit der Komponente geschlossen wurde Zugriffsverletzungen und Fehlermeldungen.

Irgendwie scheint es nach dem Zerstören der Komponente mit dem Speichermanager zusammen zu hängen.
(borlndmm.SysFreeMem)

Hat hier jemand Erfahrung damit?

Oder wie geht man vor, wenn man dem VirtualTree Nodes zur Entwurfszeit einfügen will?

Edit: Zur Laufzeit gibt es keine Probleme

Gruß

Erich


dummzeuch - Fr 30.03.12 17:40

Hi,

user profile iconErichgue hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,
ich habe mir eine Klasse von TVirtualStringTree abgeleitet und kann im zur Entwurfzeit Knoten (Nodes) hinzufügen.
Aber sobald der Tree zur Entwurfszeit Knoten hat spielt meine IDE verückt.
Da kommen beim neukompilieren des Packages, oder mal einfach so,
nach dem das Formular mit der Komponente geschlossen wurde Zugriffsverletzungen und Fehlermeldungen.

Irgendwie scheint es nach dem Zerstören der Komponente mit dem Speichermanager zusammen zu hängen.
(borlndmm.SysFreeMem)

Hat hier jemand Erfahrung damit?


Mit von TVirtualStringTree abgeleiteten Komponenten nicht, aber generell mit Komponentenentwicklung: Ich trage dann immer die IDE unter Run/Parameters als Host-Application ein und debugge. Vielleicht hilft Dir das ja schon?

twm


jaenicke - Sa 31.03.12 01:33

Irgendwo musst du ja die Knoten speichern. Ich vermute, dass du dabei irgendwo noch auf schon freigegebene Speicherbereiche zugreifst.

Da bleibt im Grunde nur ganz genau zu schauen wann was freigegebein wird. Am besten vielleicht in einem Test mit wenigen Knoten oder so. Und natürlich mit entsprechendem Logging.

Das kommt halt davon, wenn man unbedingt mit Gewalt Datenhaltung und GUI vermischen muss... Selbst mit einer Komponente, die die Trennung so einfach macht... :autsch:


Erichgue - Mo 02.04.12 08:55

user profile icondummzeuch hat folgendes geschrieben Zum zitierten Posting springen:
Hi,

user profile iconErichgue hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,
ich habe mir eine Klasse von TVirtualStringTree abgeleitet und kann im zur Entwurfzeit Knoten (Nodes) hinzufügen.
Aber sobald der Tree zur Entwurfszeit Knoten hat spielt meine IDE verückt.
Da kommen beim neukompilieren des Packages, oder mal einfach so,
nach dem das Formular mit der Komponente geschlossen wurde Zugriffsverletzungen und Fehlermeldungen.

Irgendwie scheint es nach dem Zerstören der Komponente mit dem Speichermanager zusammen zu hängen.
(borlndmm.SysFreeMem)

Hat hier jemand Erfahrung damit?


Mit von TVirtualStringTree abgeleiteten Komponenten nicht, aber generell mit Komponentenentwicklung: Ich trage dann immer die IDE unter Run/Parameters als Host-Application ein und debugge. Vielleicht hilft Dir das ja schon?

twm


Das ist ein guter Hinweis und hört sich interessant an.
Ich habe damit noch nie gearbeitet, wie genau muss ich da vor gehen?
Die bds.exe steh in den Parameter als Host-Application.
Weiter weiß ich nicht.

Gruß

Erich


Erichgue - Mo 02.04.12 09:00

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Irgendwo musst du ja die Knoten speichern. Ich vermute, dass du dabei irgendwo noch auf schon freigegebene Speicherbereiche zugreifst.

Da bleibt im Grunde nur ganz genau zu schauen wann was freigegebein wird. Am besten vielleicht in einem Test mit wenigen Knoten oder so. Und natürlich mit entsprechendem Logging.

Das kommt halt davon, wenn man unbedingt mit Gewalt Datenhaltung und GUI vermischen muss... Selbst mit einer Komponente, die die Trennung so einfach macht... :autsch:


Die Knoten stehen in der DFM-Datei.
Das mit dem Speicherfreigeben habe ich schon durchgetestet - an dem liegt es nicht.
Zur Laufzeit geht ohne Probleme.

Meine Vermutung ist die, das der VirtualTree im Entwurfsmodus nicht mitbekommt, das der Tree oder die Nodes zerstört wurden (Messages),
und versucht über eine Thread (TWorkerThread) oder so noch weiter auf die Knoten zuzugreifen.

Gruß

Erich