![]() |
Prüfen ob Komponenteneigenschaft vorhanden
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:
Gruß Klaus
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; |
Re: Prüfen ob Komponenteneigenschaft vorhanden
Sowas geht über die RTTI.
Aber in deinem Fall ist es wohl einfacher, wenn du dich auf die paar Grundtypen festlegst, diese via IS prüfst und verarbeitest. |
Re: Prüfen ob Komponenteneigenschaft vorhanden
Zitat:
Delphi-Quellcode:
Weitere Routinen:
var
... ImgIdx: Integer; begin ... ob := ci.CompLst[i]; if IsPublishedProp(ob, 'ImageIndex') then ImgIdx := GetOrdProp(ob, 'ImageIndex'); ... end; ![]() ![]() ![]() |
Re: Prüfen ob Komponenteneigenschaft vorhanden
Zitat:
|
Re: Prüfen ob Komponenteneigenschaft vorhanden
Nachdem du auch Delphi 2010 kannst du dir mal das Video von Daniel über RTTI in D2010 anschauen:
![]() |
Re: Prüfen ob Komponenteneigenschaft vorhanden
Entschuldigung,
aber ich konnte mich nicht eher melden. Ich muß ab und zu mal Arbeiten, damit ich mir meine Hobby leisten kann. Ich habe mir das Video zu RTTI soebend angesehen. Ich glaube das ist genau das was ich gesucht habe. Heute habe ich etwas Zeit und kann mich da mal reinknien. Danke an Alle für die Tips und einen schönen Gruß Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz