Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - eine Komponente als TImage oder TMemo erstellen?


TheOutlaw - Fr 05.04.13 15:22
Titel: eine Komponente als TImage oder TMemo erstellen?
Mal schauen ob mir jemand helfen kann und ob es überhaupt möglich ist.

Ich würde gerne zur Laufzeit eine Komponente erstellen, die nicht fest von einer anderen abgeleitet wird, sondern ja nach Eigenschaft als TImage oder als TMemo auf der Form dargestellt wird.

Z.B. so

procedure TForm1.Button1Click(Sender: TObject);
var
mycomponent: TMyComponent;
s:string;
begin
mycomponent:=TMyComponent.Create(self);
// s:='c:\xxx\bild.bmp'; // SetData erkennt die Datei und soll nun mycomponent als TImage gestalten
s:='einfach nur ein Text'; // SetData erkennt nur Text und stellt nun mycomponent als TMemo dar.
mycomponent.SetData(s);
// einig nötige public propertys
mycomponent.top:=10;
mycomponent.left:=10;
mycomponent.Parent:=Form1;
mycomponent.visible:=true;
end;

Wie ich eine abgeleitete Komponente schreibe weiß ich, ich steige aber nicht dahinter wie man solch eine mit zwei verschiedenen Darstellungs-Arten schreiben kann :(


Gausi - Fr 05.04.13 15:33

Da würde ich von einem TPanel oder Vergleichbarem ableiten und in dem Setter für s entsprechend ein TMemo oder ein TImage auf diesem TPanel dynamisch erzeugen, was dann die entsprechenden Event-Handler durchgereicht bekommt und sich um die Anzeige kümmert.


TheOutlaw - Fr 05.04.13 15:37

Da sitze man an sowas und such und sucht und sucht und auf die einfachste Idee kommt man einfach nicht... Danke... werde es nun einfach so machen