Hallo,
mühsamer Titel, komischer Effekt. Ich habe eine Klasse mit einer Prozedur, die mir alle Controls eines Parents durchgeht und abhängig vom Control-Typ den Inhalt ausliest. Ähnliche Prozeduren sind hier schon mehrfach aufgetaucht. Sinngemäß sieht das so aus:
Delphi-Quellcode:
{*******************************************************************}
procedure TUserInterfaceOps.ControlToStringList(parentcontrol : TWinControl;
var astringlist: TStringList; includename, includevalue : boolean);
{*******************************************************************}
var
i : integer;
str_temp : string;
begin
for i := 0 to parentcontrol.ControlCount-1 do
begin
try
str_temp := '';
if parentcontrol.Controls[i] is TAdvPanel then
ControlToStringList(TWinControl(parentcontrol.Controls[i]),astringlist,includename,includevalue);
if parentcontrol.Controls[i] is TAdvEdit then
begin
if includename then str_temp := parentcontrol.Controls[i].Name;
if includename and includevalue then str_temp := str_temp + ' = ';
if includevalue then str_temp := str_temp + (parentcontrol.Controls[i] as TAdvEdit).Text;
astringlist.Add(str_temp);
end;
if parentcontrol.Controls[i] is TCheckBox then
begin
if includename then str_temp := parentcontrol.Controls[i].Name;
if includename and includevalue then str_temp := str_temp + ' = ';
if includevalue then str_temp := str_temp + BoolToStr((parentcontrol.Controls[i] as TCheckBox).checked);
astringlist.Add(str_temp);
end;
except
astringlist.Add('Error reading ' + parentcontrol.Controls[i].Name);
end;
end;
end;
Der Prozedur übergebe ich das ganze Formular und krieg dann eine Stringlist nach dem Schema:
Edit1 = Edit1Text
Edit2 = Edit2Text
usw.
Das funktionierte bis dato problemlos, solange das Projekt eigenständig war. Wenn aber ich das aufrufende Objekt/Formular aber in ein anderes Projekt integriere, dann liefert mir die Prozedur eine Liste von Werten, die nicht in den Edits drin stehen, sondern die beim Create des Forms erzeugt wurden.
Wenn ich zB folgendes probiere:
Delphi-Quellcode:
if parentcontrol.Controls[i] is TAdvEdit then
begin
if includename then str_temp := parentcontrol.Controls[i].Name;
if includename and includevalue then str_temp := str_temp + ' = ';
(parentcontrol.Controls[i] as TAdvEdit).Text := 'irgendwas'; //<-----
if includevalue then str_temp := str_temp + (parentcontrol.Controls[i] as TAdvEdit).Text;
astringlist.Add(str_temp);
end;
dann wird zwar der wert "irgendwas" in die Stringliste geschrieben, nicht aber zurück aufs Form. Ich kann auch direkt vor dem Aufruf von ControlsToStringList noch etwas in die edits reinschreiben (im delphicode), in der StringList taucht dann dennoch der Wert auf, den ich beim Create des Forms zugewiesen habe.
danke für hinweise
tom