Problem z CustomComponent

0

Hej

Robie komponent - prosta sprawa, panel a na tym panelu drugi panel.

constructor TMyPanel.Create( aOwner: TComponent );
begin
inherited Create( aOwner );

FInnerPanel := TPanel.Create( self );
FInnerPanel.Parent := self;
FInnerPanel.Align := alRight;
FInnerPanel.BevelOuter := bvNone;
FInnerPanel.Caption := 'InnerPanel';

DoubleBuffered := True;

end;

Ale trafilem na problem. Gdy poloze cos na InnerPanelu ktory znajduje sie na MyPanelu to pozniej te kontrolki nie sa widoczne w runtimie :-( W ogole w designie nie widac InnerPanela na drzewku komponentow. Teoretycznie to jest dobrze ale gdy poloze jakis komponent na InnerPanelu MyPanela to ta kontrolka na drzewku wyglada jakby lezala bezposrednio na Formie :-(

Co musze zrobic zeby to dzialalo?

pozdrawiam
Mateusz [PEYN] Adamus

0
constructor TMyPanel.Create( aOwner: TComponent );
begin
    { ... }
    FInnerPanel.ControlStyle := FInnerPanel.ControlStyle - [csAcceptControls]
    { ... }
end;

Nie daje to spodziewanego efektu w przypadku speedbuttonow, etykiet i podobnych, ale to tez da sie obejsc :)
Pozdrawiam

0

nie widać FInnerPanel, bo go nie ma :). Chodzi o to, że FInnerPanel to część TMyPanel, i dla Delphi to TMyPanel jest komponentem i nie obchodzi go (Delphi) co TMyPanel "ma na sobie"

0
Shrek napisał(a)
constructor TMyPanel.Create( aOwner: TComponent );
begin
    { ... }
    FInnerPanel.ControlStyle := FInnerPanel.ControlStyle - [csAcceptControls]
    { ... }
end;

:-) No rzeczywiscie to dziala, to jest dokladnie to o co mi chodzilo. :D

Ale co jesli w moim komponencie chcialbym miec dwa InnerPanele, np. jeden po lewej a drugi po prawej stronie? Wtedy kladac komponent na ktorykolwiek z InnerPaneli i tak komponenty zawsze laduja mi na tylko jednym :-( Jak zrobic zeby ladowaly na tym na ktore je poloze?

0
Misiekd napisał(a)

nie widać FInnerPanel, bo go nie ma :). Chodzi o to, że FInnerPanel to część TMyPanel, i dla Delphi to TMyPanel jest komponentem i nie obchodzi go (Delphi) co TMyPanel "ma na sobie"

No wiem, do tego tez juz doszedlem, ale chodzi mi o jakis sposob zeby delphi zaczelo widziec ten wewnetrzny panel, a jednoczesnie zeby nie mozna go bylo usunac.

Cos takiego jak np w PageControl.

0

:-) No rzeczywiscie to dziala, to jest dokladnie to o co mi chodzilo. :D

Cholera, chyba sie pospieszylem z tym postem :-(

Niestety nawet jak mam tylko jeden InnerPanel to komponenty ktore na nim klade na nim nie laduja :(

Laduja na MyPanelu, a chcialbym zeby wyladowaly na InnerPanelu. :(

0

No cos mi sie wydaje ze juz wiem dlaczego.

FInnerPanel.ControlStyle := FInnerPanel.ControlStyle - [ csAcceptsControls ];

usuwa mozliwosci przyjmowania kontrolek przez ten panel, dzieki czemu kontrolki trafiaja na jego rodzica, czyli na MyPanel - tak? Do takiego wniosku doszedlem.

Hmm, jesli tak to nie do konca o to mi chodzilo. Fajnie ze komponenty trafiaja na MyPanel ale chcialbym miec tez mozliwosc polozenia komponentow na InnerPanel zawarty w MyPanelu.

Wiem ze Delphi nie widzi tego InnerPanela, ale moze mozna (podejrzewam ze tak patrzac na PageControl) zrobic jakos zeby Delphi zaczelo widziec InnerPanel.

Wiem ze moge przy tworzeniu MyPanela dac

FInnerPanel := TPanel.Create( Owner ); {gdzie Owner to Owner MyPanela}

ale takie podejscie do sprawy daje programiscie mozliwosc usuniecia InnerPanela z MyPanela - a tego chce uniknac.

0

Juz sobie poradzilem :-)

Znalazlem idealny przyklad pokazujacy dokladnie jak uzyc metody DefineProperties. Jakby kogos interesowal ten temat to niech zajrzy tutaj:
http://www.temporaldoorway.com/programming/cbuilder/advancedissue/aggregatescrollablepanel.htm

pozdrawiam
Mateusz [PEYN] Adamus

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