AGB  ·  Datenschutz  ·  Impressum  







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

Objekt-typ übergeben

Ein Thema von MechMac666 · begonnen am 17. Aug 2011 · letzter Beitrag vom 17. Aug 2011
Antwort Antwort
Seite 1 von 2  1 2      
MechMac666

Registriert seit: 9. Nov 2008
93 Beiträge
 
#1

Objekt-typ übergeben

  Alt 17. Aug 2011, 18:57
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
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#2

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 19:00
Schau dir mal die Eigenschaft 'MyObject.ClassName' an...
Das Bild hängt schief.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 19:33
oder mit is
Delphi-Quellcode:
button: TButton;
obj: TObject;
...

obj := button;
...

if obj is TButton then ...
Markus Kinzler
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
93 Beiträge
 
#4

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 19:42
@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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 19:45
Schau dir mal die Eigenschaft 'MyObject.ClassName' an...
Und warum nicht MyObject.ClassType oder gleich IS ?



Und ja, man kann dennoch auf eigenschaften zugreifen.

Mit IS prüfen und wenn man den Typ weiß, dann direkt oder via AS casten.


Delphi-Quellcode:
if obj is TEdit then
  TEdit(obj).Text := ...;


if obj is TEdit then
  (obj as TEdit).Text := ...;
Man kann auch auf Vorfahren prüfen/casten

Delphi-Quellcode:
if obj is TWinControl then // reagiert auf TEdit, TMemo, TLabel uvm.
  TWinControl(obj).Left := ...;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
93 Beiträge
 
#6

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 19:58
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 20:05
Delphi-Quellcode:
var elem: array[0..10] of TWinControl;

elem[...] := TEdit.Create(...);

elem[...].Width := 123;
Wenn alle Typen eh die gleichen gbenötigten Eigenschaften besitzen, dann nimm statt TWinControl einen Typen, welchen alle als gemeinsamen Vorfahren haben und fertig.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
93 Beiträge
 
#8

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 20:14
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.

Geändert von MechMac666 (17. Aug 2011 um 20:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 21:05
Nochmals:
Wozu erst die Elemente suchen wenn man direkt drauf zugreifen kann?

auf elem greist du über einen Index zu und genau den selben Index kann man auch direkt nutzen ... siehe einen Post weiter vorne.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
MechMac666

Registriert seit: 9. Nov 2008
93 Beiträge
 
#10

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 21:11
@himitsu

Ok, jetzt hab ich`s verstanden. Thx.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:26 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