AGB  ·  Datenschutz  ·  Impressum  







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

property setzen bzw. ändern

Ein Thema von cBoB · begonnen am 20. Apr 2004 · letzter Beitrag vom 21. Apr 2004
Antwort Antwort
Seite 2 von 2     12   
Muetze1
(Gast)

n/a Beiträge
 
#11

Re: property setzen bzw. ändern

  Alt 21. Apr 2004, 10:40
Moin!

Zitat von maximov:
Du kannst (zur laufzeit) nur solange auf methoden, von objekten die noch nicht instanziert sind (nil), zugreiffen, wie dort nicht mit den objekt-daten gearbeitet wird! Denn dann wird faktisch nicht auf den objekt-speicher zugegriffen, nur auf den code der klasse.
Nicht ganz richtig: Der Zugriff auf nicht statische Klassenmethoden ist bei einer Instanzenvariable von Nil nicht möglich, da der Compiler automatisch Code für den Zugriff auf die VMT erzeugt um die Adresse der Methode zu ermitteln. Somit wäre die Methodenadresse um dorthin zu springen an der Stelle hinterlegt (Instanz + VMT Eintragsoffset) z.B. NIL+$08 - was aber dann eine EAccessViolation bei $000008 erzeugt, wenn er die Adresse holen will.
Das geht nur mit statischen Funktionen (das ist der Name in C++, Delphi nennt das Class Procedure/Function).

----

Ich vermute immernoch, das du die ganze Zeit auf Dev1 aus der Unit zugegriffen hast, die Nil ist und in Unit2 wo die Instanz in der Dev1 vorhanden war auf die Methoden...

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von cBoB
cBoB

Registriert seit: 6. Apr 2004
Ort: Berlin
61 Beiträge
 
Delphi 5 Professional
 
#12

Re: property setzen bzw. ändern

  Alt 21. Apr 2004, 11:55
@Muetze
Hab jetzt ordnungsgemäß in Unit1 eine Instanz von Dev1 erzeugt und in Unit2 die Definition von Dev1 entfernt. Und was soll ich sagen: Isch hoab doa uff'n Knobb gedrüggt und der gääht!

Nächste kleine Frage am Rande: Wenn ich nun innerhalb von Unit2 eine ComboBox erzeugt hab und dann das OnChange Event auf eine weiter procedure 'CBChange' innerhalb von Unit2 gelenkt hab, kann ich doch nur von außen darauf zugreifen, wenn ich CBChange als public und als virtual definiere und dann innerhalb von Unit1 diese procedure dann überschreibe, oder? Zumindest wäre es ein Weg, weils halt funktioniert. Gäbe es aber auch andere Möglichkeiten?

Und 2. Frage ist: Wenn ich nun die in Unit2 erzeugte ComboBox nehme und dann per Parent in das Form1 aus Unit1 hänge, wie kann ich dann auf das Ding ordnungsgemäß zugreifen? Ich habs mittels ewig langer Schlange:
with Form1.PageControl1.ActivePage.Controls[0] as TComboBox do rrealisiert, was mir aber nicht so gefällt, weil es dann ja immer an einer bestimmten Stelle in der Hirarchie erwartet wird. Und über einen Namen kann ich da ja auch nicht zugreifen, den weiß ja Form1 auch nicht.

Uiih, doch wieder so lang geworden

Gruß
-c-
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#13

Re: property setzen bzw. ändern

  Alt 21. Apr 2004, 12:24
Zitat von Muetze1:
...
Nicht ganz richtig: Der Zugriff auf nicht statische Klassenmethoden ist bei einer Instanzenvariable von Nil nicht möglich, da der Compiler automatisch Code für den Zugriff auf die VMT erzeugt um die Adresse der Methode zu ermitteln. Somit wäre die Methodenadresse um dorthin zu springen an der Stelle hinterlegt (Instanz + VMT Eintragsoffset) z.B. NIL+$08 - was aber dann eine EAccessViolation bei $000008 erzeugt, wenn er die Adresse holen will.
Das geht nur mit statischen Funktionen (das ist der Name in C++, Delphi nennt das Class Procedure/Function).
...
Leider muss ich dich enttäuschen Du gehst davon aus, dass die methoden vom object-pointer aussgehend addressiert werden (nil+&80), das würde nur sinn machen wenn jedes object sich eine kopie der methoden einer klasse anlegt. Dem ist nicht so! Sondern die methode werden vom klassen-pointer ausgehend addressiert und der objekt-pointer wird als unsichtbarer self-parameter übergeben. Deshalt funktioniert dies auch, da ich nicht auf objekt-felder zugreife:

