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 Properties innerhalb eigener Komponente nicht im DFM (https://www.delphipraxis.net/113783-properties-innerhalb-eigener-komponente-nicht-im-dfm.html)

Assertor 14. Mai 2008 17:02


Properties innerhalb eigener Komponente nicht im DFM
 
Hallo,

ich brauch mal kurz Hilfe: Ich möchte innerhalb einer Panelkomponente zwei Images unterbringen. Leider speichert Delphi mir die Properties der TImages jedoch nicht mehr.

Die TImages werden im OI automatisch auch unter "Linkage" gezeigt, die meisten Eigenschaften sind grün hinterlegt.

Delphi lädt in der IDE und bei Ausführung brav vorhandene Properties. Gehe ich jedoch einmal auf DFM-Textansicht und zurück, sind die Properties der HeaderGlyphs weg.

Delphi-Quellcode:
THeaderGlyph = class(TImage)
  private
    FCenterToGradient: Boolean;
    FShowOnlyIfHelpAssigned: Boolean;
    FAutoFadeGlyph: Boolean;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property AutoSize default True;
    property Transparent default True;
    property HelpContext;
    property CenterToGradient: Boolean read FCenterToGradient write FCenterToGradient default False;
    property ShowOnlyIfHelpAssigned: Boolean read FShowOnlyIfHelpAssigned write FShowOnlyIfHelpAssigned default False;
    property AutoFadeGlyph: Boolean read FAutoFadeGlyph write FAutoFadeGlyph default False;
  end;
Und in der Panel Komponente:
Delphi-Quellcode:
THeaderPanel = class(TCustomControl)
  private
    FGlyphLeft: THeaderGlyph;
    FGlyphRight: THeaderGlyph;
    ...
  published
    ...
    property GlyphLeft: THeaderGlyph read FGlyphLeft write FGlyphLeft;
    property GlyphRight: THeaderGlyph read FGlyphRight write FGlyphRight;
  end;
Ich hatte es auch mit Getter/Settern probiert, aber es geht nicht mehr... Wahrscheinlich nur ein Denkfehler.

Gruß Assertor

Edit: Besserer Titel, da es primär ja nicht nur im TImage geht.

Fussball-Robby 14. Mai 2008 17:04

Re: Problem mit TImage innerhalb eigener Komponente
 
Wird keine Eigenschaft mehr gespeichert oder nur bestimmte? Möglicherweise haben die Eigenschaften den angegebenen Default-Wert, dann werden sie nämlich nicht gespeichert.

Assertor 14. Mai 2008 17:07

Re: Problem mit TImage innerhalb eigener Komponente
 
Hi Robby,

Nein es geht z.B. um eingefügte Bilder (in der DFM Textansicht wäre das z.B. GlyphLeft.Picture.Data)...

Gruß Assertor

mkinzler 14. Mai 2008 17:42

Re: Properties innerhalb eigener Komponente nicht im DFM
 
Oder die Eigenschaft ist not stored

Assertor 14. Mai 2008 17:46

Re: Properties innerhalb eigener Komponente nicht im DFM
 
Hallo,

nein, es ist kein Default und kein Stored Problem. Hab auch schon die Sourcepfade geprüft, Extensions deaktiviert, die BPL gelöscht und neuerstellt...

Diese "Linkage" gefällt mir nicht, denn die Objektinstanz ist ja im lokalen Scope der Panel-Klasse, also nicht zu anderen Objekten gelinkt...

Vor allen Dinge: Vorhandene Picture.Data werden geladen, aber nach Visual/Text-DFM Switch verschwinden diese auch.

Ich vermute ein Problem darin, dass ich das ganze TImage-Derivat per Read/Write als published property verfügbar mache. Vor allen Dingen, warum sind alle Properties im OI grün :?:

Komische IDE...

Gruß Assertor

FAlter 14. Mai 2008 17:58

Re: Properties innerhalb eigener Komponente nicht im DFM
 
Hi,

du sagst, dass sie nur verschwinden, wenn du per IDE dir die Textansicht anzeigen lässt? Hast du dir die DFM schon mal so angesehen, ohne IDE? Möglicherweise ist das ein IDE-Bug, denn ansonsten wären sie ja auch zur Laufzeit weg bzw. nach speichern und neu laden des Projekts. Du sagst aber, dass sie zur Laufzeit angezeigt werden.

Verwende doch TPicture und zeichne die Bilder per Hand auf das Panel.

[edit] Und warum als write-property? Dein passt nicht zu dem, was ich mir jetzt vorstelle, was du eigentlich willst. Eventuell liegts auch daran, dann ist es as designed - Verhinderung der Doppeltspeicherung der Daten. Mach lieber ein read-only draus, ich glaube, das willst du.[/edit]

Mfg
FAlter

Assertor 14. Mai 2008 18:02

Re: Properties innerhalb eigener Komponente nicht im DFM
 
Ja, die Anzeige klappt, solange die Property im DFM liegt.

Die DFMs hab ich mir schon im Editor (Notepad++) angesehen, alles ok soweit...

Wenn ich jetzt aber ein neues Form nehme, die Panel-Komponente draufschmeiß und ein Bild hinzufüge, ist es nur solange da, bis ich zu Text-DFM wechsel bzw. die IDE schliesse.

Hier ist dann kein Glyph.Picture.Data im DFM gespeichert... :roll:

Ich probier das jetzt mal mit TPicture, wobei ich ja Gründe hatte TImage mit Write zu wählen - die Images sollen nachträglich veränderbar sein...

Ich teste das mal kurz.

Gruß Assertor

P.S.: Freu mich weiter über Ideen bzgl. Linkage und grünen Properties
P.P.S.: Roter Kasten ;)

SirThornberry 14. Mai 2008 18:06

Re: Properties innerhalb eigener Komponente nicht im DFM
 
kannst du mal Quelltext zeigen? Und hab ich es richtig verstanden das dein TImage Property Read und Write Methoden hat?

FAlter 14. Mai 2008 18:08

Re: Properties innerhalb eigener Komponente nicht im DFM
 
Hi,

bist du sicher, dass du die Images austauschen willst? Oder nur Image.Picture ändern willst? Bei letzterem solltest du es als read-only machen. Die Instanzen erzeugst du dann natürlich im Konstruktor deines Panels.

Probier einfach mal, das write wegzunehmen. Wenn du Glück hast, läuft dann alles wie gewünscht. Ansonsten müsste es ja auch bei TLabelledEdit Probleme geben.

Mfg
FAlter

SirThornberry 14. Mai 2008 18:11

Re: Properties innerhalb eigener Komponente nicht im DFM
 
solange du bei dem Property Write definiert hast wird nicht der inhalt des Properties gespeichert sondern nur das Property selbst (also ein anderes Image wenn du eins zuweist)


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