Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kein Fehler obwohl Objekt nicht erstellt !? (https://www.delphipraxis.net/36024-kein-fehler-obwohl-objekt-nicht-erstellt.html)

jfheins 14. Dez 2004 20:18

Re: Kein Fehler obwohl Objekt nicht erstellt !?
 
Mir ging es um das TFont-Feld des Records, und warum man
Delphi-Quellcode:
MsgRecord.Font := FontDialog1.Font;
schreiben kann, ohne ein AV zu bekommen.
Thx to jim_raynor und die anderen ...

Ach ja,
Zitat:

Zitat von Luckie
Ja, wo ist denn da das Problem? TFont ist doch auch nur ein Datentyp, wie jeder andere auch und keine Klasse. :gruebel:

Das ich sowas noch erleben darf :mrgreen:
In meinem Delphi steht folgendes:
TFont = class(TGraphicsObject)
private
{...}
Na wenn das keine Klasse ist ...

Luckie 14. Dez 2004 20:20

Re: Kein Fehler obwohl Objekt nicht erstellt !?
 
Oh verdammt, da habe ich mich wohkl vertan. :oops: :duck:

Aber du kannst dich auch mal kalrer ausdrücken um was es dir eigentlich geht.

jim_raynor 14. Dez 2004 20:22

Re: Kein Fehler obwohl Objekt nicht erstellt !?
 
Zitat:

Zitat von Luckie
Oh verdammt, da habe ich mich wohkl vertan. :oops: :duck:

Aber du kannst dich auch mal kalrer ausdrücken um was es dir eigentlich geht.

:gruebel: Dax und ich haben es doch von Anfang an verstanden :mrgreen: Also so schlimm war es garnicht.

Sanchez 14. Dez 2004 20:28

Re: Kein Fehler obwohl Objekt nicht erstellt !?
 
Hallo,

Wenn das hier
Delphi-Quellcode:
MsgRecord.Font := FontDialog1.Font;
eine AV liefern würde, dann müsste das hier
Delphi-Quellcode:
var EinFont : TFont;
begin
  EinFont := TFont.Create;
end;
genauso eine AV liefern. In beiden Fällen weisst du einer Variable, die vorher ins Nirvana zeigte einen gültigen Wert zu.
Warums sollte das einen Fehler liefern?

grüße, daniel

Robert_G 14. Dez 2004 20:31

Re: Kein Fehler obwohl Objekt nicht erstellt !?
 
Zitat:

Zitat von Sanchez
In beiden Fällen weisst du einer Variable, die vorher ins Nirvana zeigte einen gültigen Wert zu.
Warums sollte das einen Fehler liefern?

Falls ich das Drunter&Drüber richtig gedeutet habe ist nicht mehr die Zuweisung sein Problem sondern das Freigeben.
War aber auch nur ein Blick in die trübe Kristallkugel. :gruebel:

tommie-lie 14. Dez 2004 20:36

Re: Kein Fehler obwohl Objekt nicht erstellt !?
 
Zitat:

Zitat von Robert_G
Falls ich das Drunter&Drüber richtig gedeutet habe ist nicht mehr die Zuweisung sein Problem sondern das Freigeben.

Nein, Julius ging's erstmal um's Zuweisen, das mit dem Freigeben habe ich ins Spiel gebracht :mrgreen:

P.S.: Jaaaaaa, ich habe es geschafft, ich habe wenigstens einen verwirrt! :mrgreen:

Robert_G 14. Dez 2004 20:46

Re: Kein Fehler obwohl Objekt nicht erstellt !?
 
Zitat:

Zitat von tommie-lie
P.S.: Jaaaaaa, ich habe es geschafft, ich habe wenigstens einen verwirrt! :mrgreen:

Kunststück :roll: Bei meinem biblischen Alter verwirrt mich schon ein An/Aus-Knopf (An oder aus, an oder aus, ... ? :gruebel: ) :mrgreen:

Luckie 14. Dez 2004 20:47

Re: Kein Fehler obwohl Objekt nicht erstellt !?
 
-> :warn:

berens 25. Sep 2006 10:10

Re: Kein Fehler obwohl Objekt nicht erstellt !?
 
Um das Problem nochmals aufzugreifen (ich stehe nämlich vor selbigen):

Delphi-Quellcode:
function Font_GetFontFromUser(_Font: TFont): TFont;
var
  FD: TMyFontDialog;
begin
  Result := NIL;
  FD := TMyFontDialog.Create(NIL);
  try
    FD.Font := _Font;
    if FD.Execute then begin
      Result := FD.Font;
    end;
  finally
    FreeAndNil(FD);
  end;
end;
Ich habe eine globale Variable vom Typ TFont die ich beim Aufrufen dieser Funktion übergebe und auch wieder zuweise, also in der Form
Delphi-Quellcode:
  FfntBla := Font_GetFontFromUser(FfntBla);
Aber kurze Zeit (nicht direkt!) nachdem ich diese Funktion aufgerufen habe, sind die Werte von FfntBla.Name, FfntBla.Size etc. in der "Liste überwachter Ausdrücke" ungültig. Vermutete Ursache ist -wie hier schon angesprochen-, dass mit FreeAndNil auch meine globale Schrift freigegeben wird.

Als Abhilfe hatte ich folgendes angedacht:
Delphi-Quellcode:
 
function Font_GetFontFromUser(_Font: TFont): TFont;
var
  FD: TMyFontDialog;
  DummyFont: TFont;
begin
  Result := NIL;
  FD := TMyFontDialog.Create(NIL);
  try
    DummyFont := FD.Font
    FD.Font := _Font;
    if FD.Execute then begin
      Result := FD.Font;
    end;
    FD.Font := DummyFont;
  finally
    FreeAndNil(FD);
  end;
end;
Leider besteht dummerweise das Problem und die globale Variable wird freigegeben, obwohl das afaik nicht sein durfte!

Vielen Dank für schnelle Antworten!

Sascha L 25. Sep 2006 10:54

Re: Kein Fehler obwohl Objekt nicht erstellt !?
 
Das Problem ist, dass du nur den Pointer setzt und somit ist auch klar, dass FfntBla auf nichts zeigt, wenn du das Ziel frei gibst.

Du musst also Assign verwenden!

Delphi-Quellcode:
FfntBla.Assign(Font_GetFontFromUser(FfntBla));


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

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