![]() |
Objekt-typ übergeben
Hallo,
momentan nutze ich folgendes Konstrukt: var button:tbutton; typ:string; button:=tbutton.create(Form1); typ:='button'; . . . . if typ='button' then tbutton(form1.findcomponent('wasweißich')).caption ='Hallo'; Ich würde nun gern auf die Abfrage unten verzichten und direkt mit "typ" arbeiten. Quasi so: typ(form1.findcomponent('...... "Typ" kann im Prinzip auch gern etwas anderes als String sein. Ich habe das in einem Record definiert und wäre da also frei. Ist das möglich? Es gibt natürlich noch andere Elemente als Buttons, die in der Liste aufgenommen werden, daher kann ich "typ" nicht als tbutton definieren. Letztendlich habe ich ein array, in dem als Datensatz der Name eines Objektes und sein "Typ" als string gespeichert ist. Wenn ich damit nun arbeiten möchte muss ich momentan halt erstmal jeden Typ abfragen, bevor ich mit FindComponent loslegen kann. Und ich hätte es gern so, das ich mit dem "Typ" direkt arbeiten kann. Gruß, Andreas |
AW: Objekt-typ übergeben
Schau dir mal die Eigenschaft 'MyObject.ClassName' an...
|
AW: Objekt-typ übergeben
oder mit is
Delphi-Quellcode:
button: TButton;
obj: TObject; ... obj := button; ... if obj is TButton then ... |
AW: Objekt-typ übergeben
@mkinzler
Dann hätte ich aber wieder eine Abfrage. Das was ich vorhabe klappt ja auch nur, sofern die Objekte die Eigenschaften auch besitzen. Angenommen ich habe in dem Array Buttons und Labels, könnte ich bei beiden auf x.left x.top etc. zugreifen. Mit x.text würde es wohl ne exception geben, da das Label das nicht kennt. |
AW: Objekt-typ übergeben
Zitat:
Delphi-Quellcode:
?
IS
Und ja, man kann dennoch auf eigenschaften zugreifen. Mit
Delphi-Quellcode:
prüfen und wenn man den Typ weiß, dann direkt oder via
IS
Delphi-Quellcode:
casten.
AS
Delphi-Quellcode:
Man kann auch auf Vorfahren prüfen/casten
if obj is TEdit then
TEdit(obj).Text := ...; if obj is TEdit then (obj as TEdit).Text := ...;
Delphi-Quellcode:
if obj is TWinControl then // reagiert auf TEdit, TMemo, TLabel uvm.
TWinControl(obj).Left := ...; |
AW: Objekt-typ übergeben
Delphi-Quellcode:
type elemente =record
name:string; typ:twincontrol; end; var elem: array[0..10] of elemente; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var test:tbutton; begin test:=tbutton.Create(form1); test.Left:=10; test.Top:=10; test.caption:='huhu'; test.Width:=80; test.Height:=22; test.Name:='uggi'; elem[1].name:='uggi'; elem[1].typ:=test; elem[1].typ(form1.FindComponent(elem[1].name)).left:=20; end; end. So geht es natürlich nicht. Ich möchte mit der folgenden Zeile verschiedene Objekte ansprechen. elem[1].typ(form1.FindComponent(elem[1].name)).left:=20; Labels, buttons, etc. Es ist sichergestellt das nur Eigenschaften abgefragt werden, die die alle haben. elem[1].typ soll quasi für die Standard-Controlls stehen, bzw. kann ich bei der OnCreate Procedure ja auch etwas zuweisen à la elem[1].typ:=test; Nur ich weiß nicht was das für ein Datentyp sein muss. |
AW: Objekt-typ übergeben
Delphi-Quellcode:
Wenn alle Typen eh die gleichen gbenötigten Eigenschaften besitzen, dann nimm statt TWinControl einen Typen, welchen alle als gemeinsamen Vorfahren haben und fertig.
var elem: array[0..10] of TWinControl;
elem[...] := TEdit.Create(...); elem[...].Width := 123; |
AW: Objekt-typ übergeben
Habs gerade hinbekommen.
Delphi-Quellcode:
var elem: array[0..10] of string;
implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var test:tbutton; test2:tedit; begin test:=tbutton.Create(form1); test.Parent:=(form1); test.Left:=20; test.Top:=20; test.caption:='huhu'; test.Width:=80; test.Height:=22; test.Name:='uggi'; elem[1]:='uggi'; test2:=tedit.Create(form1); test2.Parent:=(form1); test2.Left:=20; test2.Top:=40; test2.text:='huhu'; test2.Width:=80; test2.Height:=22; test2.Name:='uggi2'; elem[2]:='uggi2'; end; procedure TForm1.Button2Click(Sender: TObject); var I: Integer; begin for I := 1 to high(elem) do if elem[i]<>'' then twincontrol(form1.FindComponent(elem[i])).left:=100; end; EDIT: Ich sehe gerade, jetzt kann ich mir den Typ auch schenken *lol* . . So, aktueller Stand. |
AW: Objekt-typ übergeben
Nochmals:
Wozu erst die Elemente suchen wenn man direkt drauf zugreifen kann? auf
Delphi-Quellcode:
greist du über einen Index zu und genau den selben Index kann man auch direkt nutzen ... siehe einen Post weiter vorne.
elem
|
AW: Objekt-typ übergeben
@himitsu
Ok, jetzt hab ich`s verstanden. Thx. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 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