Własny komponent: dostęp do kontrolki child-a w publicznych property komponentu rodzica

Odpowiedz Nowy wątek
2018-05-31 22:59

Rejestracja: 11 lat temu

Ostatnio: 1 dzień temu

0

Witajcie,

tworzę sobie komponent TRichEditEx, który ma w sobie kontrolki, m.in. FRichEdit: TRichEdit, którego property chciałbym publicznie udostępnić w TRichEditEx.

type
  TMRichEditEx = class(TPanel)
  private
    FRichEdit: TRichEdit;
    //inne kontrolki

  protected

  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

  published
    property RichEdit: TRichEdit read FRichEdit;

  end;

O ile dla mojego komponentu TMRichEditEx w BDS2006 w Object Inspektorze pojawia się dodatkowa rozwijalna gałąź kontrolki RichEdit z dostępem do jego property, to w Delphi 2009 jest tylko property, ale bez możliwości rozwinięcia drzewka.

Da się to jakoś zrobić, żebym mógł wyprowadzić w publicznych property mojego komponentu TMRichEditEx publiczne property kontrolki FRichEdit?

edytowany 1x, ostatnio: furious programming, 2018-06-01 00:32

Pozostało 580 znaków

2018-06-01 00:30
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 1 minuta temu

Lokalizacja: Tuchów

0
marogo napisał(a):

[…] to w Delphi 2009 jest tylko property, ale bez możliwości rozwinięcia drzewka.

Z tego co pamiętam, taka sytuacja występuje wtedy, gdy pole z referencją kontrolki-dziecka zawiera nil. Tworzysz tę sub-kontrolkę w konstruktorze głównej klasy komponentu?


edytowany 3x, ostatnio: furious programming, 2018-06-01 00:33
Poza tym ustawiam w konstruktorze FRichEdit.Parent := Self; i FRichEdit.SetSubComponent(true); - marogo 2018-06-01 08:11

Pozostało 580 znaków

2018-06-01 08:08

Rejestracja: 11 lat temu

Ostatnio: 1 dzień temu

0

To chyba jest jakaś ułomność Delphi 2009, bo tak samo nie ma możliwości edycji właściwości sub-komponentu EditLabel w natywnym komponencie TLabeledEdit, ale w BDS2006 (Delphi 10) jest taka możliwość.

Pozostało 580 znaków

2018-06-01 11:14
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 1 minuta temu

Lokalizacja: Tuchów

0

@marogo: to całkowicie zmienia postać rzeczy. Skoro nawet dla standardowych komponentów nie da się rozwinąć gałązki, to musi to być ułomność (inspektora obiektów?) tej wersji środowiska. Albo bezsensowny ficzer.


Pozostało 580 znaków

2018-06-01 14:17

Rejestracja: 11 lat temu

Ostatnio: 1 dzień temu

Już wiem w czym problem. W procedurze "Register" zabrakło rejestracji edytora właściwości sub-komponentu klasy TRichEdit (RegisterPropertyEditor):

uses DesignIntf, DesignEditors;

procedure Register;
begin
  RegisterComponents('Moje', [TMRichEdit]);
  RegisterPropertyEditor(TypeInfo(TRichEdit), TMRichEdit,'RichEdit', TClassProperty); //tego brakowało
end;

Teraz już można rozwinąć gałąź subkomponentu RichEdit.

edytowany 1x, ostatnio: marogo, 2018-06-01 20:52
Nie sądziłem, że Delphi tego wymaga. ;) - furious programming 2018-06-01 14:25
Trochę szkoda, że po zaznaczeniu dowolnego property subkomponentu, na zakładce "Events" nie są wyświetlane jego eventy, no ale to zawsze można podlinkować i wyprowadzić na zewnątrz we własnym komponencie, kwestia tylko paru eventów: OnChange, OnKeyUp, OnKeyDown, OnKeyPress. - marogo 2018-06-01 15:29
Zapomniałem dodać, że RegisterPropertyEditor wymaga dodania do sekcji uses DesignIntf i DesignEditors. - marogo 2018-06-01 15:32
Możesz poprawić kod, dodając sekcję uses i wymagane moduły. Choć po takie informacje idzie się do dokumentacji. - furious programming 2018-06-01 15:33

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0