Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigenschaften aus dem OI in "Create" benutzen (https://www.delphipraxis.net/78288-eigenschaften-aus-dem-oi-create-benutzen.html)

TheMiller 2. Okt 2006 15:34


Eigenschaften aus dem OI in "Create" benutzen
 
Schon wieder ich..

komme mir schon fast blöd vor, aber habe wieder eine kleine Frage:

Ich habe eine Eigenschaft im OI (published) deklariert und einen Pfad zum Bild angegeben. Doch diese Variable ist zum Zeitpunkt "Constructor TImageButton.Create(..)" nicht verfügbar und im Paint kann ich das Bitmap nicht laden, weil es sonst durch das ständige neu Laden flimmern würde. Wie müsste der Code richtig sein?

Achja: Gebe ich im constructor einen Pfad (statisch) ein, klappt alles. Die Variable ist wirklich zu diesem Zeitpunkt leer. hier mein Code

Delphi-Quellcode:
  private
    { Private-Deklarationen }
    imgnormal: String;
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
  published
    { Published-Deklarationen }
    property ImageNormal: String read imgnormal write imgnormal;
  end;

  [..]

  constructor TImageButton.Create(AOwner: TComponent)
  begin
    inherited Create(AOwner);
    Glyph.loadFromFile(imgnormal);
  end;
Danke!

Bernhard Geyer 2. Okt 2006 15:44

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Schreibe eine Setter-Methode für ImageNormal:

Delphi-Quellcode:
property ImageNormal: String read imgnormal write SetImageNormal;
und dort kannst Du das gewünschte erledigen.

Dax 2. Okt 2006 15:49

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Oder pack den Code, der die persistenten Eigenschaften einer Komponente benötigt, in die AfterConstruction-Methode ;)

TheMiller 2. Okt 2006 15:50

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Hm... :gruebel:

Was ist eine "Setter-Methode"?

Bernhard Geyer 2. Okt 2006 15:56

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Zitat:

Zitat von DJ-SPM
Was ist eine "Setter-Methode"?

Eine Methode die Aufgerufen wird wenn das Property gesetzt wird. Damit können z.B. Range-Checks und Validierungen durchgeführt werden.

mkinzler 2. Okt 2006 15:57

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Eine Methode die bei der Property hinterlegt werden kann, in welcher man die übergeben Werte prüfen und entscheiden kann, ob man sie in den privaten member übernimmt.

Delphi-Quellcode:
procedure SetImageNormal( Value: string);
begin
   if ...
      imgnormal := Value;
end;

TheMiller 2. Okt 2006 16:01

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Puh.. kannst du mir da mal bitte ein Beispiel zeigen.

Habe die Prozedur

Delphi-Quellcode:
protected
  procedure AfterConstruction; override;

[..]

procedure TImageButton.AfterConstruction;
begin
  inherited;
  ShowMessage('SD');
  Glyph.LoadFromFile(imgnormal);
end;
Aber das hat auch nicht geholfen

TheMiller 2. Okt 2006 17:15

Re: Eigenschaften aus dem OI in "Create" benutzen
 
So, hab's jetzt auch nochmal mit der Prozedur

Delphi-Quellcode:
procedure TImageButton.SetImageNormal( Value: string);
begin
  imgnormal := Value;
  Glyph.LoadFromFile(imgnormal);
end;
probiert, aber ich weiß nicht, wann ich die Aufrufen muss. Der Wert "imgnormal" ist allerdings auch leer.

mkinzler 2. Okt 2006 17:20

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Du hast das mißverstanden. diese Methode wird aufgerufen, wenn du im oi einen Pfad zuweist. dieser wird dann in der dfm gespeichert und wird beim Erzeugen der form dann herangezogen.

TheMiller 2. Okt 2006 17:27

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Okay,

klingt logisch! Und wie kann ich diese Methode bei dir Property hinterlegen oder geschieht dies automatisch und im Quelltext reicht einfach dieser Code

Delphi-Quellcode:
procedure TImageButton.SetImageNormal(Value: string);
begin
      imgnormal := Value;
end;
mit der Deklaration in "protected"

Delphi-Quellcode:
procedure SetImageNormal(Value: String);

mkinzler 2. Okt 2006 17:31

Re: Eigenschaften aus dem OI in "Create" benutzen
 
http://www.delphipraxis.net/internal...=619799#619799

TheMiller 2. Okt 2006 17:37

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Joa, so habe ich das auch gemacht. Das funktioniert aber auch nicht. Hier mal wieder die komplette .pas

negaH 2. Okt 2006 18:07

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Der Aufwand ist ein bischen komplexer, lohnt sich aber.

1. überschreibe Methode .Loaded; deiner Komponente
2. schreibe eine Methode wie .LoadImage;
3. wenn sich der FileName ändert rufe .LoadImage; auf
4. in Metode .Loaded; rufe .LoadImage; auf
5. in Methode .LoadImage; nun folgendes

Delphi-Quellcode:
if csLoading in ComponentState then Exit;
... blabla hier Bild laden
Jedesmal wenn eine Komponente aus einer DFM geladen wird oder durch den OI kopiert wird, steht ComponentState auf csLoading. Nach diesem Streaming der VCL wird für alle Komponenten die dynamische Methode .Loaded; aufgerufen. Das ist der ideale Ort um nun dein Image zu laden, da sichergestellt ist das abhängige Properties deiner Komponente alle korrekt initialisiert wurden.

Gruß Hagen

TheMiller 2. Okt 2006 18:12

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Das werde ich mal ausprobieren. Danke Dir

TheMiller 2. Okt 2006 19:17

Re: Eigenschaften aus dem OI in "Create" benutzen
 
Funktioniert Prima!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 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