AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Kein Fehler obwohl Objekt nicht erstellt !?
Thema durchsuchen
Ansicht
Themen-Optionen

Kein Fehler obwohl Objekt nicht erstellt !?

Ein Thema von jfheins · begonnen am 14. Dez 2004 · letzter Beitrag vom 25. Sep 2006
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#1

Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 14. Dez 2004, 19:49
Bei mir ist es andersherum, als bei den meisten, aber ich frage mich gerade, warum ich keinen fehler bekomme ...

Folgende Deklarationen:
Delphi-Quellcode:
  TCommand = (TXT, DATA);

  TMsgRecord = Record
                 Command: TCommand;
                 Font: TFont;
               end;
Dasnn mache ich folgendes:
Delphi-Quellcode:
 MsgRecord.Command := TXT;
 MsgRecord.Font := FontDialog1.Font;
Ich habe *nirgends* ein MsgRecord.Font := TFont.Create oder so ...
Ich greife also imho auf ein nicht existierendes Objekt zu ... und es gibt keine AV ...

Warum ?

P.S. Ein direkter Aufruf wie MsgRecord.Font.Heigth := 10 schlagt fehl ...
wird der Constructor etwa automatisch aufgerufen ???
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 14. Dez 2004, 19:51
Du bekommst keinen Fehler, weil Klassen als Pointer gehandhabt werden. Beim Assignement wird nur der Pointer im Record überschrieben, da brauchst du keinen Konstruktor.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#3

Re: Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 14. Dez 2004, 19:51
Warum? Weil du nicht auf ein Objekt zugreifst. Objekte sind Pointer. Wenn du MsgRecord.Font := FontDialog1.Font; schreibst, wird einfach nur die Adresse des Objektes in FontDialog1.Font nach MsgRecord.Font übertragen. Danach zeigen beide auf das gleiche Objekt.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 14. Dez 2004, 19:58
was ist TXT ? Schreibe mal Type Zahl= 1..2; und dann Zahl := 1; So nicht !
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 14. Dez 2004, 19:58
Zitat von Dax:
Du bekommst keinen Fehler, weil Klassen als Pointer gehandhabt werden. Beim Assignement wird nur der Pointer im Record überschrieben, da brauchst du keinen Konstruktor.
Wo siehst du da eine Klasse? Für mich ist das ein Record und somit ein zusammengesetzter Datentyp und Datentypen muss / kann man nicht instanzieren. Oder wie sieht der Konstruktor einer Integer-Variablen aus?
Delphi-Quellcode:
type
  TMsgRecord = Record
    Command: TCommand;
    Font: TFont;
  end;

var
  MsgRecord: TMsgRecord;

[..]

  MsgRecord.Font := TMyFont;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 14. Dez 2004, 20:00
Ähh, leute er wundert sich warum er bei MsgRecord.Font := FontDialog1.Font; keine Zugriffsverletzung bekommt. Er denkt er würde dabei auf eine Eigenschaft von TFont zugreifen, was aber nicht der Fall ist.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 14. Dez 2004, 20:03
Wie jetzt? Er wundert sich warum es keine AV gibt bei der Zeile:
MsgRecord.Font := FontDialog1.Font; Ja um was geht es denn nun? Um den FontDialog oder um den Record?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 14. Dez 2004, 20:06
Es geht um den TFont-Teil des Records
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 14. Dez 2004, 20:09
Ja, wo ist denn da das Problem? TFont ist doch auch nur ein Datentyp, wie jeder andere auch und keine Klasse.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#10

Re: Kein Fehler obwohl Objekt nicht erstellt !?

  Alt 14. Dez 2004, 20:11
Zitat von Luckie:
Ja um was geht es denn nun? Um den FontDialog oder um den Record?
Um das Feld "Font" vom Typ "TFont" des Records, dem er einen Wert zuweist, obwohl im Feld "Font" des Records keine Instanz von TFonr erzeugt wurde

@Julius: Der FontDialog erzeugt eine Instanz der TFont-Klasse, und diese Instanz weist du jetzt deinem Record zu, also brauchst du es nicht selber erzeugen, denn du nimmst dir ja was, was schon da ist und setzt es in eine leere Schüssel
Allerdings vermute ich, daß TFontDialog.Destroy die TFont-Instanz wieder freigibt, nach einem FontDialog1.Free wird also vermutlich der Objektpointer ungültig und du kriegst beim nächsten Zugriff die AV, auf die du so sehnsüchtig wartest
Eine Lösung dafür wäre dann TFont.Assign, dann musst du aber wiederum deine eigene TFont-Instanz erzeugen *g*

Thomas, hoffend jetzt endgültig Verwirrung gestiftet zu haben


Edit: Grad' nochmal nachgeschaut, TFontDialog.Destroy gibt tatsächlich die TFont-Instanz wieder frei, es gilt also mein zuletzt gesagtes
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:12 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