Avatar billede pb1 Nybegynder
10. april 2007 - 21:38 Der er 9 kommentarer og
1 løsning

Access violation ved oprettelse af ny form

Hey exp,

Jeg får nogle gange en access violation når jeg skifter en label' caption på form2!!

Har slået auto create fra for form2 under options.

denne kode har jeg på en knap på form1:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Form1); // Skal der stå Form1,2,self??
  Form2.ShowModal;
  Form2.Free;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Form2.label1.caption := 'sættes til noget text'; // Det er her den crasher nogle gange !! hvorfor?
end;
Avatar billede martinlind Nybegynder
11. april 2007 - 07:52 #1
fordi du referrer til Form2 instancen DET SKAL DU IKKE !!!

procedure TForm2.FormCreate(Sender: TObject);
begin
  // Du er på form2 - Dette er form2's create
  // Evt. hvis du vil være helt siker kan du bruge Self hviket betyder den actuele instance af TForm2 i det her tilfælde
  label1.caption := 'sættes til noget text';
end;
Avatar billede martinlind Nybegynder
11. april 2007 - 07:53 #2
Form2 := TForm2.Create(Form1); // Her kan du bruge Form1/Self/Application/NIL du kan læase i online hjælpen hvad Owner er :)
Avatar billede a_nor Nybegynder
11. april 2007 - 08:57 #3
pb1: (som Martin indirekte skriver)  Form2 eksisterer IKKE (nødvendigvis) i tform2.formcreate.  Det er som regel bedre at bruge 'self' end selve instancen (= forekomsten af objektet). Hvis du vil lave flere forekomster af tForm2 er det vigtigt at du ikke bruger Form2, men istedet Self, hvis det er nødvendigt at referere til objektet!

Martin: hvem blir owner hvis du bruger nil ?
Avatar billede martinlind Nybegynder
11. april 2007 - 09:42 #4
a_nor >> Mine dumme komentarer er du da ikke intereseret i ??:)
Avatar billede a_nor Nybegynder
11. april 2007 - 11:16 #5
jo, hvorfor kalder du dem iøvrigt dumme?  :-)
Avatar billede a_nor Nybegynder
11. april 2007 - 13:55 #6
Jeg er egentlig interesseret i alle kommentarer, ingen skriver dem vel med formålet at være dumme.

Det er muligt at min kommentar til dig var "dum". Jeg fik da lige til at lavet nogle test i den anledning. I Delphi3 er det ligegyldigt hvad man anvender som owner. Ingen "oprydnings events" finder sted i nogen af tilfældene!! I D7 virker det som det skal: Når owneren destrueres bliver onDestroy trigget. Hvis man creater med NIL, vil onDestroy altså aldrig! blive trigget, og eventuel oprydning ikke foretaget. Bemærk så iøvrigt at onClose ikke kaldes i nogen af tilfældene.

At vi er på forskellige stader i vores (programmeringsmæssige) udvikling, er vel netop basis for at dette glimrende forum eksisterer ? Og da der hele tiden kommer nye muligheder til, er vi alle(?) begyndere inden for disse områder - et stykke tid i hvert fald :-)
Avatar billede martinlind Nybegynder
11. april 2007 - 19:50 #7
a_nor >> Ja... du er sku ikke nem at nare :)

Owner er som du har funet udaf "delphi's" måde at holde styr på sine forms, du kan via application objectet løbe forms listen igennem og se alle forms, hvis der ikke er brugt nil, parent er derimod noget helt andet og langt mere spændene, den afgør om dit vindue/form bliver paint'et eller ej !

Det var så dagens lektion *S*
Avatar billede a_nor Nybegynder
12. april 2007 - 08:56 #8
Martin >> Du mener vel Screen-objektet ?

Kunne du ikke også uddybe lidt om anvendelsen af parent, nu du er så godt igang ? Specielt i relation til forms:  ( form3.parent := form2; eller lign.)
Avatar billede pb1 Nybegynder
12. april 2007 - 18:03 #9
Jeg takker...
Avatar billede martinlind Nybegynder
13. april 2007 - 11:52 #10
det kan jeg da :)
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