![]() |
Sichtbarkeit von Klasseneigenschaft
Hallo liebes Forum,
ich habe vor längerer Zeit eine im Internet gefundene Klasse zum nachträglichen Hinzufügen von OnMouseEnter- und OnMouseLeave-Events für TImage in meinen Quelltext eingebaut. Alles funktionierte wunderbar, bis ich die Strukturen, die die TImage enthalten, in eine neue Unit auslagern musste. Mir kommt es irgendwie so vor, als ob die nachträglich definierten Klasseneigenschaften für TImage nicht mehr sichtbar sind und von der originären TImage-Klasse überlagert werden. Könnt ihr mir da weiterhelfen? Hier der grobe Quellcode der beiden Units:
Delphi-Quellcode:
unit AppManager;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, IniFiles, Spin, Menus, TypeDef; type TImage = class(ExtCtrls.TImage) private FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; procedure CMMouseEnter(var Msg: TMessage);message CM_MOUSEENTER; procedure CMMouseLeave(var Msg: TMessage);message CM_MOUSELEAVE; public property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; end; TForm1 = class(TForm) procedure MapNVisu; private { Private declarations } procedure DoOnEnter(Sender: TObject); procedure DoOnLeave(Sender: TObject); public { Public declarations } end; var Form1 : TForm1; ProgTupels : array of array of TProgTupel_type; implementation {$R *.dfm} procedure TImage.CMMouseEnter(var Msg: TMessage); begin if Assigned(FOnMouseEnter) then FOnMouseEnter(self); Msg.Result := 0; end; procedure TImage.CMMouseLeave(var Msg: TMessage); begin if Assigned(FOnMouseLeave) then FOnMouseLeave(self); Msg.Result := 0; end; procedure TForm1.DoOnEnter(Sender: TObject); var SenderName : string; begin //dosomething end; procedure TForm1.DoOnLeave(Sender: TObject); var SenderName : string; begin //dosomething end; procedure TForm1.MapNVisu; var r, c : Integer; begin for r := 1 to 10 do begin for c := 1 to 10 do begin ProgTupels[r][c].Icon := TImage.Create(Form1); ProgTupels[r][c].Icon.Parent := Self; ProgTupels[r][c].Icon.OnMouseEnter := DoOnEnter; ProgTupels[r][c].Icon.OnMouseLeave := DoOnLeave; end; end; end; end.
Delphi-Quellcode:
unit TypeDef;
interface uses ExtCtrls, StdCtrls; type TProgTupel_type = record ProgID : Integer; Icon : TImage; La : TLabel; end; implementation end. |
Re: Sichtbarkeit von Klasseneigenschaft
Da in der Unit TypeDef noch keine Neudeklaration von TImage zu sehen ist, ist das im Record verwendete TImage natürlich das aus ExtCtrls.
Abhilfe: Lege eine neue Unit (z.B. MyImage.pas) an und verlagere deine TImage-Ableitung dorthin. Dann musst du in überall wo du dein TImage benutzen willst nur MyImage nach ExtCtrls in die Uses-Klausel schreiben. Eins noch: Da du das TImage nicht registrierst, werden alle TImage, die aus einer DFM geladen werden, dem Typ ExtCtrls.TImage entsprechen und nicht deinem TImage! |
Re: Sichtbarkeit von Klasseneigenschaft
Oder um dem Problem gleich vorzubeugen, die Klasse anders nennen, z.B. TExtImage oder TMyImage.
|
Re: Sichtbarkeit von Klasseneigenschaft
Zitat:
|
Re: Sichtbarkeit von Klasseneigenschaft
Sowas hab ich auch schonmal genutzt, damit ich Änderungen in die VCL reinbekomm, ohne gleich einen neuen Typ zu registrieren.
Du mußt (wie schon sozusagen) erwähnt wurde, überall wo deine Änderung wirksam sein soll deine Klassendefinition vorher einbinden ... also eine Unit erstellen, dort dein TImage definieren und überall wo es benötigt wird deine Unit möglichst als letzes in die Uses-Klausel aufnehmen. |
Re: Sichtbarkeit von Klasseneigenschaft
Vielen Dank für eure Antworten! Habe es entschärfen können.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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