This kind of property can't be published > was meint erda

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

This kind of property can't be published > was meint erda

Beitrag von pluto »

Hallo,
habe ein seltsammens problem.
mit folgender klasse:

Code: Alles auswählen

TTest = class(TComponent)
  private
    fName:String;
    FVisible:Boolean;
    fBrush:Tbrush;
    procedure SetSichtbarkeit(Value:Boolean);
    function GetSichtbarkeit:Boolean;
  public
  published
    property name:String read fname write FName;
    property sichtbar:Boolean read GetSichtbarkeit write Setsichtbarkeit default True;
    property brush:TBrush read Fbrush write fBrush;
  end;

wenn ich jetzt die eigenschaft position:tpoint einfüge und zwar so:
property brush:TPoint read fPosition write fPosition;

und in private dann Fposition:TPoint defnieren bekomme ich d ie obengenannte fehlermeldung... was mache ich falsch ????

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: This kind of property can't be published > was meint

Beitrag von theo »

pluto hat geschrieben:was mache ich falsch ????


nimm's mal unter public, nicht published.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Warum diese Eigenschaft nicht unter published stehen darf hätt mich trotsdem mal interessiert.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Christian hat geschrieben:Warum diese Eigenschaft nicht unter published stehen darf hätt mich trotsdem mal interessiert.


Hat mit RTTI und TPersistent zu tun.

"The main problem is that the ObjectIns[pecotr requires
that RTTI (Run Time Type Information) be generated for what it is trying to
display. Records though do not get RTTI generated for them so they can't be
published and show up on the OI. TPersistent descendants know how to stream out
their published proeprties which is why it is the best place to decend from. "

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

ich kann leider kein englisch... steht in diesen text eine lösung?

weil ich nutze die TIPropertyGrid1 und jetzt habe ich den Tpoint unter public gestellt und sie werden nicht mehr angezeigt.... sie werden nur unter published angezeigt.... kann mir jemmand sagen warum ?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

@pluto
wo sollen die denn angezeigt werden ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:ich kann leider kein englisch... steht in diesen text eine lösung?


Ein bisschen englisch lernen würde ich dir als Programmierer schon empfehlen, sonst verpasst du die Hälfte der Informationen. ;-)

Die einfachste Lösung wäre den TPoint in zwei Properties X und Y aufzulösen.
Alles andere ist ein bisschen komplizierter.

Etwas mehr Informationen über das "warum" erhältst du hier:
http://wiki.lazarus.freepascal.org/Stre ... ponents/de
Siehe: Streambare Eigenschaften

Published Properties müssen im Formular gespeichert werden können, und das geht eben ohne weiteres nur mit den dort beschriebenen Typen.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

aber in delphi geht das doch auch ?

ich habe eine klasse Tpoint2 erzeugt und dort x und y reingeschrieben als interger... allerdings wird sie im OI nicht angezeigt....
ps:
ich versuche schon englisch zu lernen aber leider läuft das nicht so gut)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

PROBLEM gelöst:

Code: Alles auswählen

TPoint2 = class(TPersistent)
  private
    fx,fy:Integer;
  published
    property x:integer read fx write fx;
    property y:Integer read fy write fy;
 
  end;

jetzt geht es so wie ges gehen soll !
vielen dank für eure hilfe !

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

pluto hat geschrieben:PROBLEM gelöst:
jetzt geht es so wie ges gehen soll !


Ja, so geht das.

Der ist jetzt natürlich nicht mehr zuweisungskompatibel mit einem echten TPoint, also:

Code: Alles auswählen

var pt:TPoint;
     pt2:TPoint2;
begin
  pt:=pt2;
end;


..geht nicht. Aber ist ja auch wurscht. ;-)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

doch würde gehen wenn ich eine entsprechnede funktion schreiben würde *G*

vielen dank für eure hilfe !

Antworten