Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Nach aufklappen kein focusieren Möglich (https://www.delphipraxis.net/142557-nach-aufklappen-kein-focusieren-moeglich.html)

Mondengel 30. Okt 2009 09:08


Nach aufklappen kein focusieren Möglich
 
Hi Leute,
Ich hab da ein Problem und zwar kommt immer eine Fehlermeldung, wenn ich nach dem Aufklapen des Baums den zuletz aufgenommenen Item focusieren will.
Ich hab schonmal soviel rausgefunden, das nach dem aufklappen der Pointer verschwindet.
Das seltsamme ist nuur das es manchmal vorkommt. Wenn ich langsam debuge entsteht der Fehler nicht.
Delphi-Quellcode:
Var
  newNode : TdxTreelistNode;
begin
  ...
  newNode.Parent.Expand(True);   // Hier entsteht der Fehler
                                  // newNode.Data = nil / newNode.Index = -1
  if (newNode <> nil) Then
    newNode.Focused := True;
  ...
end;
Ich hab keine Ahnung was ich dagegen machen soll :cry:

Mondengel 30. Okt 2009 11:55

Re: Nach aufklappen kein focusieren Möglich
 
Hat den niemand einen kleinen Tipp? :?:

stho 30. Okt 2009 11:59

Re: Nach aufklappen kein focusieren Möglich
 
hast du den node denn schon irgendwo angehängt? nun, mit der komponente die du nutzt kenn ich mich net so gut aus ^^ nimm doch den VST.
Der ist Freeware und auch für einiges zu haben :-) Außerdem findest du für den schon ne ganze menge hier im Forum.

EDIT:
Wie heißt denn dein Fehler der da kommt?
Bist du dir sicher das es dieses Objekt eigentlich gibt?! Wie heißt denn die Komponente die du benutzt GENAU?

Mondengel 30. Okt 2009 12:13

Re: Nach aufklappen kein focusieren Möglich
 
Also ich verwende dir Komponente dxTreeList

Und bei Fehlermeldung kommt "Zugriffsverletzung bei der Adresse 03007E28. Schreiben von Adresse 7326D0EA"

DeddyH 30. Okt 2009 12:17

Re: Nach aufklappen kein focusieren Möglich
 
Hast Du denn vorher überprüft, on newNode.Parent <> nil ist?

Mondengel 30. Okt 2009 12:24

Re: Nach aufklappen kein focusieren Möglich
 
Hab's mal eingebaut. Trotzdem kommt der Fehler :wall:

Delphi-Quellcode:
Var
  newNode : TdxTreelistNode;
begin
  ...
  newNode.Parent.Expand(True);   // Hier entsteht der Fehler
                                  // newNode.Data = nil / newNode.Index = -1
  if (newNode <> nil) and (newNode.Parent <> nil) Then
    newNode.Focused := True;
  ...
end;

Muetze1 30. Okt 2009 12:27

Re: Nach aufklappen kein focusieren Möglich
 
Und wo holst du newNode her? Wo wird die Instanz geholt bzw. angelegt? Wird die noch woanders freigegeben?

DeddyH 30. Okt 2009 12:42

Re: Nach aufklappen kein focusieren Möglich
 
Zitat:

Delphi-Quellcode:
newNode.Parent.Expand(True);

Du musst natürlich vor dieser Zeile bereits prüfen, ob newNode und newNode.Parent nicht nil sind.

stahli 30. Okt 2009 12:53

Re: Nach aufklappen kein focusieren Möglich
 
Zitat:

Das seltsamme ist nuur das es manchmal vorkommt. Wenn ich langsam debuge entsteht der Fehler nicht.
Zu Deiner Komponente kann ich nichts sagen, nur eine grundsätzliche Überlegung.
Wenn Du einen Breakpoint setzt und schrittweise debugst, wird sich Dein Formular teilw. neu zeichnen.
Evtl. macht das den Unterschied.

Vielleicht kannst Du Deine Komponente veranlassen, sich zwischendurch ausdrücklich neu zu zeichnen oder zumindest einmal ein ProcessMessages versuchen...

Stahli

Mondengel 30. Okt 2009 13:05

Re: Nach aufklappen kein focusieren Möglich
 
Also ich hab jetzt soviel rausgefunden, das nach dem öffnen des Baums die Items neu geladen werden.
Dadurch passierts, dass sich die Speicheradressen ändern, weil doppelte rausfliegen und sich der Baum sortiert.

Delphi-Quellcode:
Procedure AddNewObjekt(NewObjektname : String);
Var
  NewNode : TdxTreelistNode;
begin
   NewNode := AddMissingObjects (NewObjektname);
   newNode.Parent.Collapse(True);
   newNode.Parent.Expand(True);   // Hier entsteht der Fehler
                                   // newNode.Data = nil / newNode.Index = -1 
   If (NewNode <> Nil) Then
   Begin
     newNode.Focused := True;
   End;
End;
Parent ist aufjedenfall da, weil in AddMissingObject ein Parent angelegt wird, falls keiner da ist.

@stahli
Zitat:

Zu Deiner Komponente kann ich nichts sagen, nur eine grundsätzliche Überlegung.
Wenn Du einen Breakpoint setzt und schrittweise debugst, wird sich Dein Formular teilw. neu zeichnen.
Evtl. macht das den Unterschied.
könnt nartürlich ein Grund sein


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:32 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