Autor Beitrag
fuggaz
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: Fr 23.07.10 03:16 
Hey,

ich habe Probleme mit dem ValueListEditor.
1. Neue Formularanwendung
2. ValueListEditor, mit goRowMoving, FixedCols:=1
3. zwei edit-Felder, 1 Button
4. Buttoninhalt:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Fr 23.07.10 04:36 
user profile iconfuggaz hat folgendes geschrieben Zum zitierten Posting springen:

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

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
fuggaz Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 98
Erhaltene Danke: 8

Win 8, Win 7, Vista, Win XP
Delphi XE3, Delphi 2009, Delphi 2007, Delphi 5
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 106



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1748

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 24.07.10 08:16 
Quick'n'Dirty-Fix (getestet mit D2006-D2010):
ausblenden 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;
// Fixes problem when moving last row.
// Has to be after ValEdit in your uses.

interface

uses
  ValEdit;

type
  TValueListEditor = class(ValEdit.TValueListEditor)
  protected
    procedure RowMoved(FromIndex, ToIndex: Longint); override;
  end;

implementation

{ TValueListEditor }

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.

user profile iconMuck hat folgendes geschrieben Zum zitierten Posting springen:
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: