AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Constructor löscht Entwurfszeitinhalte

Ein Thema von helen · begonnen am 9. Apr 2006 · letzter Beitrag vom 9. Apr 2006
Antwort Antwort
helen

Registriert seit: 8. Mai 2004
42 Beiträge
 
#1

Constructor löscht Entwurfszeitinhalte

  Alt 9. Apr 2006, 12:45
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:
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;
Zweites Problem: wenn ich img.Image.Picture.LoadFromFile('Bild2.jpg'); ausführen lasse, kommt die Fehlermeldung Unbekannte Dateierweiterung .jpg. Wie kann ich das Problem beheben?

Danke für die Hilfe.
Gruß
Helen
Angehängte Dateien
Dateityp: pas imageinimage_100.pas (4,8 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Constructor löscht Entwurfszeitinhalte

  Alt 9. Apr 2006, 12:48
hi,

zu deinem zweiten problem: binde die unit jpeg in deine uses ein

aeno
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Constructor löscht Entwurfszeitinhalte

  Alt 9. Apr 2006, 12:53
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
helen

Registriert seit: 8. Mai 2004
42 Beiträge
 
#4

Re: Constructor löscht Entwurfszeitinhalte

  Alt 9. Apr 2006, 13:15
Aber warum gehen die Daten dann verloren?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Constructor löscht Entwurfszeitinhalte

  Alt 9. Apr 2006, 13:18
Zitat von SirThornberry:
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.
Das ist nicht ganz richtig, das Laden der .dfm-Datei ist ein Bestandteil des Constructors. Durch ein Überschreiben des Constructors kann man durchaus Änderungen durchführen. Es kommt ganz auf die Reihenfolge der Anweisungen an:

Delphi-Quellcode:
constructor TForm1.Create(aOwner: TComponent);
begin
  Button1.Caption := 'Hallo Welt!';
  inherited;
end;

constructor TForm1.Create(aOwner: TComponent);
begin
  inherited;
  Button1.Caption := 'Hallo Welt!';
end;
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.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Constructor löscht Entwurfszeitinhalte

  Alt 9. Apr 2006, 13:36
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Constructor löscht Entwurfszeitinhalte

  Alt 9. Apr 2006, 13:51
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Constructor löscht Entwurfszeitinhalte

  Alt 9. Apr 2006, 13:54
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Constructor löscht Entwurfszeitinhalte

  Alt 9. Apr 2006, 14:23
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:
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;
Gruß Hawkeye
  Mit Zitat antworten Zitat
helen

Registriert seit: 8. Mai 2004
42 Beiträge
 
#10

Re: Constructor löscht Entwurfszeitinhalte

  Alt 9. Apr 2006, 14:50
Super!!!
Das hatte gefehlt.
Vielen Dank Hawkeye.

Gruß
Helen
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:12 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