AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ab und an AV bei VirtualStringTree

Ein Thema von Hobbycoder · begonnen am 1. Nov 2017 · letzter Beitrag vom 1. Nov 2017
 
Hobbycoder

Registriert seit: 22. Feb 2017
998 Beiträge
 
#1

Ab und an AV bei VirtualStringTree

  Alt 1. Nov 2017, 17:51
Ich habe eine ObjectList die als Datenquelle für das VST dient.

Zu Aufbauen der VST dient folgen Procedure:
Delphi-Quellcode:
procedure TfrmMainServer.BuildList;
var
  i: Integer;
  Node: PVirtualNode;
begin
  vrtlstrngtrAnrufliste.BeginUpdate;
  try
    vrtlstrngtrAnrufliste.Clear;
    for i:=AnrufList.Count-1 downto 0 do
      Node:=vrtlstrngtrAnrufliste.AddChild(nil, AnrufList[i]);
  finally
    vrtlstrngtrAnrufliste.EndUpdate;
  end;
end;
Zur Anzeige dann:
Delphi-Quellcode:
procedure TfrmMainServer.vrtlstrngtrAnruflisteGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: string);
var
  Anruf: TAnruf;
begin
  if node<>nil then
  begin
    Anruf:=TAnruf(vrtlstrngtrAnrufliste.GetNodeData(Node)^);
    case Column of
      0: CellText:=FormatDateTime('dd.mm.yy hh:nn:ss',Anruf.Zeit);
      1: if Anruf.name<>'then
           CellText:=Anruf.RN + ' ('+Anruf.name+')else
           CellText:=Anruf.RN;
      2: CellText:=Anruf.MSN;
      3: case Anruf.Service of
           csALL: CellText:='Alle';
           csTELEPHONY: CellText:='Telefonie';
           csANALOG_TELEPHONY: CellText:='Analogtelefonie';
           csDIGITAL_TELEPHONY: CellText:='Digitaltelefonie';
           csFAX3: CellText:='Fax G3';
           csFAX4: CellText:='Fax G4';
           csDATA_64K: CellText:='Daten 64k';
           csDATA_56K: CellText:='Daten 56k';
           csPACKET_MODE: CellText:='Packetmode';
           csUNKNOWN: CellText:='Unbekannt';
         end;
      4: Case Anruf.AMStatus of
           lsUnbekannt: CellText:='Unbekannte MSN';
           lsProtokolliert: CellText:='Nur Aufzeichnen';
           lsGesendet: CellText:='An Client senden';
         End;
    end;
  end;
end;
Mittels DblClick soll dann eine Eigenschaft des hinter dem Node stehenden Objects bearbeitet werden:
Delphi-Quellcode:
procedure TfrmMainServer.vrtlstrngtrAnruflisteNodeDblClick(
  Sender: TBaseVirtualTree; const HitInfo: THitInfo);
var
  anruf: TAnruf;
  oldname, newname: string;
  name: TName;
begin
  vrtlstrngtrAnrufliste.BeginUpdate;
  try
    anruf:=TAnruf(vrtlstrngtrAnrufliste.GetNodeData(HitInfo.HitNode)^);
    if anruf.name<>'then
      oldname:=anruf.name else
      if NameList.IndexOfRN(anruf.RN)>-1 then
        oldname:=NameList[NameList.IndexOfRN(anruf.RN)].name else
        oldname:='';
    newname:=InputBox('Namenzuordnung','Geben sie einen Namen zu der Rufnummer an:', oldname);
    if newname<>oldname then
    begin
      if newname='then
      begin
        if NameList.IndexOfRN(anruf.RN)>-1 then
          NameList.Delete(NameList.IndexOfRN(anruf.RN));
      end else begin
        if NameList.IndexOfRN(anruf.RN)>-1 then
        begin
          Name:=NameList[NameList.IndexOfRN(anruf.RN)];
        end else begin
          Name:=TName.Create;
          NameList.Add(name);
          name.rn:=anruf.RN;
        end;
        name.name:=newname;
      end;
      NameList.SaveToFile;
      AnrufList.ReplaceName(anruf.RN, newname);
      AnrufList.SaveToFile;
      BuildList;
    end;
  finally
    vrtlstrngtrAnrufliste.EndUpdate;
  end;
end;
Soweit alles schick. Ich kann auch mehrere Male TAnruf.name verändern.

Aber nach ein paar Veränderungen (unregelmäßig viele) tritt immer eine AV in der VST-Procedure GetPreviousVisibleNoInit aus der Unit VirtualTrees auf. Und über den Stack kann ich leider keine Rückschlüsse ziehen, auf Grund welches Ereignisses er in diese Procedure springt.

Hat jemand eine Tipp für mich, wie ich dem Fehler auf die Spur kommen könnte?
Den Aufruf-Stack habe ich mal als Image angehängt.
Angehängte Grafiken
Dateityp: png Stack_AV.png (217,7 KB, 13x aufgerufen)
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 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 by Thomas Breitkreuz