Moin
Anregung: Vor dem Generieren der Datensensitiven Komopnenten (TDBEdit / TDBMemo) FeldTyp abfragen und entsprechende Komponente generieren
Hier der umgebaute Code (ist nicht getestet):
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: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
| procedure TForm1.form_maske; var DBLabel : TLabel; Feld : TDBEdit; FeldM : TDBMemo; Feldname : String; Feldtype : TFieldtype; Feldgroesse : Integer; i, Abstand : Integer;
begin
if Datenbank.Active then begin DBGrid1.Visible := False; Datenquelle.DataSet := Datenbank;
Abstand := 40; for i := 0 to Datenbank.FieldCount -1 do begin Feldname := Form1.Datenbank.Fields[i].FieldName; Feldgroesse := Form1.Datenbank.Fields[i].DataSize; Feldtype := Form1.Datenbank.Fields[i].DataType;
If Feldtype = ftMemo then begin if TDBMemo(FindComponent('Feld_' + IntToStr(i)))= NIL then begin FeldM := TDBMemo.Create(SELF);
FeldM.Parent := Self; FeldM.Name := 'Feld_' + IntToStr(i); FeldM.DataField := Feldname; FeldM.DataSource := Datenquelle;
FeldM.AutoDisplay := True; end; end else if TDBEdit(FindComponent('Feld_' + IntToStr(i)))= NIL then begin Feld := TDBEdit.Create(SELF); Feld.Parent := Self;
Feld.Name := 'Feld_' + IntToStr(i);
Feld.DataField := Feldname; Feld.DataSource := Datenquelle;
Feld.Top := 20 + Abstand;
Feld.Left := 400;
If Feldtype = ftString then Feld.Width := Feldgroesse * 9;
If Feldtype = ftDate then Feld.Width := 90;
If Feldtype = ftFloat then Feld.Width := 80;
If Feldtype = ftBoolean then Feld.Width := 60;
end; if TLabel(FindComponent('Label_' + IntToStr(i)))= NIL then begin DBLabel := TLabel.Create(SELF); DBLabel.Parent := DBGrid1.Parent;
DBLabel.Name := 'Label_' + IntToStr(i);
DBLabel.Top := -13 + Abstand;
DBLabel.Left := 30;
DBLabel.Caption := Feldname; end;
abstand := abstand + 30;
end; end; |
Noch ein Denkanstoß: Plaziere auf Deinem AnzeigeFormular eine ScrollBox und create die Komponenten dorthin. Vorteil: ein schönes, sauberes Anzeigefenster, welches unabhängig von der Anzahl der Datenfelder ist
Naturlich muss die 'Eltern'-Eigenschaft entsprechend gesetzt werden: KomponenteXYZ.Parent := ScrollBox1
Verstehe das im Übrigen richtig, dass je nach Tabelle die entsprechenden Datenfelder-AnzeigeKomponenten generiert werden sollen und dann durch diese Tabelle gescrollt wird?
Gruß