Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Unterschiede, ob eigene Klasse global deklariert wurde? (https://www.delphipraxis.net/87448-unterschiede-ob-eigene-klasse-global-deklariert-wurde.html)

Nikolas 28. Feb 2007 20:26


Unterschiede, ob eigene Klasse global deklariert wurde?
 
Hallo

Ich habe mir diese Klasse angelegt:
Delphi-Quellcode:
CStunde = class(Tobject)
 public
 Panel: TPanel;
 list: array[1..4] of TLabel;
 procedure Create(t,l,h,w: integer; form: TForm);

end;
(Hat noch keine Lösch-Methode, aber das Problem gehe ich später an. )

Delphi-Quellcode:
Procedure CStunde.create(t,l,h,w: integer; Form: TForm);
var
i: byte;
begin

Panel := TPanel.Create(nil);

 with Panel do
  begin
  Parent:= Form;
  Top:= t;
  ...
  color:=clred;
  end;

for i:=1 to 4 do
  begin
  list[i]:= TLabel.create(nil);
  list[i].Parent:= Panel;
  list[i].left:= 10;
  end;
end;
Wenn ich das Create mit
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
sp: CStunde;
begin
sp.Create(50,50,200,250,Form1);
end;
aufrufe wird das Panel mit den Labels schön angezeigt, wenn ich das Formular schließe bekomme ich eine AV, was wahrscheinlich am fehlenden destroy oder free liegt, aber dass ist nicht mein primäres Problem.

Wenn ich es aber als
Delphi-Quellcode:
var
  Form1: TForm;
  sp: CStunde;
global anlege bekomme ich beim create dann eine AV.

Weiss jemand, warum dass so ist und wie ich es trotzdem global anlegen kann?

Nikolas

xaromz 28. Feb 2007 20:31

Re: Unterschiede, ob eigene Klasse global deklariert wurde?
 
Hallo,

vielleicht, weil Du Deine Klasse nicht instanziierst?

Gruß
xaromz

mkinzler 28. Feb 2007 20:38

Re: Unterschiede, ob eigene Klasse global deklariert wurde?
 
Delphi-Quellcode:
sp := CStunde.Create(50,50,200,250,Form1);

Nikolas 28. Feb 2007 20:49

Re: Unterschiede, ob eigene Klasse global deklariert wurde?
 
Stimmt, klingt einleuchtend. Und eigentlich weiss ich das auch. (Siehe Create-implementation)

Wenn ich das jetzt aber so mache bekomme ich unabhängig von der Art der Deklaration von sp ein freundliches:
Zitat:

E2076 Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt
Versteht das jemand?

Danke für die Antworten bis jetzt. :thumb:

Kedariodakon 28. Feb 2007 20:50

Re: Unterschiede, ob eigene Klasse global deklariert wurde?
 
Nein, erst wenn er einen Constructor erstellt, also:

Delphi-Quellcode:
Type
  CStunde = class(Tobject)
  Public
    Panel: TPanel;
    list: array[1..4] of TLabel;
    Constructor Create(t,l,h,w: integer; form: TForm);
  End;
{...}
Bye Christian

mkinzler 28. Feb 2007 20:53

Re: Unterschiede, ob eigene Klasse global deklariert wurde?
 
Stimmt, haben wir wohl Alle übersehen.

Nikolas 28. Feb 2007 20:54

Re: Unterschiede, ob eigene Klasse global deklariert wurde?
 
Dankeschön. Ich habe anscheined zu lange nichts richtiges mehr programmiert. :mrgreen:

Danke an alle, die mir weitergeholfen haben. Ich liebe dieses Forum :dancer:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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