![]() |
Constructor löscht Entwurfszeitinhalte
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen, ich habe mir eine Komponente gebastelt, welche Images in einem Image darstellt.
Die Komponente liegt im Anhang und funktioniert auch in soweit, dass ich neue Images einfügen, verschieben, und resizen kann. Das Problem ist nur: Wenn ich das Image der TImageInImage Komponente in der Entwurfszeit ändere ist die Änderung zur Laufzeit verschwunden. Ich habe den Verdacht, dass der Constructor beim Starten die Änderungen überschreibt. Der Code zum Benutzen der Komponente lautet:
Delphi-Quellcode:
Zweites Problem: wenn ich
procedure TForm1.FormCreate(Sender: TObject);
var img : TImageInImage_Element; begin img := TImageInImage_Element.Create(ImageInImage1); // img.Image.Picture.LoadFromFile('Bild2.jpg'); ImageInImage1.Images.Add (img); img.Top := 0; img.Left := 0; end;
Delphi-Quellcode:
ausführen lasse, kommt die Fehlermeldung Unbekannte Dateierweiterung .jpg. Wie kann ich das Problem beheben?
img.Image.Picture.LoadFromFile('Bild2.jpg');
Danke für die Hilfe. Gruß Helen |
Re: Constructor löscht Entwurfszeitinhalte
hi,
zu deinem zweiten problem: binde die unit jpeg in deine uses ein ;) aeno |
Re: Constructor löscht Entwurfszeitinhalte
der Construktur kann die Änderungen doch gar nicht überschreiben. Schließlich werden dinge die im Objectinspektor zugewiesen werden (in der DFM gespeichert) erst nach dem creieren und somit erst nach aufruf des Constructors geladen.
|
Re: Constructor löscht Entwurfszeitinhalte
Aber warum gehen die Daten dann verloren?
|
Re: Constructor löscht Entwurfszeitinhalte
Zitat:
Delphi-Quellcode:
Im ersten Beispiel sieht man im Button die im Objektinspektor eingestellte Beschriftung, im zweiten Beispiel die vom Programm geänderte. Änderungen, die im Eventhandler für OnCreate durchgeführt werden, überschreiben immer die im Objektinspektor eingestellten Werte.
constructor TForm1.Create(aOwner: TComponent);
begin Button1.Caption := 'Hallo Welt!'; inherited; end; constructor TForm1.Create(aOwner: TComponent); begin inherited; Button1.Caption := 'Hallo Welt!'; end; Gruß Hawkeye |
Re: Constructor löscht Entwurfszeitinhalte
die Einstellungen die im Objectinspektor getätigt werden werden aber nicht während des Creierens zugewiesen sondern erst nach dem der Constructor abgearbeitet wurde. Denn bevor nicht aus dem Constructor zurück gekehrt wurde ist kein Instanzhandle vorhanden dem man entsprechende Dinge zuweisen kann. Schließlich wird ja mit "instanz.property := value" gearbeitet und solange die instanz nicht bekannt ist (wird ja erst vom Constructor zurück geliefert) kann nix zugewiesen werden. Eine Ausnahme stellt de TForm da weil dort die DFM (Ressource) im Constructor geladen wird.
|
Re: Constructor löscht Entwurfszeitinhalte
Yep, meine Ausführung bezogen sich auch auf TForm, da Helen in ihrem ersten Posting FormCreate ins Spiel brachte. Somit sind wir einer Meinung :)
Gruß Hawkeye |
Re: Constructor löscht Entwurfszeitinhalte
jup, in dem Sinne sind wir dann einer Meinung. In diesem konkreten Beispiel ging es dann darum das seine neue Klasse (welche wohl auf dem Form liegt (zumindest eine instanz davon)) im Konstruktor einstellungen aus der DFM überschreibt. Ich hab die Befürchtung das er denkt im Construktor bereits auf eingenschaften zugreifen zu können die im Objectinspektor (dfm) ingestellt wurden.
|
Re: Constructor löscht Entwurfszeitinhalte
Ich habe mir den Quelltext der Komponente mal angesehen und den Fehler (wahrscheinlich) gefunden. Die Komponente TImageInImage enthält eine Subkomponente vom Typ TImage. Einstellungen an dieser Subkomponente zur Designzeit werden nicht in der .dfm-Datei gespeichert, weil ein Aufruf von SetSubComponent fehlt.
Der Constructor von TImageInImage muß folgendermaßen abgeändert werden:
Delphi-Quellcode:
Gruß Hawkeye
Constructor TImageInImage.Create(AOwner : TComponent);
begin inherited Create(AOwner); _ImageListe := TImageInImage_List.Create (Self); _Image := TImage.Create(Self); _Image.Parent := Self; _Image.Align := alClient; _Image.SetSubComponent(True); // <<-- diese Zeile ist neu! end; |
Re: Constructor löscht Entwurfszeitinhalte
Super!!!
Das hatte gefehlt. Vielen Dank Hawkeye. Gruß Helen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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