Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Objekte finden, egal ob TLMDEdit oder TRzEdit (https://www.delphipraxis.net/178547-objekte-finden-egal-ob-tlmdedit-oder-trzedit.html)

DelTurbo 14. Jan 2014 08:22

Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Hallo,
wie kann ich abfragen ob ein Objekt im grunde ein TEdit ist. Egal ob es in wirklichkeit ein TRzEdit ober ähnlich ist.

Zur zeit mache ich das so. Aber ich müsste die Schleife immer ändern, bzw. erweitern wenn ich nun ein z.b. TLMDEdit auf dem Panel habe.

Danke im voraus

Delphi-Quellcode:
function GetDataFromGBox(var FN:TStringList;var FV:TStringList;Box:TPanel):Integer;
var
  obj  :TControl;
  i    :Integer;
begin
    Result:=0;
    Assert(Assigned(Box));
    for i:=0 to Box.ControlCount-1 do begin
      obj:=Box.Controls[i];
      if ( obj is TRzEdit ) then begin
        if ( Pos('_',TRzEdit(obj).Name)<>0 ) then begin
          FN.Add(Copy(TRzEdit(obj).Name,1,Pos('_',TRzEdit(obj).Name)-1));
          FV.Add(TRzEdit(obj).Text);
          inc(Result);
        end;
      end;
    end;
end;

DeddyH 14. Jan 2014 08:27

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Wenn die Komponenten alle von TEdit abstammen, kannst Du doch daraufhin prüfen.

DelTurbo 14. Jan 2014 08:28

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Das habe ich versucht. Aber ich weiss leider nicht wie?!?

baumina 14. Jan 2014 08:30

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Delphi-Quellcode:
if obj.InheritsFrom(TEdit) then begin

Sir Rufo 14. Jan 2014 08:30

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Delphi-Quellcode:
if obj is TEdit
oder evtl. besser
Delphi-Quellcode:
if obj is TCustomEdit
Zitat:

Zitat von baumina (Beitrag 1243580)
Delphi-Quellcode:
if obj.InheritsFrom(TEdit) then begin

oder so :)

DelTurbo 14. Jan 2014 08:33

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Vielen Dank

DelTurbo 14. Jan 2014 15:33

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Ich habe noch eine Frage. Wie finde ich den entsprechenden Custom-Typ raus? Ich habe z.b. eine TRzGroupBox auf dem Panel, aber mit TCustomGroupBox finde ich das nicht.

Danke im voraus

baumina 14. Jan 2014 15:43

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Das Stichwort hierzu lautet
Delphi-Quellcode:
TObject.ClassParent
http://docwiki.embarcadero.com/Libra...ct.ClassParent

DeddyH 14. Jan 2014 15:53

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Oder wenn man die Sourcen hat: einfach nachschauen, wovon die Komponente abgeleitet ist.

DelTurbo 14. Jan 2014 15:59

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Erstmal danke für die antworten,
aber ich bekomme z.b. bei TRzGroupBox.ClassParent.ClassName den Namen TRzCustomGroupBox zurück. Irgendwie verwirrt mich das nun.

Ich habe rausgefunden das ich TRzGroupBox als TCustomPanel finden kann. Kann das stimmen?

himitsu 14. Jan 2014 16:02

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Zitat:

Zitat von DelTurbo (Beitrag 1243645)
Ich habe noch eine Frage. Wie finde ich den entsprechenden Custom-Typ raus? Ich habe z.b. eine TRzGroupBox auf dem Panel, aber mit TCustomGroupBox finde ich das nicht.

Wenn das Ding oder einer seiner Vorfahren nicht von der TCustomGroupBox abgeleitet ist, dann kann man es so auch nicht finden.

Sir Rufo 14. Jan 2014 16:42

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Damit kannst du dir den gesamten Vererbungspfad anzeigen lassen:
Delphi-Quellcode:
function GetClassInheritancePathFrom( Instance : TObject ) : string;
var
  LClass : TClass;
begin
  Result := Instance.ClassName;
  LClass := Instance.ClassParent;
  while Assigned( LClass ) do
  begin
    Result := LClass.ClassName + '->' + Result;
    LClass := LClass.ClassParent;
  end;
end;
Ergebnis bei einem Button:
Code:
TObject->TPersistent->TComponent->TControl->TWinControl->TButtonControl->TCustomButton->TButton

DelTurbo 14. Jan 2014 16:56

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Geil, vielen dank.

Bei meinem "Problemkind" kommt folgendes raus.


Code:
Debug-Ausgabe: TObject->TPersistent->TComponent->TControl->TWinControl->TCustomControl->TCustomPanel->TRzCustomPanel->TRzCustomGroupBox->TRzGroupBox

Gruß

himitsu 14. Jan 2014 17:41

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Es ist also eigentlich ein TCustomPanel (und indirekt auch TPanel), welches man als Vorlage für die GroupBox verwendet.

Wäre es von TCustomGroupBox/TGroupBox abgeleitet, dann wäre der grundlegende Code kompatibel und man hätte es im Code auch als TGroupBox ansprechen können.

DelTurbo 15. Jan 2014 08:19

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Zitat:

Zitat von himitsu (Beitrag 1243663)
Es ist also eigentlich ein TCustomPanel (und indirekt auch TPanel), welches man als Vorlage für die GroupBox verwendet.

Jap,
aber erstmal drauf kommen von wo das abgeleitet wird. Mit der kleinen Routine von Sir Rufo klappt das wunderbar. An dieser stelle nochmal Thx...

baumina 15. Jan 2014 08:26

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Zitat:

Zitat von DelTurbo (Beitrag 1243705)
Mit der kleinen Routine von Sir Rufo klappt das wunderbar. An dieser stelle nochmal Thx...

Hättest du die Delphi-Hilfe oder meinen o.a. Link bemüht, wärst du evtl. auf das dort angegebene Codebeispiel "ClassParent (Delphi)" aufmerksam geworden...

himitsu 15. Jan 2014 08:45

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Man kann sich natürlich auch mit Strg+Linksklick durch den Source hangeln und sieht so auch, wovon was abstammt.

DeddyH 15. Jan 2014 09:05

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Wenn man den Source hat... aber etwas in der Art hatte ich ja auch schon angesprochen.

DelTurbo 15. Jan 2014 09:22

AW: Objekte finden, egal ob TLMDEdit oder TRzEdit
 
Natürlich möchte ich mich auch bei allen anderen bedanken. Sorry, hatte ich oben vergessen. :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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-2025 by Thomas Breitkreuz