Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Properties im Published-Abschnitt für den OI "unsichtbar" (https://www.delphipraxis.net/35471-properties-im-published-abschnitt-fuer-den-oi-unsichtbar.html)

Wheelie 7. Dez 2004 18:19


Properties im Published-Abschnitt für den OI "unsichtba
 
Hi!

Habe im Published-Abschnitt meiner Pendelkomponente einige Properties. Zwei davon sollen im Objektinspektor nicht sichtbar sein. Unter "private" kann ich sie allerdings nicht deklarieren, da dann die Zuweisungsreihenfolge der unterschiedlichen Parameter beim Compilieren nicht mehr eingehalten wird.

Delphi-Quellcode:
  published
    { Published-Deklarationen }

    property AutoMassstab: Boolean read FAutoMassstab write SetAutoMassstab;
    property Pendellaenge: Double read l write SetPendellaenge;

    property PixelInMeter: Double read FMassstab write SetMassstab; // Unsichtbar im OI
    property PixelLaenge: Integer read Laenge write SetPixelLaenge; // Unsichtbar im OI

    property Fallbeschleunigung: Double read g write SetFallbeschl;
    property Koerperradius: Byte read radius write SetRadius;
    property Amplitude: Byte read FAmplitude write SetAmplitude;
    property Startposition: TStartposition read FStartposition write SetStartposition;
    property Aktiv: Boolean read FAktiv write FAktiv;
    property Masse: Double read m write SetMasse;
    property Ansicht: TAnsicht read FAnsicht write SetAnsicht;

Pseudemys Nelsoni 7. Dez 2004 18:24

Re: Properties im Published-Abschnitt für den OI "unsic
 
ich versteh dein problem ehrlich gesagt nicht, was meinst du mit :

Zitat:

Unter "private" kann ich sie allerdings nicht deklarieren, da dann die Zuweisungsreihenfolge der unterschiedlichen Parameter beim Compilieren nicht mehr eingehalten wird.
welche zuweisungsreihenfolge?

jim_raynor 7. Dez 2004 18:25

Re: Properties im Published-Abschnitt für den OI "unsic
 
Zitat:

Zitat von Wheelie
Unter "private" kann ich sie allerdings nicht deklarieren, da dann die Zuweisungsreihenfolge der unterschiedlichen Parameter beim Compilieren nicht mehr eingehalten wird.

:wiejetzt: das verstehe ich irgendwie nicht.

Es gibt auch den public Abschnitt. Diese sind öffentlich, werden aber nicht im OI angezeigt.

Wheelie 7. Dez 2004 19:59

Re: Properties im Published-Abschnitt für den OI "unsic
 
also das mit der "zuweisungsreihenfolge" ist echt nicht so einfach zu erklären. grundsätzlich legt der anwender meiner komponente zur entwurfszeit verschiedene eigenschaften fest. unter anderem entscheidet er sich auch, ob das pendel einen automatischen massstab besitzen soll oder nicht (property AutoMassstab: Boolean read FAutoMassstab write SetAutoMassstab;). wenn er nun F9 drückt wird die klasse neu instanziert und delphi weist diesem neuen objekt die vom benutzer festgelegten eigenschaften nacheinander zu, und zwar genau so, wie sie im published-abschnitt vorkommen -> zuerst AutoMassstab, dann Pendellaenge etc. allerdings werden NUR die properties des published-abschnitts zugewiesen (logisch, denn nur die kann der anwender verändert haben). properties im private-abschnitt werden erst gar nicht zugewiesen und selbst wenn, dann würde die von mir erwähnte zuweisungsreihenfolge nicht mehr stimmen, denn bevor der komponente die PixelLaenge übergeben wird, muss sie wissen, ob sie auch auf den AutoMassstab achten muss.

Muetze1 7. Dez 2004 20:06

Re: Properties im Published-Abschnitt für den OI "unsic
 
Moin!

Ist doch auch ganz klar warum: Properties die in der DFM vermerkt werden und von Delphi gesetzt werden anhand der DFM Werte müssen published sein - alle anderen beachtet der OI eh nicht. Daher ist auch eine property im published Bereich die nicht öffentlich sein soll (also im OI) sinnlos, weil du sie eh nicht verändern kannst im OI und somit kommen die Veränderungen an diesen Properties (wie auch immer du diese zur Designzeit bewerkstelligen willst) auch nicht in die DFM...

MfG
Muetze1

SirThornberry 7. Dez 2004 20:29

Re: Properties im Published-Abschnitt für den OI "unsic
 
@Muetze: Ich muss dich leider enttäuschen, du kannst dich nicht darauf verlassen das die Properties dann in alphabeticher Reihenfolge gesetzt werden, du solltest deine Komponenten so schreiben das es egal ist welches Property zuerst gesetzt wird.

iCode4You 7. Dez 2004 20:39

Re: Properties im Published-Abschnitt für den OI "unsic
 
Hallo überschreibe doch einfach folgende Procedure von TComponent:

Delphi-Quellcode:
    procedure Loaded; virtual;
überschreiben:

Delphi-Quellcode:
 
TYourComp = class(TComponent)
protected
  procedure Loaded; override;
end;
damit kannst du die abhängigkeiten lösen !

Pseudemys Nelsoni 7. Dez 2004 20:41

Re: Properties im Published-Abschnitt für den OI "unsic
 
Zitat:

properties im private-abschnitt werden erst gar nicht zugewiesen
kannst doch im OnCreate deiner Kompo machen, oder?

iCode4You 7. Dez 2004 21:09

Re: Properties im Published-Abschnitt für den OI "unsic
 
hmm... wenn man ein Ereignis OnCreate hat geht das vielleicht auch ansonsten wenns nur ne TComponent ist sollte man loaded nehmen,
ist vor allem mit OldCreateOrder usw. sicherer da Loaded vom Streaming system gerufen wird ...

SirThornberry 7. Dez 2004 21:29

Re: Properties im Published-Abschnitt für den OI "unsic
 
Zitat:

Zitat von iCode4You
hmm... wenn man ein Ereignis OnCreate hat geht das vielleicht

Wer redet von OnCreate? Man kann doch auch einfach den Constructor überschreiben, so ist es zumindest üblich und sowas gehört ja auch in den Constructor.

iCode4You 7. Dez 2004 21:37

Re: Properties im Published-Abschnitt für den OI "unsic
 
äh so langsam fehlt mir der überblick... Die Grundfrage waren doch die abhängigkeiten zwischen einzelnen published props !
und um die zu lösen beim create(durch das streaming) kann man loaded überschreiben oder onCreate wobei ich mir da nicht sicher bin
und private "Fields" können selbstverständlich im Konstruktor vorinitialisiert werden.

tommie-lie 7. Dez 2004 21:54

Re: Properties im Published-Abschnitt für den OI "unsic
 
Hab' ich jetzt 'nen Denkfehler? :gruebel:
Zitat:

Zitat von Wheelie
unter anderem entscheidet er sich auch, ob das pendel einen automatischen massstab besitzen soll oder nicht (property AutoMassstab: Boolean read FAutoMassstab write SetAutoMassstab;). wenn er nun F9 drückt wird die klasse neu instanziert und delphi weist diesem neuen objekt die vom benutzer festgelegten eigenschaften nacheinander zu, und zwar genau so, wie sie im published-abschnitt vorkommen -> zuerst AutoMassstab, dann Pendellaenge etc. allerdings werden NUR die properties des published-abschnitts zugewiesen (logisch, denn nur die kann der anwender verändert haben).

Der Benutzer legt für jedes published Property fest, welchen Wert es haben soll. Das kann er nur im OI machen. Jetzt sollen PixelInMeter und PixelLaenge nicht im OI erscheinen, also kann sie der Anwender auch nicht mit einem bestimmten Wert vorbelegen. Dementsprechend ist es doch vollkommen egal, wann diese beiden Properties mit (ohnehin unsinnigen) Werten gefüllt werden, da sie ja nicht vom Anwender stammen, für dich also vollkommen belanglos sind. Anhand der Namen vermute ich, daß es mit dem Maßstab zusammenhängt, wie wäre es, im OnCreate bei gesetztem AutoMassstab eine passende Größe für die beiden Properties zu berechnen? Ist für mein Verständnis irgendwie egal... Allerdings weiß ich nicht, wie Properties zur Laufzeit gehandhabt werden, ob sie in OnCreate also schon mit sinnvollen Werten belegt sind und ob die entsprechenden Access-Methods aufgerufen werden. :duck: Ansonsten sehe ich aber kein Problem darin, die beiden Properties public zu deklarieren und beim Laden der Komponente anhand des Wertes von AutoMassstab zu berechnen, oder eben nicht.

Ansonsten solltest du auf das Gummibärchen hören, und dafür sorgen, daß es deine Komponente nicht interessiert, welches Property nun zuerst gesetzt wird, zum Bleistift durch On-Demand-Abfrage der Werte (sprich beim Zeichnen auf den Bildschirm, wenn sich nichts mehr ändert). :zwinker:

DP-Maintenance 7. Dez 2004 22:15

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ein delphispezifisches Problem

maximov 7. Dez 2004 22:58

Re: Properties im Published-Abschnitt für den OI "unsic
 
Zitat:

Zitat von iCode4You
äh so langsam fehlt mir der überblick... Die Grundfrage waren doch die abhängigkeiten zwischen einzelnen published props !
und um die zu lösen beim create(durch das streaming) kann man loaded überschreiben oder onCreate wobei ich mir da nicht sicher bin
und private "Fields" können selbstverständlich im Konstruktor vorinitialisiert werden.

Ja. Um temporale abhängigkeiten zu vermeiden bietet es sich tatsächlich an, Loaded zu überschreiben und dort sämtliche vor-berechnungen aufzurufen. Man will aber trotzdem beim setzen der properties aktionen tätigen, aber nicht beim laden - also fragt man das objekt, in den settern, ob es gerade geladen wird

Delphi-Quellcode:
if csLoading in ComponentState then exit;
Und schon ist man nicht mehr abhängig von der streamin-order :mrgreen:

Muetze1 8. Dez 2004 08:53

Re: Properties im Published-Abschnitt für den OI "unsic
 
Moin!

Zitat:

Zitat von SirThornberry
@Muetze: Ich muss dich leider enttäuschen, du kannst dich nicht darauf verlassen das die Properties dann in alphabeticher Reihenfolge gesetzt werden, du solltest deine Komponenten so schreiben das es egal ist welches Property zuerst gesetzt wird.

Ja, und? Was habe ich denn in meinem Beitrag behauptet? Mir ging es um die Sichtbarkeit und auf die Reihenfolge bin ich nicht eingegangen - und bei meinen ist die Reihenfolge immer egal.

Zitat:

Zitat von Pseudemys Nelsoni
Zitat:

properties im private-abschnitt werden erst gar nicht zugewiesen
kannst doch im OnCreate deiner Kompo machen, oder?

Ja, aber dann braucht es auch nicht mehr in die DFM, da es eh immer gesetzt wird.

MfG
Muetze1


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