Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - rowmoving Listenindex>maximum
fuggaz - Fr 23.07.10 03:16
Titel: rowmoving Listenindex>maximum
Hey,
ich habe Probleme mit dem ValueListEditor.
1. Neue Formularanwendung
2. ValueListEditor, mit goRowMoving, FixedCols:=1
3. zwei edit-Felder, 1 Button
4. Buttoninhalt:
Delphi-Quelltext
1:
| valuelisteditor1.InsertRow(edit1.Text,edit2.Text,true); |
5. Ausführen und ein paar Reihen einfügen
6. letztes Element auf einen anderen Platz verschieben
Ergebnis: Im Projekt X ist eine Exception der Klasse EStringListError mit der Meldung 'Listenindex überschreitet das Maximum (6)' aufgetreten.
Woran kann das liegen?
mfg fuggaz
elundril - Fr 23.07.10 04:36
fuggaz hat folgendes geschrieben : |
6. letztes Element auf einen anderen Platz verschieben
Ergebnis: Im Projekt X ist eine Exception der Klasse EStringListError mit der Meldung 'Listenindex überschreitet das Maximum (6)' aufgetreten.
|
Sicher das du nur auf vorhandene Elemente zugreifst? Vielleicht ist das letze nicht das wirklich letzte sondern das letzte+1. ;) Die Indizes gehen meistens von 0 bis n-1, wobei n die Anzahl der Elemente ist.
lg elundril
fuggaz - Fr 23.07.10 15:54
Die Sache ist ja die, ich lasse Delphi alles selbst regeln - außer dem Hinzufügen der Werte, welches ich über .insertrow erledige.
Also "valuelisteditor1.InsertRow(edit1.Text,edit2.Text,true);" ist die einzige Zeile Quelltext, die ich selbst hinzugefügt habe.
Muck - Fr 23.07.10 16:10
Hallo,
getestet unter Delphi 2009.
Bekomme die gleiche Fehlermeldung sobald ich den letzten Eintrag nach oben verschiebe.
Exception wurde von TValueListEditor.RowMoved getriggert.
Markus
Okay,
nach debuggen des Assembler Codes RowMoved tippe ich auf einen Delphi Fehler.
Die Parameteruebergaben sind okay, der Fehler tritt auch auf wenn z.B. 3 Zeilen im String Editor hinzugefuegt werden statt zur Laufzeit.
Verschieben von 2 nach 1 bei 3 Zeilen Total funktioniert (Reihe 0 ist die Ueberschrift). Parameter ist in ECX und EDX mit 2 und 1.
Verschieben von 3 nach 2 bei gleicher Parameteruebergabe funktioniert nicht und wird mit Exception quittiert.
Markus
Und noch ein Nachtrag:
Verschieben funktioniert wenn man die Ueberschriften mti DisplayOptions.doColumnTitles auf false setzt.
fuggaz - Fr 23.07.10 18:10
Ahh, sehr schön [also nicht der Bug ;-)].
Überschrift brauche ich nicht, also löst dies mein Problem.
Vielen Dank!!
mfg fuggaz
jaenicke - Sa 24.07.10 08:16
Quick'n'Dirty-Fix (getestet mit D2006-D2010):
ValEditFix.pas
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| unit ValEditFix;
interface
uses ValEdit;
type TValueListEditor = class(ValEdit.TValueListEditor) protected procedure RowMoved(FromIndex, ToIndex: Longint); override; end;
implementation
procedure TValueListEditor.RowMoved(FromIndex, ToIndex: Integer); begin if doColumnTitles in DisplayOptions then begin Dec(FromIndex, FixedRows); Dec(ToIndex, FixedRows); end; inherited RowMoved(FromIndex, ToIndex); end;
end. |
Diese Unit
nach ValEdit in die uses deiner Formulare schreiben, schon klappt alles. Leider haben die Entwickler vergessen beim Moven ggf. die Titelzeilen abzuziehen. Das wird hiermit korrigiert. Delphi benutzt immer die letzte Deklaration einer Klasse, die es findet. Deshalb findet es zuletzt die gleichnamige Deklaration in ValEditFix und nutzt die statt ValEdit.TValueListEditor.
Besser ist natürlich eine neue Komponente daraus zu machen und diese zu benutzen.
Muck hat folgendes geschrieben : |
| nach debuggen des Assembler Codes RowMoved tippe ich auf einen Delphi Fehler. |
Ich habe lieber den Delphi-Quelltext kurz angeschaut, das ist dann doch etwas einfacher. ;-)
Assembler hebe ich mir für die schwierigeren Probleme auf. :mrgreen:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!