Hallo,
da ich erst seit kurzem D7 habe komme ich erst jetzt dazu den TValueListEditor zu verwenden.
Leider komme ich damit nicht klar.
Wenn ich die
OH richtig verstanden habe, kann ich über die Strings property neue Zeilen hinzufügen,
wenn der String wie folgt aufgebaut ist
Mit folgender Methode möchte ich Zeilen zum TValueListEditor hinzufügen
Item.GetValues(ValueListEditor1.Strings);
Hier die Methodensource
Delphi-Quellcode:
procedure TArrayItems.GetValues(L: TStrings);
var
iCnt : Integer;
begin
L.Clear;
For iCnt:=0 to Count-1 do
L.Add(ArrayItems[iCnt].Name+'='+ArrayItems[iCnt].AsString);
end;
Hier meine Testschritte
1. Wenn der TValueListEditor keine Zeile enthält kommt es zu einer Schutzverletzung.
2. Wenn ich im
OI eine Zeile hinzufüge kommt eine Schutzverletzung
3. Wenn ich im
OI eine Zeile hinzufüge und in der Methode L.Clear auskommentiere kommt keine Schutzverletzung.
Jetzt bin zu dem Schluss gekommen, dass der TValueListEditor min eine Zeile enthalten muss.
Das kann doch nicht sein ?
Frage: Wie füge ich zur Laufzeit Zeilen hinzu ?
Folgender Source ist aus den
VCL-Sourcen.
Wenn ich die Zeilen hinter denen der Kommentar hinzugefügt steht einfüge, verhält sich
der TValueListEditor wie erwartet.
Delphi-Quellcode:
function TValueListStrings.FindItemProp(
const KeyOrIndex: Variant;
Create: Boolean = False): TItemProp;
var
Index: Integer;
begin
Try // hinzugefügt
if Count > 0
then
begin
if VarIsOrdinal(KeyOrIndex)
then
Index := KeyOrIndex
else
begin
Index := IndexOfName(KeyOrIndex);
if Create
and (
Index = -1)
then
raise Exception.CreateResFmt(@SKeyNotFound, [KeyOrIndex]);
end;
Result := FItemProps[
Index];
if Create
and not Assigned(Result)
then
begin
Result := TItemProp.Create(FEditor);
FItemProps[
Index] := Result;
end;
end
else
Result :=
nil;
Except // hinzugefügt
Result:=Nil;
// hinzugefügt
end;
// hinzugefügt
end
Sehr sonderbar ?!?