Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aus Komponente auf Namen zugreifen (https://www.delphipraxis.net/72391-aus-komponente-auf-namen-zugreifen.html)

maximus Caesar 29. Jun 2006 17:36


Aus Komponente auf Namen zugreifen
 
Hallo!
Ich schreibe gerade an einer Komponente. Sie ist vererbt von TLabel.
Nun möchte ich den Namen der Komponente auslesen (z.B. Objekt5).
Auf sachen wie z.B. left und Top habe ich zugriff, nur nicht auf Name.
Beispiele:
funzt:
Delphi-Quellcode:
Left:=x;
  Top:=y;
  Font.Color:=schrift;
  Color:=hintergrund;
  Caption:=n;
funktioniert nicht:
Delphi-Quellcode:
n:=Name;
Diese Meldung bekomme ich:
Zitat:

[Fehler] Day.pas(50): E2003 Undefinierter Bezeichner: 'Name'
Kann mir jemand helfen?

mkinzler 29. Jun 2006 17:40

Re: Aus Komponente auf Namen zugreifen
 
Funktioniert self.Name?

maximus Caesar 29. Jun 2006 17:41

Re: Aus Komponente auf Namen zugreifen
 
nein, funktioniert leider nicht. Auch schon probiert.

Edit:
Da kommt dan diese meldung:
Zitat:

[Fehler] Day.pas(50): E2003 Undefinierter Bezeichner: 'self'

mkinzler 29. Jun 2006 17:46

Re: Aus Komponente auf Namen zugreifen
 
Wo befindet sich der Code? (Welche Methode?)

Christian Seehase 29. Jun 2006 17:49

Re: Aus Komponente auf Namen zugreifen
 
Ave,

also wenn ich mir von TLabel eine Kompo ableite (D7)

Delphi-Quellcode:
type
  TMyLabel = class(TLabel)
  public
    constructor Create(AOwner : TComponent); override;
  end;

implementation

constructor TMyLabel.Create(AOwner: TComponent);
begin
  inherited;
  Name := 'TEST';
end;
geht der Zugriff auf Name problemlos.
Wo hast Du es den eingebaut?

maximus Caesar 29. Jun 2006 17:51

Re: Aus Komponente auf Namen zugreifen
 
Hier ein Teil des Codes (nur mit der betroffenen Prozedur):

Delphi-Quellcode:
unit Day;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Graphics;

type
  TDay = class(TLabel)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    procedure rename(name2:String);
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Eigene Objekte', [TDay]);
end;

procedure rename(name2:String);
var i:Integer;
    n:String;
begin
  try
    i:=length(Name2);
    n:=self.name;     <---- Hier ist die Fehlermeldung
    .
    .
    .
    usw.
end;

end.
Hab das ganze mit dem Komponenten Experten erstellt und dann meinen Senf hinzugefügt

Helmi 29. Jun 2006 17:53

Re: Aus Komponente auf Namen zugreifen
 
Hallo,

und funktionierts so:

Delphi-Quellcode:
procedure TDay.rename(name2:String); <---- Hier ist die Änderung
var i:Integer;
    n:String;
begin
  try
    i:=length(Name2);
    n:=Name;     <---- Hier ist die Fehlermeldung <---- Hier ist die Änderung
    .
    .
    .
    usw.
end;

Christian Seehase 29. Jun 2006 17:53

Re: Aus Komponente auf Namen zugreifen
 
Ave,

es muss auch

Code:
procedure [b]TDay.[/b]rename(name2:String);
heissen, sonst deklarierst Du keine Methode der Klasse TDay, sondern einfach eine Prozedur.

mkinzler 29. Jun 2006 17:54

Re: Aus Komponente auf Namen zugreifen
 
Wenn rename eine Methode der klasse wäre, müßte es gehen. Mich wundert aber das er die anderen Eigenschaften so findet. Gibt es vielleicht Variablen mit den Bezeichnungen?

maximus Caesar 29. Jun 2006 17:56

Re: Aus Komponente auf Namen zugreifen
 
nein, gibt es nicht.
Es soll nacher in einem Projekt aufgerufen werden können.
Kann mir jemand schreiben wie ich das umschreiben müsste, damit es funktioniert, und ich es dennoch im Späteren Projekt ausführen kann?

Christian Seehase 29. Jun 2006 18:00

Re: Aus Komponente auf Namen zugreifen
 
Ave,

Helmi und ich haben es Dir doch schon direkt geschrieben, und mkinzler indirekt.

Deine in der Klasse deklarierte Methode Rename benögtigt als Implementierung noch den Präfix des Klassennamens.
Ansonsten könnte der Compiler die ja auch nicht unterscheiden, wenn Du mehrere Klassen in eine Unit zusammenfasst, und diese Methoden mit gleichen Namen haben (z.B., wird man oft Create und Destroy haben).

Das Rename, in dem Du Name benutzen willst, hat nichts mit der oben deklarierten Klasse zu tun.

maximus Caesar 29. Jun 2006 18:05

Re: Aus Komponente auf Namen zugreifen
 
Sorry, hab doch glatt die paar posts übersehen und nur den letzten gelesen :oops:
Danke!
den Fehler hätt ich eigentlich sehen müssen... naja....

maximus Caesar 29. Jun 2006 18:27

Re: Aus Komponente auf Namen zugreifen
 
Irgendwie blick ich grad nimmer durch... schaffs net die zu installieren.
Vorhin gings noch.
Also, ich erstelle ein neues Package, rechtscklick, hinzufügen, wähle meine Unit aus, OK, rechtscklick auf Package Installieren.
Dann kommt ne Meldung des die Komponente registriert worden ist, aber nicht wo, und sie taucht auch nicht in der Liste auf. Was mach ich falsch?

mkinzler 29. Jun 2006 18:38

Re: Aus Komponente auf Namen zugreifen
 
Poste mal den Code der Register-Prozedur.

maximus Caesar 29. Jun 2006 18:42

Re: Aus Komponente auf Namen zugreifen
 
Is der gleiche wie er oben in meinen großen Quellcode Post steht.
Hab daran nichts verändert.

Edit: Das Package taucht in der Liste der Entwurfszeit Packages auf.

mkinzler 29. Jun 2006 18:46

Re: Aus Komponente auf Namen zugreifen
 
Dann müßte die Komponente sich im Bereich 'Eigene Objekte' befinden. Die Komponenten und der Bereich werden nur beim erstmaligen Installieren des Package angezeigt. Beim Aktualisieren werden dann immer nur neu hinzukekommene Kompos angezeigt.

maximus Caesar 29. Jun 2006 18:49

Re: Aus Komponente auf Namen zugreifen
 
und wie kann man komponenten wieder deinstalieren? Vielleicht habe ich dabei einen Fehler gemacht.

Edit: Habs hinbekommen, wird wieder angezeigt!

mkinzler 29. Jun 2006 18:53

Re: Aus Komponente auf Namen zugreifen
 
Einfach das Package deinstallieren


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