![]() |
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 |
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:
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.
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; |
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] |
Re: Methoden im constructor
Hai raptascha,
ersteinmal: Herzlich Willkommen in der Delphi-PRAXIS. Ich verschiebe diesen Beitrag mal nach Object-Pascal. |
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:
Im Übrigen brauchst du in anzeigeText kein inherited anzeigeText aufrufen, da es keine übegeordnete Methode anzeigeText gibt.
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: Und der Befehl
Delphi-Quellcode:
wird dir wahrscheinlich auch nichts bringen, da du Owner ja nur als Parameter im Constructor hattest.
Owner.lblKuecheText.caption:='Ein Glas mit schwebenden Augen';
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