Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Methoden im constructor (https://www.delphipraxis.net/13866-methoden-im-constructor.html)

raptascha 28. Dez 2003 11:23


Methoden im constructor
 
Hallo!

Also ich habe folgendes Problem:
Ich habe in einer Klasse(geerbt von TImage) einen constructor erstellt. In ihm will ich jetzt das OnClick-Ereignis mit meiner procedure anzeigeText gleichsetzten.
Ih will also , dass immer wenn auf mein Objekt geklickt wird, die procedure anzeigeText ausgeführt wird.
Ich hab keine Plan und suche schon seid Stunden, allerdings ist die Delphi hilfe nicht sonderlich brauchbar.

Hier der Quelltext der Klasse:

Delphi-Quellcode:

unit uTGegenstaende;

interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ExtCtrls, StdCtrls, uTPerson;
type TGegenstand=class(TImage)
   constructor create(Owner: TWinControl; aktName: String; aktxPos,aktyPos:Integer);
   public
  Name: String;
  Bild: TPicture;
  xPos, yPos: Integer;
  Hilfsvar:TGegenstand;
  //procedure anzeigeText; override;
end;

implementation
 constructor TGegenstand.create(Owner: TWinControl; aktName: String; aktxPos,aktyPos:Integer);
  begin
  inherited create(Owner); //ruft TImage auf
  parent:=Owner;
  top:=aktyPos;
  left:=aktxPos;
  Bild:=Picture.Create;
  Bild.LoadFromFile(aktName);
  Picture:=Bild;
  Transparent:=true;
  AutoSize:= True;
  //Hilfsvar.create;
  OnMouseMove:=anzeigeText;

  end;


{
procedure TGegenstand.OnMouseMove;
begin

anzeigeText;
end;


procedure TGegenstand.anzeigeText(Sender:TObject);
begin
inherited anzeigeText;
begin
   //Owner.lblKuecheText.caption:='Ein Glas mit schwebenden Augen';
end;
end;
}

end.


ICH HOFFE, IHR KÖNNT MIR HELFEN!!!
DANKE
GRuß,Natascha

d3g 29. Dez 2003 13:59

Re: Methoden im constructor
 
Bist du in der richtigen Sparte?

Ich hab jetzt schon länger kein Object Pascal programmiert, aber ich würde es so machen:

Delphi-Quellcode:
type
  TGegenstand = class(TImage)
  private
    FAnzeigeText: TNotifyEvent;
  protected
    property anzeigeText: TNotifyEvent read FAnzeigeText write FAnzeigeText;
  { ... }
end;

constructor TGegenstand.Create(Owner: TWinControl; aktName: String; aktxPos, aktyPos: Integer);
begin
  { ... }
  OnMouseMove := FAnzeigeText;
end;

{ ... }

procedure TGegenstand.anzeigeText(Sender: TObject);
begin
  inherited OnMouseMove;
  (Owner as TForm1).blKuecheText.caption:='Ein Glas mit schwebenden Augen';
end;
Der Zugriff auf das Formulat ist aber in meinen Augen alles andere als Objwektorientiert und ziemlich ekelig -- ich würde dir raten, es anders zu machen. Übrigens solltest du dir überlegen, welche Eigenschaften du von TImage schon erbst (Name zum Beispiel) und in der Delphi-Hilfe unter "property" nachlesen.

Nightshade 29. Dez 2003 14:14

Re: Methoden im constructor
 
Das könnte dir auch weiterhelfen :

[df]http://www.delphipraxis.net/internal_redirect.php?t=1698&highlight=sch%F6ne+bu ttons+mouseover[/df]

Sharky 30. Dez 2003 07:42

Re: Methoden im constructor
 
Hai raptascha,

ersteinmal: Herzlich Willkommen in der Delphi-PRAXIS.

Ich verschiebe diesen Beitrag mal nach Object-Pascal.

fenni 30. Dez 2003 09:28

Re: Methoden im constructor
 
Hallo raptascha,

die Delphi-Hilfe sagt, dass du eine Prozedur vom Typ TNotifyEvent brauchst. Solche Prozeduren haben immer nur einen sichtbaren Parameter (Sender vom Typ TObject). Du musst also direkt nach der Klassendeklaration die Prozedur anzeigeText deklarieren, die einem TNotifyEvent entsprechen muss:

Delphi-Quellcode:
type TGegenstand=class(TImage)
    procedure anzeigeText(Sender: TObject);
  private
    ...
  public
    constructor create(Owner: TWinControl; aktName: String; aktxPos,aktyPos:Integer);
  end;

  ...

constructor TGegenstand.Create;
begin
  ...
  OnClick := anzeigeText;
end:
Im Übrigen brauchst du in anzeigeText kein inherited anzeigeText aufrufen, da es keine übegeordnete Methode anzeigeText gibt.

Und der Befehl

Delphi-Quellcode:
Owner.lblKuecheText.caption:='Ein Glas mit schwebenden Augen';
wird dir wahrscheinlich auch nichts bringen, da du Owner ja nur als Parameter im Constructor hattest.

Ich hoffe, das hat dir ein bisschen geholfen! :wink:

MfG
fenni


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