AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi von TImage abgeleitete Klasse wird nicht angezeigt

von TImage abgeleitete Klasse wird nicht angezeigt

Ein Thema von ösichemiker · begonnen am 28. Jun 2008 · letzter Beitrag vom 29. Jun 2008
Antwort Antwort
ösichemiker
(Gast)

n/a Beiträge
 
#1

von TImage abgeleitete Klasse wird nicht angezeigt

  Alt 28. Jun 2008, 17:50
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:
constructor myObject.Create(AOwner:TComponent);
begin
  inherited Create(AOwner);
end;
Prozeduren: Move, Draw
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
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: von TImage abgeleitete Klasse wird nicht angezeigt

  Alt 28. Jun 2008, 18:06
.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
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

Re: von TImage abgeleitete Klasse wird nicht angezeigt

  Alt 29. Jun 2008, 07:21
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.
  Mit Zitat antworten Zitat
ösichemiker
(Gast)

n/a Beiträge
 
#4

Re: von TImage abgeleitete Klasse wird nicht angezeigt

  Alt 29. Jun 2008, 08:07
Also ich hab das so gemacht:

Delphi-Quellcode:
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 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.
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: von TImage abgeleitete Klasse wird nicht angezeigt

  Alt 29. Jun 2008, 09:06
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:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#6

Re: von TImage abgeleitete Klasse wird nicht angezeigt

  Alt 29. Jun 2008, 09:10
Hi,

für die Richtung könnte man doch noch eine Enumeration verwenden.
  Mit Zitat antworten Zitat
ösichemiker
(Gast)

n/a Beiträge
 
#7

Re: von TImage abgeleitete Klasse wird nicht angezeigt

  Alt 29. Jun 2008, 10:08
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz