Avatar billede snorga Nybegynder
18. april 2000 - 23:18 Der er 8 kommentarer og
1 løsning

mangler property

Hvorfor er ftest ikke den text som jeg har skrevet i dens property i design af formen?
Hvis jeg tjekke fra en knap senere i programmet så er den OK men ikke create'n.

Jeg skal bruge nogle af Componenten's property til initialisering af componenten, men kan ikke af læse dem.. :(

HJÆLP!

Jeg har kikket på en anden component, der ser ud til at gøre det samme som min, men den virker, hvorfor?


------(dele af)componenten------

type
  TDXWin = class(TComponent)
  private
    fTest:String;
  protected
    { Protected declarations }
  public
    { Public declarations }
    Constructor Create(Owner: TComponent);Override;
  published
    { Published declarations }
    Property Test:String Read fTest write ftest;
  end;


---------***-----------------

constructor TDXWin.Create;
begin
  Inherited Create(Owner);

  if not (csDesigning in ComponentState) then begin

    ShowMessage(fTest);

  end;
end;

Avatar billede erikjacobsen Ekspert
18. april 2000 - 23:30 #1
Ja, der er ikke lavet på det tidspunkt. Du kan bruge
hændelsen OnCreate - så vidt jeg ved.
Avatar billede snorga Nybegynder
19. april 2000 - 08:38 #2
Jeg synes ellers at det andet component jeg kikkede på tjekke på sine property på Create..

Tjekker det og vender tilbage.
Avatar billede erikjacobsen Ekspert
19. april 2000 - 09:19 #3
Jeg må have været søvning. Det var noget vrøvl.. hehe

Hvis du sætter en komponent på formen fra komponentbjælken bliver
den created automatisk mens du designet. Der får du ikke en
ShowMessage pga. din if-sætning. Sætter du properties i Objekt-
inspektøren kalder du ikke mere create.

Når du efterfølgende kører programmet, vil du få nævnte Showmessage, men
før nogen properties bliver sat. Groft sagt laver Delphi denne kode bag ryggen
på dig (afhængig af hvilke properties du har ændret).

  TDXWin1 := TDXWin.Create(....);
  TDXWin1.Test := 'Whatever';

Den nye værdi af property Test kan altså ikke aflæses i createn.
Avatar billede sjensen Nybegynder
19. april 2000 - 09:43 #4
snorga,

Lad være med at sætte den i private. Gør sådan i stedet:

type
  TDXWin = class(TComponent)
    fTest:String;
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    Constructor Create(Owner: TComponent);Override;
  published
    { Published declarations }
    Property Test:String Read fTest write ftest;
  end;



Avatar billede snorga Nybegynder
19. april 2000 - 11:55 #5
Hmm... Erik, Showmessage'n vil jeg kun ha når programmet køre, så den del er ok :)

sjensen, vender lige tilbage i aften når jeg har testet..
btw:Har du testet eller er det bare et gæt?
Avatar billede erikjacobsen Ekspert
19. april 2000 - 11:58 #6
Mit gæt er at han gætter ... ;-)

Hvorfor vil du have en showmesage når du opretter din komponent. Er
det til aftestning? Og du vil se hvad det er for én? Kan du så ikke bare
skrive komponentens navn ud i din showmesage? Sikke mange spørgsmål.
Avatar billede snorga Nybegynder
19. april 2000 - 12:04 #7
Hehe.. Showmessage'n er KUN til test. (derfra navnet "test")

Det jeg vil se er om property nu også er blevet sat.

Problemmet var at jeg skulle bruge property'sne til at sætte nogle interne variabler, men de blev alså ikke sat :(

Skrive komponentens navn? som test istedet for property'en "test"? eller hvad?
Avatar billede erikjacobsen Ekspert
19. april 2000 - 12:11 #8
Du kan se en komponents navn (Pascal-navn, f.eks. button1) ved at
skrive

  ShowMessage(name);

i din Create-funktion. Men du kan altså ikke se properties der. De interne
variabler kan først ses på den tilhørende forms onCreate.
Avatar billede snorga Nybegynder
19. april 2000 - 21:57 #9
Du havde vist desværer ret Erik. Det component jeg havde der brugte property's i Create har samme problem.

Så løsning er i onCreate eller andre procedure senere...  :(
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