Delphi-PRAXiS
Seite 1 von 2  1 2      

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);


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.
Seite 1 von 2  1 2      

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