AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen ob Komponenteneigenschaft vorhanden

Ein Thema von RaSoWa1 · begonnen am 6. Feb 2010 · letzter Beitrag vom 7. Feb 2010
Antwort Antwort
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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#2

Re: Prüfen ob Komponenteneigenschaft vorhanden

  Alt 6. Feb 2010, 10:21
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#3

Re: Prüfen ob Komponenteneigenschaft vorhanden

  Alt 6. Feb 2010, 10:51
Zitat von himitsu:
Sowas geht über die RTTI.
Und das geht z. B. so:

Delphi-Quellcode:
var
  ...
  ImgIdx: Integer;
begin
  ...
  ob := ci.CompLst[i];
  if IsPublishedProp(ob, 'ImageIndex') then
    ImgIdx := GetOrdProp(ob, 'ImageIndex');
  ...
end;
Weitere Routinen: Delphi-Referenz durchsuchenGetStrProp, Delphi-Referenz durchsuchenSetStrProp, Delphi-Referenz durchsuchenSetOrdProp
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#4

Re: Prüfen ob Komponenteneigenschaft vorhanden

  Alt 6. Feb 2010, 10:54
Zitat:
Delphi-Quellcode:
if IsPublishedProp(ob, 'ImageIndex') then
  ImgIdx := GetOrdProp(ob, 'ImageIndex');
Man sollte aber besser noch den PropType prüfen, denn sonst passiert was nettes, wenn z.B. eine Komponente daherkommt, welche ihr ImageIndex z.B. als String deklariert hat.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: Prüfen ob Komponenteneigenschaft vorhanden

  Alt 6. Feb 2010, 14:04
Nachdem du auch Delphi 2010 kannst du dir mal das Video von Daniel über RTTI in D2010 anschauen: hier, ziemlich weit unten
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
RaSoWa1

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

Re: Prüfen ob Komponenteneigenschaft vorhanden

  Alt 7. Feb 2010, 11:53
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
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz