Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Eigene Classen (https://www.delphipraxis.net/79392-eigene-classen.html)

smart 21. Okt 2006 16:59


Eigene Classen
 
Hallo Alle!

Ich bin einwenig mit eigenen Classe am spielen. Ich möchte das lernen. Jetzt habe ich auf einer Form ein TEdit und ein TButton. Wenn ich auf dem Button klicke, soll der Text im TEdit erscheinen. Hier der Code. Das man das ganze einfacher machen kann, ist mit bekannt. Das soll nur eine Übung sein. Der Code klappt nicht.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

Type
    TEingabe = Class(TEdit)
    private
    Ein: String;
    Public
    procedure Eingeben(Ein: String);
end;

procedure TEingabe.Eingeben(Ein: String);
begin
Text := Ein;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TEingabe.Eingeben(Button1.Caption);
end;

end.
Was mache ich da falsch?

Grüße
Heike

Ultimator 21. Okt 2006 17:06

Re: Eigene Classen
 
Fehlermeldung wäre nicht schlecht ;)
Aber du musst auch deiner TEingabe-Klasse Konstruktor verwenden (bla := TEingabe.Create(...)).

Muetze1 21. Okt 2006 17:11

Re: Eigene Classen
 
Hallo Heike!

Zitat:

Zitat von smart
Jetzt habe ich auf einer Form ein TEdit und ein TButton. Wenn ich auf dem Button klicke, soll der Text im TEdit erscheinen. Hier der Code. Das man das ganze einfacher machen kann, ist mit bekannt. Das soll nur eine Übung sein. Der Code klappt nicht.

Du hast auf der Form ein Edit und hast eine Klasse (TEingabe) von TEdit abgeleitet. In welchem Edit soll den nun der Text erscheinen? In dem TEdit auf der Form oder in TEingabe (welches bisher noch nirgendwo angezeigt wird)?

Du hast erfolgreich eine Klasse abgeleitet. Diese musst du nun auch noch instanziieren. Bei der Form wird dies automatisch von der VCL in der Projektdatei erledigt, bei deinem eigenem müsstest du dies selber machen. Andere Möglichkeit für dich wäre es dein neues TEingabe-Edit-Feld als Komponente zu installieren, dann könntest du dein TEingabe von oben aus der Palette auf die Form ziehen und dann würde das mit erstellt werden, wenn die Form erstellt wird.

Welchen Weg willst du gehen?

smart 21. Okt 2006 17:17

Re: Eigene Classen
 
Zitat:

Zitat von Muetze1
Du hast erfolgreich eine Klasse abgeleitet. Diese musst du nun auch noch instanziieren. Bei der Form wird dies automatisch von der VCL in der Projektdatei erledigt, bei deinem eigenem müsstest du dies selber machen. Andere Möglichkeit für dich wäre es dein neues TEingabe-Edit-Feld als Komponente zu installieren, dann könntest du dein TEingabe von oben aus der Palette auf die Form ziehen und dann würde das mit erstellt werden, wenn die Form erstellt wird.

Hi Thomas.

Ich möchte alles selber machen, ohne VCL. Aber was ist instanziieren?

Gruß
Heike

Muetze1 21. Okt 2006 17:32

Re: Eigene Classen
 
Zitat:

Zitat von smart
Aber was ist instanziieren?

Eine Instanz einer Klasse anlegen. Dies geschieht im Normalfall durch Aufruf des Constructors, welcher dir eine neue Instanz zurück liefert. Bei deinem Beispiel wäre dies so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  lEingabe: TEingabe; // diese Variable hält dann die Instanz. So wie Edit1 dies für die Instanz von TEdit macht.
begin
  lEingabe := TEingabe.Create(Self);
  lEingabe.Parent := Self;
  lEingabe.Top := 20; // auf der Form positioniere
  lEingabe.Left := 20;

  lEingabe.Eingeben(Button1.Caption);
end;
Durch den Code sollte dein neues TEingabe auf der Form erscheinen (die Instanz). Wenn du den Button1 öfters klickst, erstellt er jedesmal eine Instanz. Nachher liegen halt so viele Instanzen übereinander auf der Position wie du geklickt hast.

Deine Klasse legt ja im allgemeinen alles nötige über Aussehen, Verhalten und Eigenschaften fest. Und die Instanzen sind dann die einzelnen Elemente an sich mit ihren eigenen Eigenschaftswerten, Einstellungen, etc.

Blödes Beispiel, aber ich habe hier gerade soviele rumliegen: Die Klasse TÜberaschungsEi würde die Ü-Eier allgemein beschreiben (rund, Alupapier drumerhum, Schokolade und im inneren ein Plastikei). So, die einzelnen Eier die auf der Stiege im Supermarkt stehen sind Instanzen von TÜberaschunsEi. Jedes Ei hat aber einen unterschiedlichen Inhalt, bei manchen ist mehr oder weniger Schokolade, etc. (ok, der Vergleich ist mies, aber vllt. hilft es...)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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 by Thomas Breitkreuz