Gå til innhold

Custom component, visuelle child objecter.


Anbefalte innlegg

Jeg driver å lager ett Peer-To-Peer nettverk, og en klient til å operere på det nettverket for øyeblikket. Da må jeg seff skrive custom komponenter for å tegne ett GUI akkurat som jeg vil ha det. Jeg suger egentlig på å skrive GUI komponenter, men på noen timer fikk jeg kokt sammen en komponent ganske lik den download lista i Kazaa. Den funker stort sett som den skal nå, men jeg har ett problem. Nå trenger jeg en scrollbar til den. Greit nok, jeg har funksjonene som skal til for å scrolle skrivi inn i den komponenten (SetScrollingPosition blablabla), men jeg trenger scrollbaren sjæl.

 

Jeg har prøvd detta:

 

Tdownloadlistgui
 ....
 FScroll: TScrollbar; //dette er komponenten jeg vil ha som child av Tdownloadlistgui
 ...
 end;

...

constructor Tdownloadlistgui.create;
begin
 ...code...

 FScroll := TScrollbar.Create(nil);
 FScroll.Parent := self.Parent;     //veldig usikker på denne, men etter min oppfatning skulle parenten til Tdownloadlistgui være formen den er creata i.
end;

 

Problemet er at den syns ikke. Den blir ikke laga i hele tatt. På dette eksemplet har jeg ikke posisjonert den enda, men den vil bli lagd på formen Tdownloadlistgui har blitt lagd i, oppi venstre hjørne.

 

Sorry hvis jeg virker litt n00b i komponent making, men jeg har virkelig ikke lagd mange visuelle komponenter før :).

 

Noen som veit hvorfor den ikke vil syns? PS: Har også prøvd å redrawe den på Paint eventen til Tdownloadlistgui, men det funka heller ikke.

Lenke til kommentar
Videoannonse
Annonse

Jeg ser bare 2 problemer der:

1. .Create(nil). Vanligvis er det eieren (i dette tilfelle Self) som brukes i som argument (AOwner) i TComponent.Create. Alternativt kan man bruke Self.Owner - da blir formen eier av den nye skrollbaren. Owner spesifiseres for å styre levetid på komponentene. Er Self eier, destrueres skrollbaren når Self dør. Er formen (dvs. Self.Owner) eier, kan du risikere at formen sletter skrollbaren mens DownloadListGui fortsatt lever. Er du uheldig, får du AccessViolation ved avslutning av formen fordi DownloadListGui prøver å gjøre noe med FScroll, som allerede inneholder peker mot slettet objekt. Så jeg hadde gått for FScroll := TScrollbar.Create(Self.Owner)

2. Parent er den som inneholder komponenten. Flytter du Parent, flyttes komponenten med den. Veldig god grunn til at også FScroll.Parent skal settes til :=Self

 

Jeg tipper at det som skjer er at enten ligger ScrollBar bak alt (direkte på formen, med DownloadListGui over den) eller har den feil størrelse/posisjon slik at den vises helt annet sted - kanskje utenfor skjermen. Jeg har opplevd at komponentene (egentlig controls siden de synlige komponentene er arvet fra TControl) ikke vises før du setter Parent riktig.

 

Har du kildekoden til VCL, kan du også se på kildekoden til TSpinEdit - der kombineres TSpinButton med TEdit og det skal være rimelig likt det du prøver å få til.

Lenke til kommentar

Hehe, har opplevd det samme selv :). Thanks, tenkte visst ikke på Owner, men jeg synes dette var rart, fordi denne koden funka utenom komponenten.

 

Har full kontroll på at alle childrena til den threaden er creata mens threaden pågår, og at den er freea når threaden Terminater, frees også childrena.

 

Okay, skal tæsje med Owner når jeg kommer hjem :).

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...