Hallo,
hab beim Stöbern diesen Beitrag entdeckt und deshalb mal die folgende Prozedur entwickelt:
Delphi-Quellcode:
procedure Tdbmain.CreateMask;
var FieldNum: Integer; Field: TStrings; FieldName: String; TopPos,LeftPos: Integer;
begin
TopPOs := 5; LeftPos := 40;
Field := TStrings.Create;
dbf.Fields.GetFieldNames(Field);
for Fieldnum := 0 to dbf.Fields.Count-1 do
begin
FEdit := TLabeledEdit.Create(Self);
FEdits.AddObject(Field[Fieldnum], FEdit);
end;
for Fieldnum := 0 to dbf.Fields.Count-1 do
begin
FieldName := LowerCase(Field[FieldNum]);
FieldName[1] := Upcase(FieldName[1]);
FCtrl := FEdits.Objects[FieldNum];
FEdit := TLabeledEdit(FCtrl);
FEdit.Parent := DBScroll;
FEdit.Left := 40;
FEdit.Top := TopPos;
FEdit.Show;
Inc(TopPos, FEdit.Height + 5);
end;
Field.Free;
end;
Da ich unter Lazarus die TDbf Komponente verwende, habe ich statt TObjectlist eine normale Stringlste verwendet.
Nun frag ich mal, wie ordnet die
IDE bei datensensitiven Komponenten die Felnamen zu.
Wenn ich diesen Mechnismus für eine Eingabemaske einer Datenbank verwenden will, muss ja diese Maske, abhängi von der Anzahl der Felder in der Datenbank unterschiedlich viele Eingabefelder haben,. Der Einfachheit halber will ich erst mal nur Editfelder (TDBEdit) verwenden, zusammen mit TDBText wegen dem Eingabeprompt.
Wie ordnet TDatasource dem Eingabefeld das richtige Datenbankfeld zu?
Inzwischen werde ich weiter experimentieren. Vielleicht genügt es ja, einfach Feldanzahl Editfelder in die Liste einzufügen und nach obiger Prozedur zur Anzeige zu bringen, während TDataSource sich um die richtige Feldzuordnung kümmert. Wenn das klappt, wieso klappt das?
Das ich TDbf verwende liegt an der Art meiner Datenbank, die im Umfang klein genug ist, um keine umfangreiche Datenbankmaschine zu benötigen.