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
FredlFesl

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

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 20: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.869 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 20: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
95 Beiträge
 
#3

AW: Objekt-typ übergeben

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

Registriert seit: 13. Aug 2002
17.213 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 23:07
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.
Entweder muss die Liste von Typ der Basisklasse sein und diese Basisklasse die entsprechenden Properties veröffentlich haben oder du geht über die RTTI und frägst Dynamisch ab ob die Klasse ein Property vom passenden Namen/Typ hat. Das macht z.B. der Formulareditor/VCL auch um die DFM's wieder einzulesen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 20: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 := ...;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
MechMac666

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

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 20: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
44.326 Beiträge
 
Delphi 12 Athens
 
#7

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 21: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
MechMac666

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

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 21: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 21:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 22: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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
MechMac666

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

AW: Objekt-typ übergeben

  Alt 17. Aug 2011, 22:11
@himitsu

Ok, jetzt hab ich`s verstanden. Thx.
  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 12:03 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