Hmm, möglich ist es immer noch, aber es büßt einiges von seiner Eleganz ein
Delphi-Quellcode:
function GetValue(AControl: TControl): string;
begin
// So und jetzt wird es hässlich:
// Jeweils für das spezifische Control den richtigen Text raussuchen:
Result := '';
if (AControl is TEdit) then begin
Result := (AControl as TEdit).Text;
exit;
end;
if (AControl is TMemo) then begin
Result := (AControl as TMemo).Text;
exit;
end;
if (AControl is TCombobox) then
if (AControl as TCombobox).ItemIndex <> -1 then begin
Result := (AControl as TCombobox).Items[(AControl as TCombobox).ItemIndex];
exit;
end;
end;
const Prefixes: array[0..???] of string = ('Name', 'Vorname', 'Straße', ...);
var i,j:integer;
begin
j := 0;
for i := 0 to (Groupbox1.ControlCount - 1) do // Controls in Groupbox1 durchlaufen
with Groupbox1 do
if (Controls[i] is TEdit) or
(Controls[i] is TMemo) or
(Controls[i] is TCombobox) then begin // Jetzt auf drei Sachen testen
AddBBCode(Prefixes[j], GetValue(Controls[i])); // Die Funktion von oben aufrufen um den jeweils richtigen String zu erhalten
inc(j); // Und nächstes mal den nächsten Prefix-String nehmen
end;
end;
Zitat:
nicht unbedingt alle edit felder in einer groupbox nacheinander kommen
Ich verstehe leider nicht ganz, wie du das meinst. Aber falls es sich auf die Zuordnung mittels des j bezieht, könntest du in der Tag-property des jeweiligen Controls die passende Index-Position im Prefix-Array speichern, also z.B. Edit1 ist für den Namen und hat Edit1.Tag = 0, Edit2 ist für den Vornamen und hat Tag = 1, Combobox1 ist für die Straße und hat Tag = 2 etc.
Dann sähe die entsprechende Zeile so aus:
AddBBCode(Prefixes[Controls[i].Tag], GetValue(Controls[i])); // Wenn ja, mit der Prozedur von jim_raynor hinzufügen
Um direkt abzuspeichern welche Komponenten überhaupt überprüft werden fällt mir jetzt nichts elegantes ein. Normalerweise packe ich solche Dinge immer in ein konstantes Array (wie oben das Prefix-Array), aber das funktioniert hier natürlich nicht.