Einzelnen Beitrag anzeigen

RaSoWa1

Registriert seit: 1. Jun 2006
Ort: Halle/Saale
140 Beiträge
 
Delphi 2010 Professional
 
#1

Prüfen ob Komponenteneigenschaft vorhanden

  Alt 6. Feb 2010, 10:08
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
Klaus
  Mit Zitat antworten Zitat