Avatar billede heyn Nybegynder
14. april 2007 - 06:14 Der er 5 kommentarer og
1 løsning

Publish af objekt oprettet runtime.

Hej Alle.

Jeg har et TLabel i C++Builder som er oprettet runtime. Nu ønsker jeg at '__Published' det så det bliver tilgængeligt for alle.
Ved nogen hvordan dette gøres?
Et alternativ kunne være at det defineres i headeren. Se spørgsmål http://www.eksperten.dk/spm/773073.
Altså at 'TLabel** tlabels' delen af 'TLabel** tlabels = new TLabel* [antal_tlabels]' oprettes i headeren. Det kan jeg bare heller ikke få til at fungere!!!

Mvh. Christian
Avatar billede heyn Nybegynder
14. april 2007 - 07:06 #1
Det drejer sig om at andre funktioner af typen __fastcall skal have adgang til TLabel** tlabels.
Avatar billede intel4004 Novice
14. april 2007 - 17:58 #2
Altså så vidt jeg ved så er __Published et specielt keyword kun brugt i Borland C++ til definition af IDE-managed komponenter. Ifølge min gamle C++Builder bog bør man ikke manuelt ændre/tilføje __published elementer.

Det du vil er at tilføje din variable tlabels under public:

class TForm : public TForm
{
  __published:
    //du bør ikke røre ved dette her
    //IDE'en (Form builderen ændrer selv det her)

  private:
      //private bruger members
  public:
      //public bruger members
      TLabel** tlabels;
}

Læg mærke til at jeg kun har deklareret tlabels i din klasse. Det sted i din kode hvor du dynamisk vil oprette dit array af TLabels skriver du istedet:

tlabels = new TLabel* [antal_tlabels];

...og ellers resten som i dit tidligere spm.

Gør evt. dette i constructoren.

Mvh Intel4004
Avatar billede intel4004 Novice
14. april 2007 - 18:06 #3
En ting er selvfølgelig at du egentlig gør data public... Jeg tror mange vil sige at man bør lave en getter-metode til din Tlabels og sætte den tlabels til private.

TLabel* TForm1::getLabel(unsigned int num)
{
  return tlabels[num];
}

Du behøver ikke bruge __fastcall med mindre du bruger funktionen som en event.

Du kalder nu blot:

getlabel(2)->parent = this; //eksempel

Mvh Intel4004
Avatar billede heyn Nybegynder
16. april 2007 - 07:38 #4
Fedt nok.

Og intel4004 - Jeg tror at du med dine 2 svar har givet mig en god gang indsigt. Tak skal du have.

Mvh Christian
Avatar billede heyn Nybegynder
16. april 2007 - 07:39 #5
P.s. Jeg vælger selvfølgelig private!
Avatar billede intel4004 Novice
16. april 2007 - 10:03 #6
Ok - tak for point

Intel4004
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester