AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Erstellen einer klasse

Ein Thema von Axxus · begonnen am 24. Okt 2006 · letzter Beitrag vom 26. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#1

Problem beim Erstellen einer klasse

  Alt 24. Okt 2006, 20:20
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:
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.
So Starten geht aber wenn ich dann den RGB wehrt ins edit eintrage und auf den Button drücke dann Kommt folgende Fehlermldung:

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
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Problem beim Erstellen einer klasse

  Alt 24. Okt 2006, 20:24
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;
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Problem beim Erstellen einer klasse

  Alt 24. Okt 2006, 23:16
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
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Problem beim Erstellen einer klasse

  Alt 25. Okt 2006, 12:28
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
var Formelsammlung: TFormelsammlung; gibst Du nur dem Compiler bekannt, dass Du mit einem solchen Objekt zu arbeiten gedenkst; aber sonst passiert hier noch nichts.

Ich hoffe, ich konnte zum Verständnis beitragen. Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#5

Re: Problem beim Erstellen einer klasse

  Alt 25. Okt 2006, 13:23
Zitat von inherited:
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;

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:
procedure TKonsolen_Form.FormDestroy(Sender: TObject);
begin
  Formelsammlung.Free;
end;
Sonst kommt es u.U. zu Speicherlecks...
  Mit Zitat antworten Zitat
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Problem beim Erstellen einer klasse

  Alt 25. Okt 2006, 18:18
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Problem beim Erstellen einer klasse

  Alt 25. Okt 2006, 18:24
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);
Markus Kinzler
  Mit Zitat antworten Zitat
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Problem beim Erstellen einer klasse

  Alt 25. Okt 2006, 18:41
bedeuted das das Fa so waas wie ne variable ist die einene wert annehmen kann??? und Pa nicht???
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Problem beim Erstellen einer klasse

  Alt 25. Okt 2006, 18:47
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
Markus Kinzler
  Mit Zitat antworten Zitat
Axxus

Registriert seit: 3. Okt 2006
212 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Problem beim Erstellen einer klasse

  Alt 25. Okt 2006, 18:56
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???
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:23 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