Delphi-Quellcode:
type
  TTest = class
    procedure NoStatic(str:string);
  end;

{ TTest }

procedure TTest.NoStatic(str: string);
begin
  ShowMessage(str);
end;

procedure TForm1.Button1Click(Sender: TObject);
var x:TTest;
begin
  x.NoStatic('No Exception');
end;
zB. unser schöne free würde sonst auch keinen sinn machen
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#14

Re: property setzen bzw. ändern

  Alt 21. Apr 2004, 14:14
Moin!

maximov, du hast Recht. Ich habe beim vorherigen Post das nicht beachtet, das die VMT ja von der Klasse kommt und nicht bei der Instanz steht. Ich nehme alles zurück und behaupte das Gegenteil.

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von cBoB
cBoB

Registriert seit: 6. Apr 2004
Ort: Berlin
61 Beiträge
 
Delphi 5 Professional
 
#15

Re: property setzen bzw. ändern

  Alt 21. Apr 2004, 14:30
Hey, und mit mir redet keiner mehr?
Nerv' ich mittlerweile schon so mit meinen Fragen?

-c-
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#16

Re: property setzen bzw. ändern

  Alt 21. Apr 2004, 15:02
Das musste eben geklärt werden

Zitat von cBoB:
...
Nächste kleine Frage am Rande: Wenn ich nun innerhalb von Unit2 eine ComboBox erzeugt hab und dann das OnChange Event auf eine weiter procedure 'CBChange' innerhalb von Unit2 gelenkt hab, kann ich doch nur von außen darauf zugreifen, wenn ich CBChange als public und als virtual definiere und dann innerhalb von Unit1 diese procedure dann überschreibe, oder? Zumindest wäre es ein Weg, weils halt funktioniert. Gäbe es aber auch andere Möglichkeiten?
Hast du die klasse in unit1 von der in unit2 (oder umgekehrt [hab den überblick verloren]) abgeleitet? wenn nein dann muss da nix virtuell oder overrided werden, sondern kannst einfach per code die methode dem event zuweisen.
Zitat:
Und 2. Frage ist: Wenn ich nun die in Unit2 erzeugte ComboBox nehme und dann per Parent in das Form1 aus Unit1 hänge, wie kann ich dann auf das Ding ordnungsgemäß zugreifen? Ich habs mittels ewig langer Schlange:
with Form1.PageControl1.ActivePage.Controls[0] as TComboBox do rrealisiert, was mir aber nicht so gefällt, weil es dann ja immer an einer bestimmten Stelle in der Hirarchie erwartet wird. Und über einen Namen kann ich da ja auch nicht zugreifen, den weiß ja Form1 auch nicht.
...
zeig mal mehr code und sag nochmal, in klaren worten, was in dem event passieren soll!
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: property setzen bzw. ändern

  Alt 21. Apr 2004, 15:08
Moin!

Du? Ach du, ja, da war doch noch was...

Zitat von cBoB:
Nächste kleine Frage am Rande: Wenn ich nun innerhalb von Unit2 eine ComboBox erzeugt hab und dann das OnChange Event auf eine weiter procedure 'CBChange' innerhalb von Unit2 gelenkt hab, kann ich doch nur von außen darauf zugreifen, wenn ich CBChange als public und als virtual definiere und dann innerhalb von Unit1 diese procedure dann überschreibe, oder? Zumindest wäre es ein Weg, weils halt funktioniert. Gäbe es aber auch andere Möglichkeiten?
Kein Wort verstanden - selbst nach dem 3. Lesen nicht...

Zitat von cBoB:
Und 2. Frage ist: Wenn ich nun die in Unit2 erzeugte ComboBox nehme und dann per Parent in das Form1 aus Unit1 hänge, wie kann ich dann auf das Ding ordnungsgemäß zugreifen? Ich habs mittels ewig langer Schlange:
Merk dir doch einfach die angelegte Instanz in einer Variablen (ähnlich wie das Dev1 für die TDevice1 Instanz) beim Create und greif dann über die Variable zu...

Bsp:
Delphi-Quellcode:
Type
  TFormX = Class(TForm)
  dein vorhandener Form Code
  Private
    ComboBox_Neu : TComboBox;
  ...
Und wo du das Create machst, dann sowas:

Delphi-Quellcode:
  ComboBox_Neu := TComboBox.Create( ... wie gehabt ... );
  ComboBox_Neu.Text := 'wasweissich';
Und im Code kannst du dann wie im letzten Teil geschrieben mit ComboBox_Neu. auf die Eigenschaften der ComboBox zugreifen. In den Events/Ereignissen die von der ComboBox ausgelöst werden, entspricht der Sender immer der ComboBox...

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 01:32 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