![]() |
von TImage abgeleitete Klasse wird nicht angezeigt
Hi
Ich Hab ne Komponente von TImage abgeleitet, ihr ein paar neue Eigenschaften hinzugefügt, n paar neue prozeduren und funktionen beigebracht und den constructor create
Delphi-Quellcode:
Prozeduren: Move, Draw
constructor myObject.Create(AOwner:TComponent);
begin inherited Create(AOwner); end; Funktionen: isMoveable (frage die Eigenschaft Moveable: Boolean ab) Hab das ganze dann compiliert und installiert und ausprobiert --> zur Laufzeit wurde die Komp. nicht angzeigt. Hab dann bei Move-Aufrufen die aktuelle Position der Komponente abgefragt. Die Position hat sich immer korrekt geändert aber die Komp wurde nicht angezeigt (Visible := true!). Kann mir da jemand weiterhelfen mfg ösichemiker |
Re: von TImage abgeleitete Klasse wird nicht angezeigt
.oO(wo wir wieder bei TImage und Zeichnen wären...*rofl*)
wo wird die Komponente nicht engezeigt? auf dem form oder in der toolpalette? //edit ...gut, wenn du von Laufzeit redest, erzeugst du die Komponente sicher zur Laufzeit...hierzu sollte beachtet werden dass das Parent gesetzt wird... Gruß Frank |
Re: von TImage abgeleitete Klasse wird nicht angezeigt
Ich würde die Klasse TImage nicht ableiten, sondern benützen.
Es gibt im Prinzip 3 Möglichkeiten: * Vererbung: du leitest deine Klasse von TImage ab * Aggregation: deine Klasse enthält ein Objekt von Typ TImage * Benützen (acquaintance): deine Klasse benützt ein existierendes Objekt vom Typ TImage In der VCL finden sich alle 3 Varianten. Beispiele: Vererbung wird sehr häufig eingesetzt. Aggreagation: jedes TEdit enthält/besitzt ein TFont-Objekt. Ein TImage enthält ein Objekt der Klasse TPicture. usw. Benützen: TDataSource verweist auf ein TDataset-Objekt. Ein TControl benützt ein TPopupMenu. Es kommt natürlich immer auf das Ziel an. Also erklär' mal, was deine Klasse leisten soll. |
Re: von TImage abgeleitete Klasse wird nicht angezeigt
Also ich hab das so gemacht:
Delphi-Quellcode:
hab das ganze dann installiert (wird in der Komp-Palette angezeigt). aus der komp-Palette auf eine neue form gezogen (Bild zugewiesen) und buttons die verschiedenen richtungen zugewiesen. zur Entwurfszeit wurde die Komponente mit Bild angezeigt. Es wurden auch keine Fehler gemeldet nur als ich es ausprobiert war die Komponente verschwunden.
type
TMovPic = class(TImage) private FMoveable: Boolean; protected public constructor Create(AOwner: TCOmponent); override; procedure Move(direction: Byte); // 1= rechts, 2= links, 3= oben, 4= unten published property Moveable: Boolean read FMoveable write FMoveable default false; end; constructor TMovPic.Create; begin inherited Create(AOwner); end; procedure TMovPic.Move; begin if Moveable = false then Exit; case direction of // wird in die jewielige richtung verschoben end; Hab dann noch jedesmal bei Move die aktuelle Position in die Form-Caption geschrieben. Die hat sich immer richtig geändert. Ich weiß nicht mehr weiter.. @frank: ich erzeuge die Komponente zur entwurfszeit! und dort wird sie ja auch angezeigt... mfg Ösichemiker |
Re: von TImage abgeleitete Klasse wird nicht angezeigt
Moin,
zur Entwurfszeit wählst du den Container für dein Control bewusst (oder unbewusst) aus, wodurch die Eigenschaft Parent entsprechend gesetzt wird. Bei zur Laufzeit erstellten Controls musst du nach dem Aufruf des Konstruktors auch noch den Container bestimmen, der dann dein Control auffordern wird sich zu zeichnen. Also mache, was Frank dir geraten hat:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.ButtonClick(Sender: TObject);
begin with TMovPic.Create(self) do begin Width := 120; Height := 90; Top := 8; Left := 8; Name := NewComponentName('MovPic', self); // Name := 'MovPic1'; Parent := SomePanel; // contemplation advised end; end; |
Re: von TImage abgeleitete Klasse wird nicht angezeigt
Hi,
für die Richtung könnte man doch noch eine Enumeration verwenden. |
Re: von TImage abgeleitete Klasse wird nicht angezeigt
Hab ich eh:
TDirection = (dRechts, dLinks, dOben, dUnten); habs nur nicht hingeschrieben, weil dort ja nicht das Problem liegt... danke für die antworten. Werds mal versuchen.. mfg ösichemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 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