![]() |
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:
so jetz meine fragen. globale variablen sind ja eine schlechte loesung, weil sie zu langwierigen und schwierigen debugging prozessen fuehren koennen.
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; 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:
hoffe mir kann jemand ein paar tipps geben
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; Gruß euer Richard ;) [edit=alcaeus]Delphi-Tags korrigiert. Mfg, alcaeus[/edit] |
Re: objectreferenz austauschen ohne globale variablen!!!!
und warum nicht:
Delphi-Quellcode:
die variable testobject1 musst natürlich irgendwo deklarieren, z.B. in deinem Form oder einem eigenen Variablen-Containertype 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; |
Re: objectreferenz austauschen ohne globale variablen!!!!
übergibt doch das Objekt einfach der Prozedur
Delphi-Quellcode:
Da war einer schneller
procedure bla2(AObject : TTestObject);
begin with AObject do begin end; end; Aufruf kann auch
Delphi-Quellcode:
sein
bla2(TTestObject.Create);
|
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 |
Re: objectreferenz austauschen ohne globale variablen!!!!
Hallo,
höst sich so an, als sei das ein Fall für ein Singleton Pattern, z.b. ![]() Woki |
Re: objectreferenz austauschen ohne globale variablen!!!!
Zitat:
Bau eine HelperKlasse:
Delphi-Quellcode:
THelper = class
public class procedure Bla2(_objekt : TMyObject; _class : TMyWinControl); end; |
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:
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?
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; Gruß richadr |
Re: objectreferenz austauschen ohne globale variablen!!!!
//doppelpost geloescht sorry
richard |
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 ;) |
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 |
Re: objectreferenz austauschen ohne globale variablen!!!!
Zitat:
Ich habe mir jetzt angewöhnt in Eventhandlern nur noch Methoden aufzurufen. Dann verschwinden solche Probleme. |
Re: objectreferenz austauschen ohne globale variablen!!!!
Ok, Ok ich hab das VCL Control gemeint.
Also steht das VCL Control in irgendeiner Beziehung zu dem Objekt oder nicht? Deine Angaben sind etwas vage... Kannst du das Objekt nicht in der procedure 2 erst erstellen? |
Re: objectreferenz austauschen ohne globale variablen!!!!
@garbi
nein kann ich leider nicht. ich denke mal das ich klar gesagt habe was ich will. bitte lies nochmal genau nach. die 2 procedure ist eine ereignisprocedure. in dieser procedure muss ich auf ein anderes object referenzieren. Gruß richard |
Re: objectreferenz austauschen ohne globale variablen!!!!
@ jens schumann
ja der code steht im onclick eines actionmenuelements |
Re: objectreferenz austauschen ohne globale variablen!!!!
Zitat:
Lagere den Code in eine eigene Methode aus. Dieser Methode kannst Du dann als Paramter die Objektreferenz übergeben. Im OnClick Event steht dann nur noch der Methoden Aufruf. |
Re: objectreferenz austauschen ohne globale variablen!!!!
@ jens schumann ,diese uebergabe ist ja das eigentliche problemob ich den code als methode auslagere oder nicht, spielt doch dabei ueberhaupt keine rolle?
ich verstehe nich wie du das meinst bzw was mir das bringt. die referenz musss ich trotzdem uebergeben. wobei wir wieder bei meiner ursprungsfrage sind? Gruß richard |
Re: objectreferenz austauschen ohne globale variablen!!!!
Hallo,
ungefähr so
Delphi-Quellcode:
Type
TMyForm = class(TForm) private FRefObject : TObject; ... end; procedure TMyForm.CreateRefObject; begin If Not Assinged(FRefObject) then FRefObject:=TOBject.Create; end; procedure TMyForm.DoSomething(aRefObject : TObject); begin If Assinged(FRefObject) then MachWas end; procedure TMyForm.XYZClick(Sender : TObject); begin CreateRefObject; DoSomething(FRefObject ); end; |
Re: objectreferenz austauschen ohne globale variablen!!!!
ok jens jetz weis ich was du meinst ;)
ich wuerd noch folgendes ergaenzen?
Delphi-Quellcode:
Type
TMyForm = class(TForm) private FRefObject : TObject; ... end; procedure TMyForm.CreateRefObject; begin If Not Assinged(FRefObject) then FRefObject:=TOBject.Create; end; procedure TMyForm.DoSomething(aRefObject : TObject); begin If Assinged(FRefObject) then MachWas end; procedure TMyForm.XYZClick(Sender : TObject); begin CreateRefObject; DoSomething(FRefObject ); frefobject.free // um das übergabe object wieder nach benutzung freizugeben?? oder macht er das automatisch? end; |
Re: objectreferenz austauschen ohne globale variablen!!!!
[gelöscht]
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 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