Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi objectreferenz austauschen ohne globale variablen!!!! (https://www.delphipraxis.net/57226-objectreferenz-austauschen-ohne-globale-variablen.html)

richard_boderich 17. Nov 2005 13:53


objectreferenz austauschen ohne globale variablen!!!!
 
moin zusammen,

ich hab mal eine frage. es geht darum wie ich objectreferenzen uebertragen kann.

das problem ist. ich erhalte in einer procedure die objectreferenz, muss sie aber in einer anderen procedure verarbeiten. momentan mach ich das mit einer globalen
variablen von typ object. und zwar so. hab der einfachheit halber ein paar cast weggelassen.

Delphi-Quellcode:
var  //global
reftestobject: ttestobject;



procedure bla1
begin
  testobject1:=create(owner ....);
end;

procedure bla2
begin
  with reftestobject do
  begin

  //mach was zu tun ist

  end;
end;
so jetz meine fragen. globale variablen sind ja eine schlechte loesung, weil sie zu langwierigen und schwierigen debugging prozessen fuehren koennen.
meine frage jetzt wie kann ich das besser machen? ich dachte das ich da einen pointer verwenden koennte, aber der muss doch dann auch global definiert sein oder?


eventuell so?

Delphi-Quellcode:
var  //global
reftestobject: pointer


procedure bla1
begin
  testobject1^:=create(owner ....);
end;

procedure bla2
begin
  with @reftestobject do
  begin

  //mach was zu tun ist

  end;
end;
hoffe mir kann jemand ein paar tipps geben

Gruß euer Richard ;)

[edit=alcaeus]Delphi-Tags korrigiert. Mfg, alcaeus[/edit]

sh17 17. Nov 2005 14:12

Re: objectreferenz austauschen ohne globale variablen!!!!
 
und warum nicht:

Delphi-Quellcode:

type
  ttestobject = class...

procedure bla1 
begin
  testobject1:=create(owner ....);
  bla2(testobject1);
end;

procedure bla2(_reftestobject: ttestobject);
begin
  with _reftestobject do
  begin

  //mach was zu tun ist

  end;
end;
die variable testobject1 musst natürlich irgendwo deklarieren, z.B. in deinem Form oder einem eigenen Variablen-Container

Angel4585 17. Nov 2005 14:15

Re: objectreferenz austauschen ohne globale variablen!!!!
 
übergibt doch das Objekt einfach der Prozedur
Delphi-Quellcode:
procedure bla2(AObject : TTestObject);
begin
with AObject do
 begin

end;
end;
Da war einer schneller

Aufruf kann auch
Delphi-Quellcode:
bla2(TTestObject.Create);
sein

richard_boderich 17. Nov 2005 14:52

Re: objectreferenz austauschen ohne globale variablen!!!!
 
also das ist bei mir nicht so einfach moeglich, da es sich bei der 2 objectprocedure um eine standardprocedure eines vcl controls handelt.
ich muesste dann doch ein eigenes ereignis fuer das control implementieren bzw. das vorhandene überschreiben? eine globale klasse will ich nich. ist doch eigentlich das selbe wie ne globale variable, was das debugging betrifft.

Gruß richard

woki 17. Nov 2005 14:56

Re: objectreferenz austauschen ohne globale variablen!!!!
 
Hallo,

höst sich so an, als sei das ein Fall für ein Singleton Pattern, z.b.

http://www.castle-cadenza.demon.co.uk/single.htm

Woki

sh17 17. Nov 2005 14:58

Re: objectreferenz austauschen ohne globale variablen!!!!
 
Zitat:

Zitat von richard_boderich
eine globale klasse will ich nich. ist doch eigentlich das selbe wie ne globale variable, was das debugging betrifft.

irgendwie endet doch alles in einer globalen Variable, oder wo ist Dein Hauptformular deklariert?

Bau eine HelperKlasse:

Delphi-Quellcode:
THelper = class
public
class procedure Bla2(_objekt : TMyObject; _class : TMyWinControl);
end;

richard_boderich 17. Nov 2005 15:14

Re: objectreferenz austauschen ohne globale variablen!!!!
 
@woki hab mir grade den code angeschaut und ihn nicht verstanden. außerdem ist es viel zu viel code und viel zu viel definitiongeschreibsel. nochmal ich will bloß
eine objectreferenz von einer procedure an eine andere uebergeben. das problem ist das die zweite procedure eine standard onclick procedure eines vcl controls ist.
und ich nicht weis wie ich dieser den zusaetzlichen parameter (die objectreferenz) uebergeben kann. ich moecht das schnell haben und mit moeglichst wenig code.

eventuell ginge es auch mit einem hilfobject. //bitte vezeiht mir syntaxfehler. es geht um prizipelle konzept

z.b

Delphi-Quellcode:
type

       objectreferenz=class;
         param: tobject; // klassenvariable fuer objectreferenz


procedure 1
begin
...
objectreferenz.create;
objectreferenz.param:=create(owner,..);
...
end;


procedure 2
begin
with objectreferenz.param do // mach was zu tun ist
..

objectreferenz.free
end;
der voretil bei dier methode ist,das das übergabe obecjt nur solange existiert wie es wirklich gebraucht wird. und so spaeter beim debugging keine seiteneffekte bringt. was haltet ihr davon?


Gruß richadr

richard_boderich 17. Nov 2005 15:15

Re: objectreferenz austauschen ohne globale variablen!!!!
 
//doppelpost geloescht sorry

richard

Garby 17. Nov 2005 15:43

Re: objectreferenz austauschen ohne globale variablen!!!!
 
Hallo,

Wenn du dieses Edit eh schon selber abgeleitet hast, könntest du aus diesem Globalen objekt ja eine Property des Edits machen.

Ich kann mich ja auch irren ;)

richard_boderich 17. Nov 2005 15:48

Re: objectreferenz austauschen ohne globale variablen!!!!
 
was fuer ein edit? wie kommst du auf edit? und nein ich hab von dem control keine ableitung

richard


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr.
Seite 1 von 2  1 2      

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