Hallo,
ich habe mir von TStringGrid eine Komponente abgeleitet, die ich als kleine Datenbank benutze. Zur Datenein/ausgabe habe ich u.a. auch die Möglichkeit vorgesehen Komponenten zu benutzen. Dies realisiere ich mit unten stehenden Code.
Leider werden da nur die im Code aufgeführten Komponeneten angesprochen. Ich suche einen Möglichkeit meine Komponente flexibler zu gestalten.
Ich könnte statt TEdit, TMaskEdit... auch TCustomEdit verwenden. Dies bringt aber nur eine leicht Verbesserung, denn die Verwendung von TCustomRadioGroup statt TRadioGroup funktioniert schon nicht mehr.
Schön wäre es, wenn ich prüfen könnte ob die jeweilige Komponete die Eigenschaft (Text, Caption, Itemindex,...) hat, um dann den Zugriff auszuführen.
Hat jemand eine Idee wie ich dies realisieren kann?
Oder würdet ihr es ganz anders machen?
Code:
Delphi-Quellcode:
function TFilterGrid.CompToCells(Comp: TObject = nil): boolean;
var c, i,
j : integer;
s : string;
ci : TColInfo;
ob : TObject;
begin
result := False;
if ChangeMode = False
then exit;
for c := 0 to ColCount-1 do begin
s := Cells[c, Row];
ci := ColInfo[c];
if (ci <> nil) and (ci.CompLst <> nil)
then begin
for i := 0 to ci.CompLst.Count-1 do begin
ob := ci.CompLst[i];
if (ob <> nil) and ((Comp = nil) or (Comp = ob))
then
if ob is TEdit
then s := TEdit(ob).Text
else
if ob is TMaskEdit
then s := TMaskEdit(ob).Text
else
if ob is TLabel
then s := TLabel(ob).Caption
else
if ob is TMemo
then s := ClearEtFromText(TMemo(ob).Text)
else
if ob is TCheckBox
then s := ccBoolChar[TCheckbox(ob).Checked]
else
if ob is TRadioButton
then s := ccBoolChar[TRadioButton(ob).Checked]
else
if ob is TComboBox
then s := TComboBox(ob).Text
else
if ob is TRadioGroup
then s := IntToStr(TRadioGroup(ob).ItemIndex)
else
if ob is TSpinEdit
then s := TSpinEdit(ob).Text
else
if ob is TListBox
then
with TListBox(ob) do begin
if ItemIndex > -1
then s := Items[ItemIndex]
else s := '';
end
else
if ob is TCheckListBox
then
with TCheckListBox(ob) do begin
s := '';
for j := 0 to Items.Count-1 do
if Checked[j]
then s := s+Items[j]+cEtRepl;
end
else
if (ob is TProzContainer) and Assigned(TProzContainer(ob).FuncToCells)
then s := TProzContainer(ob).FuncToCells(Cells[c, Row]);
end;
end;
result := result or (Cells[c, Row] <> s);
Cells[c, Row] := s;
end;
if result
then begin
if SortEd and (FSortCols <> '')
then SortiereIndex
else Change;
ModiDaten_True;
end;
end;
Gruß Klaus