![]() |
Problem beim Erstellen einer klasse
Hi Delphianer
Ich fang grad an ma was mir Klassen zu amchen aber ich komm net weiter seht euch ma den Quelltext an und sagt mir was da falsch ist
Delphi-Quellcode:
So Starten geht aber wenn ich dann den RGB wehrt ins edit eintrage und auf den Button drücke dann Kommt folgende Fehlermldung:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TKonsole_Form = class(TForm) Konsole_Edit: TEdit; Konsole_Memo: TMemo; Konsole_Button: TButton; procedure Konsole_ButtonClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TFormelsammlung = class(TObject) {Variablen} Var_Konsole_Layout_Form_color_Background, Var_Konsole_Layout_Form_color_Background_Change1, Var_Konsole_Layout_Form_color_Background_Change2, Var_Konsole_Layout_Form_color_Background_Change3 : String; {Methoden} Constructor Create; procedure Set_Konsole_Layout_Form_color_Background (Txt: String); function Get_Konsole_Layout_Form_color_Background : String; private { Private-Deklarationen } public { Public-Deklarationen } end; var Konsole_Form: TKonsole_Form; Formelsammlung: TFormelsammlung; Eingabe : String; implementation {$R *.dfm} Constructor TFormelsammlung.Create; begin inherited Create; end; procedure TFormelsammlung.Set_Konsole_Layout_Form_color_Background(Txt: string); begin Var_Konsole_Layout_Form_color_Background := (Txt); Var_Konsole_Layout_Form_color_Background_Change1 := copy(Var_Konsole_Layout_Form_color_Background, 1, 2); Var_Konsole_Layout_Form_color_Background_Change2 := copy(Var_Konsole_Layout_Form_color_Background, 3, 4); Var_Konsole_Layout_Form_color_Background_Change3 := copy(Var_Konsole_Layout_Form_color_Background, 5, 6); Var_Konsole_Layout_Form_color_Background := '$' + Var_Konsole_Layout_Form_color_Background_Change3 + Var_Konsole_Layout_Form_color_Background_Change2 + Var_Konsole_Layout_Form_color_Background_Change1; end; function TFormelsammlung.Get_Konsole_Layout_Form_color_Background; begin Konsole_Form.Color := (stringtocolor (Var_Konsole_Layout_Form_color_Background)); end; procedure TKonsole_Form.Konsole_ButtonClick(Sender: TObject); begin Formelsammlung.Set_Konsole_Layout_Form_color_Background (Konsole_Edit.Text); Formelsammlung.Get_Konsole_Layout_Form_color_Background; end; end. Im Project1.exe ist ein exeption der Klasse EAccesViolation mit der Meldung 'Zugriffsverletzung bei Addresse 004046C8 in Modul 'Project1.exe'. Schreiben von Addresse 00000004' aufgetreten weiß einer was da los is und wie ich das beheben kann???? Danke im Vorraus Axxus |
Re: Problem beim Erstellen einer klasse
Ja. Du musst zunächst eine Instant von TFormelsammlung im OnCreate der Form erzeugen
Delphi-Quellcode:
var
Formelsammlung: TFormelsammlung; ... procedure TKonsolen_Form.FormCreate(Sender: TObject); begin Formelsammlung:= TFormelsammlung.Create; end; |
Re: Problem beim Erstellen einer klasse
jo das wars hab net gewusst das man(n) das noch ma exrta schreiben muss hab gedacht das würde der Constructor erledigen aber der muss anscheinend noch ma extra aufgerufen werden
Danke Leute Axxus |
Re: Problem beim Erstellen einer klasse
Zur Erklärung:
1. Jeder Konstruktor muss aufgerufen werden, entweder automatisch durch Delphi (siehe den Quelltext der Projektdatei) oder manuell durch den Entwickler - siehe Nikolais Hinweis. 2. In aller Regel kann zur Laufzeit nicht mit einer Klasse (also dem Bauplan eines Werkzeugs) gearbeitet werden, sondern nur mit Objekten, die im Arbeitsspeicher tatsächlich vorhanden sind (also einem Werkzeug, das nach dem Bauplan erstellt worden ist). Bevor Du mit einem Objekt - d.h. einer Instanz einer Klasse - arbeitest, musst Du sicherstellen, dass es existiert. 3. Delphi trennt zwischen Deklaration und Implementation. An der Stelle
Delphi-Quellcode:
gibst Du nur dem Compiler bekannt, dass Du mit einem solchen Objekt zu arbeiten gedenkst; aber sonst passiert hier noch nichts.
var Formelsammlung: TFormelsammlung;
Ich hoffe, ich konnte zum Verständnis beitragen. Gruß Jürgen |
Re: Problem beim Erstellen einer klasse
Zitat:
Richtig, aber da der Entwickler bei selbst erzeugten Objekten auch die "Verantwortung" für deren belegten Speicher übernimmt, muß es an geeigneter Stelle auch wieder freigegeben werden:
Delphi-Quellcode:
Sonst kommt es u.U. zu Speicherlecks...
procedure TKonsolen_Form.FormDestroy(Sender: TObject);
begin Formelsammlung.Free; end; |
Re: Problem beim Erstellen einer klasse
Jetzt ma ne frage leute hab ich das oben mit procedure und function richtiig gemacht und kann mir vieleicht einer ma den unterschied verdeutlichen ich hab gelesen das ne function nen Wert zurückgeben muss aber in der procedure oben wird doch genau das gleiche gemacht kann mir das einer noch ma erklären????????
Axxus |
Re: Problem beim Erstellen einer klasse
Wie du schon geschrieben hast: Funktionen haben einen Rückgabewert und Prozeduren keinen.
Delphi-Quellcode:
function Fa(Integer): Boolean; <--Rückgabeparameter
b := Fa( 1); procedure Pa( Integer); Pa(1); |
Re: Problem beim Erstellen einer klasse
bedeuted das das Fa so waas wie ne variable ist die einene wert annehmen kann??? und Pa nicht???
|
Re: Problem beim Erstellen einer klasse
Fa nimmt keinen wert an, sondern gibt einen zurück, genauso wie eine mathematische Funktion.
y=f(x) = x*2; x=1 -> y = 2*1 = 1 x=2 -> y = 2*2 = 4
Delphi-Quellcode:
function f( x: Extended): Extended;
begin result := x*2; end; ... x := 1; y := f(x); //-> y = 1 x := 2; y := f(x); //-> y = 4 |
Re: Problem beim Erstellen einer klasse
ich glaub ic h habs jetzt
f(x) ist also der Platzhalter für result := x*2 und mit wert zurückgeben heißt dann das der rechner für f(x) result := x*2 einsetzt dann wäre result := x*2 der zurückgegebene wert ist das richtig??? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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