Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Weitere Probleme mit VST (https://www.delphipraxis.net/15280-weitere-probleme-mit-vst.html)

CalganX 25. Jan 2004 18:05


Weitere Probleme mit VST
 
Hi,
leider ist es schwierig innerhalb von wenigen Zeichen einen besseren Titel zu finden.
Mein Problem besteht darin, dass ich einige Nodes im VirtualStringTree nicht hinzufügen kann, da eine Funktion ab einer gewissen Konstante eine Endlosschleife bildet. Erklären kann ich mir das nicht. :(

Eine Gruppe/ein Projekt sieht als Grundgerüst so aus:

Code:
- Projektname
 |
 |- Sources
 |
 |- Bugs
 |
 |- ToDos
 |
 |- Entwickler
 |
 |- Veröffentlichungen
Jede dieser Texte (bis auf "Projektname") ist eine Konstante bspw. IDC_SOURCES.
Um von einer beliebig gewählten Node ausgehend eine Node bspw. unter "Sources" einzufügen habe ich folgenden Code:
Delphi-Quellcode:
procedure TfrmMain.mpSourceClick(Sender: TObject);
var
  pNode, pTemp: PVirtualNode;
  pData: PTVData;
begin
  if vstData.FocusedNode = nil then Exit;

  pTemp := GetProjectNode(vstData.FocusedNode);
  pNode := vstData.AddChild(GetListNode(pTemp, IDC_SOURCES));
  pData := vstData.GetNodeData(pNode);

  pData.dwMode := 3;
  pData.szURL := IDC_NONAME;

  self.SaveList;
  self.UpdateList;
  pcMode.ActivePage := tsStart;
end;
Die Funktionen GetProjectNode und GetListNode habe ich als Textdateien angehängt.

Die Konstanten sind in folgender Weise deklariert:
Delphi-Quellcode:
  // captions
  IDC_SOURCES      = 'Sources';
  IDC_BUGS         = 'Bugs';
  IDC_TODOS        = 'ToDos';
  IDC_CODERS       = 'Entwickler';
  IDC_PUBLICATIONS = 'Veröffentlichungen';
  IDC_NONAME       = 'unbenannt';
An sich funktioniert die Funktion wunderbar. Das Problem tritt erst auf, wenn ich IDC_TODOS verwenden will (statt IDC_SOURCES im obigen Beispiel). Ebenfalls bei IDC_CODERS und IDC_PUBLICATIONS tritt eine Endlosschleife auf.

Woran kann das liegen, dass erst ab einem gewissen Punkt ein solcher Fehler auftritt? :gruebel:

Chris

mirage228 25. Jan 2004 19:03

Re: Weitere Probleme mit VST
 
Prüfst du vielleicht irgendwo mit einer while oder repeat schleife nach IDC_SOURCES, aber hast in dem zu suchenden Node (oder Ähnlich) IDC_TODOS gesetzt ?

mfG
mirage228

CalganX 25. Jan 2004 20:09

Re: Weitere Probleme mit VST
 
Hi,
nein.

Chris

APP 26. Jan 2004 05:37

Re: Weitere Probleme mit VST
 
Hallo Chris,
Zitat:

Zitat von Chakotay1308
Die Funktionen GetProjectNode und GetListNode habe ich als Textdateien angehängt.

die beiden Funktionen fehlen leider.

CalganX 7. Feb 2004 18:16

Re: Weitere Probleme mit VST
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
sorry... ich wollte gerade nochmal fragen, wer denn vielleicht doch eine Idee hat, aber wenn die Funktionen nicht dabei sind, wird das wohl nichts. ;)
Darum sind sie jetzt nochmal dabei.

Wenn sich jemand das nochmal ansehen könnte... Im Moment komm ich da nicht weiter und wenn das nicht geht, dann wird das Programm nie fertig. ;)

Chris

Shivan 9. Feb 2004 21:59

Re: Weitere Probleme mit VST
 
Des weiteren fehlt noch deine Datenstrukturbeschreibung.... (PTVData)

Wie hast du die sz-Variablen definiert? String? WideString?
Weil ggf. müsstest du deine zuzuweisende Konstante konvertieren/casten?

Hast du schon rausgefunden in welcher Zeile er sich denn genau aufhängt? (Im GetListNode ..)
Und bekommst du dort überhaupt dann eine gültige Node zurück?
Ich nehme stark an, dass er sich in der Schleife unten

Delphi-Quellcode:
  While (TmpNode<>Nil) and (Result=Nil) do
    begin
     Result:=GetListNode(TmpNode,NodeText);
     TmpNode:=Node.NextSibling;
    end;
aufhängt, da du die funktion immer wieder selbst aufrufst?
Was ist wenn er die node nie findet? :)

CalganX 10. Feb 2004 18:19

Re: Weitere Probleme mit VST
 
Hi,
Zitat:

Zitat von Shivan
Des weiteren fehlt noch deine Datenstrukturbeschreibung.... (PTVData)

okay:
Delphi-Quellcode:
type
  TTVData = packed record
    dwMode: DWORD;
    szCaption: WideString;
    {... Hier kommen einige weitere WideString-Deklarationen ...}
    bDone: Boolean; end;
  PTVData = ^TTVData;
Zitat:

Zitat von Shivan
Weil ggf. müsstest du deine zuzuweisende Konstante konvertieren/casten?

In diesem Fall würde er aber niemals weiterkommen, aber er schafft ja bspw. IDC_SOURCES. ;)

Zitat:

Zitat von Shivan
Hast du schon rausgefunden in welcher Zeile er sich denn genau aufhängt? (Im GetListNode ..)

Das ist ja das Problem: es lässt sich einfach nicht herausfinden. :|

Zitat:

Zitat von Shivan
Und bekommst du dort überhaupt dann eine gültige Node zurück?
Ich nehme stark an, dass er sich in der Schleife unten

Delphi-Quellcode:
  While (TmpNode<>Nil) and (Result=Nil) do
    begin
     Result:=GetListNode(TmpNode,NodeText);
     TmpNode:=Node.NextSibling;
    end;
aufhängt, da du die funktion immer wieder selbst aufrufst?
Was ist wenn er die node nie findet? :)

In diesem Fall würde er aber sofort aus der Schleife springen, weil dann Node.NextSibling auch nil wäre und somit würde die Schleife beenden. Außerdem: wieso sollte er die Node nicht finden? Sie exisitert und hat einen konstanten Namen. :gruebel:

Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr.

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