AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Es funktioniert, und ich verstehe nicht warum o.O
Thema durchsuchen
Ansicht
Themen-Optionen

Es funktioniert, und ich verstehe nicht warum o.O

Ein Thema von Memnarch · begonnen am 31. Okt 2012 · letzter Beitrag vom 1. Nov 2012
Antwort Antwort
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

Es funktioniert, und ich verstehe nicht warum o.O

  Alt 31. Okt 2012, 22:47
NAbend,
Also aufgrund eines versehens etwas komisches festgestellt.

Ich habe eine Form TMainForm. Dann habe ich meinem Projekt ein Datenmodul(TIDEActions genannt, name = IDEActions) hinzugefügt. Selbiges beinhaltet eine actionlist mit allen actions und properties die AUf Objectinstanzen verweisen, die extern zugewiesen werden. Das datenmodul ist aus dem Autocreate rausgenommen. Die globale variable die in TIDEActions generiert wurde(IDEActions) habe ich gelöscht, weil ich keine globale instanz wollte.

Meine MainForm besitzt eine private Feldvariable FIdeActions vom typ TIDEActions.
Diese wird im Constructor erstellt und Properties gesetzt.(Dabei handelt es sich um instanzen anderer klassen).

SO und jetzt wirds merkwürdig:

Ich kann auf der MainForm im Formeditor trotzdem bei buttons im ActionFeld

IDEActions.MeineAction

anwählen UND zur laufzeit wird die TIDEActions instanz genommen die ich in meiner feldvariable FIDEActions hinterlegt habe.

HÄ?!

In meinem kopf sagt eine stimme "Kann gar nicht sein". WOher nimmt Delphi die richtige instanz? Müsste das nicht ne NIL pointer exception geben? Ich kann alles völlig normal nutzen.

Jemand ne erklärung?
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Es funktioniert, und ich verstehe nicht warum o.O

  Alt 31. Okt 2012, 23:00
Ich würde es mir so erklären: Im OI weist du nur eine Referenz auf FIdeActions zu, so dass der Inhalt dieser Variablen dann benutzt wird (der dann nicht nil ist).

Vielleicht weiß ja jemand, wie es wirklich funktioniert
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#3

AW: Es funktioniert, und ich verstehe nicht warum o.O

  Alt 31. Okt 2012, 23:14
Denkfehler an der sache: der OI hat keine infos über privat feldvariablen
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Es funktioniert, und ich verstehe nicht warum o.O

  Alt 1. Nov 2012, 00:41
Wenn ich dich richtig verstanden habe, kann ich das erklären. Beim Laden eines Forms werden am Schluß alle Referenzen auf andere Komponenten aufgelöst, wobei der Name der Komponente das Kriterium ist. Zunächst wird in der aktuellen Komponente (dem Form) nach untergeordneten Komponenten gesucht. Danach wird die Suche global ausgeweitet. Bei der globalen Suche werden alle Forms und alle DataModules einbezogen, die sich Screen.Forms und Screen.DataModules registrieren.

Wenn du beim erzeugen des DataModules das Form als Owner angegeben hast, wird es als lokale Komponente gefunden. Andernfalls über die globale Suche.

Es spielt also keine Rolle, wo die Instanz-Variable eines DataModules deklariert ist und ob überhaupt eine existiert. Diese Variablen dienen wie deine Feld-Instanz nur dazu, daß du in deinem Source-Code darauf zugreifen kannst. Das Ganze würde auch funktionieren, wenn du das Datenmodul einfach nur erzeugst, ohne es einer Variablen zuzuweisen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#5

AW: Es funktioniert, und ich verstehe nicht warum o.O

  Alt 1. Nov 2012, 14:44
Hui, klasse automatismus
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  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 14:22 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