Einzelnen Beitrag anzeigen

Benutzerbild von Wormid
Wormid

Registriert seit: 26. Aug 2003
Ort: Steinfurt
292 Beiträge
 
Delphi XE2 Professional
 
#1

Adressen von ListItems ändern sich

  Alt 4. Dez 2014, 14:31
Delphi-Version: XE6
Hallo liebe DPler,

vielleicht hat jemand von Euch eine Idee zu folgendem Problem:

Ein Kollege hat in vielen seiner Programme Konstrukte drin, das Objekte an ListItems "hängen" und das im Gegenzug das Objekt das ListItem kennt.
Wird das ListView aktualisiert, kennt es das Objekt und holt sich von dort die Daten zum Visualisieren... Ändert sich am Zustand des Objektes etwas,
kann das Objekt direkt das ListItem aktualisieren, da es das ja kennt. (Saubere Trennung sieht anders aus, ich weiß - die Programme sind halt schon ein paar Jahre alt...)

Die ListViews sind was die Anzahl und Reihenfolge der Items angeht in der Regel bis auf den Programmstart eher statisch - also keine Sortierfunktionen, etc.

Zur "Illustration"...

Delphi-Quellcode:
type
   TMyObject = class(TObject)
   private
      fListItem: TListItem;
    procedure SomeProc;
   public
      constructor Create(AListItem: TListItem);
      property ListItem: TListItem read fListItem;
   end;
   
implementation

constructor TMyObject.Create(AListItem: TListItem);
begin
   fListItem := AListItem;
   ...
end;

procedure TMyObject.SomeProc;
begin
  ...
  fListItem.SubItems[3] := 'FooBar';
  ...
end;

procedure TSomeControllerObject.FooBar;
var
   li: TListItem;
begin
   li := lvSomeListView.Items.Add;
   li.Data := TMyObject.Create(li);
   ...
end;
Vielleicht nicht sehr schön... Allerdings hat das jahrelang einwandfrei funktioniert, solange die Programme mit Delphi 2006 kompiliert waren...

Nun das eigentliche Problem:

Er hat umgestellt auf XE6 und seitdem passiert es aus bisher nicht nachvollziehbaren Gründen, das unter der Adresse, auf die fListItem
zeigt, entweder nichts mehr (dann knallt es), oder ein anderes ListItem (dann wird die falsche Zeile aktualisiert) zu finden ist.

Wir sind nun schon ein bisschen länger auf der Suche nach der Ursache und haben nun festgestellt, dass sich im Laufe der Zeit (bisher
kein Muster erkennbar), die tatsächliche Adresse des ListItems ändert - aber nicht in seinen Objekten, sondern im ListView!

Ist das Normal? Vorher konnten die Programme Wochenlang durchlaufen, ohne das solche Probleme auftraten - war das nur Zufall?

Der Fehler ist auf dem Entwicklungsrechner vom Kollegen bisher leider nicht nachvollziehbar, wie immer passiert so etwas natürlich nur
sporadisch beim Kunden, was es umso schwieriger macht, das Problem zu lokalisieren.

Hat irgendjemand eine Idee? Wir sind mit unserem Pascal am Ende?

Gruß

Wormid
Debuggers don't remove Bugs, they only show them in Slow-Motion.
  Mit Zitat antworten Zitat