Autor |
Beitrag |
Tendl
      
Beiträge: 117
|
Verfasst: Mi 21.01.04 19:19
Folgende Procedure erzeugt mir zur Laufzeit ein PageControl mit einem Tabsheet:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure fill2form(new_form:TForm); var PageControl1: TPageControl; TabSheet1: TTabSheet;
begin PageControl1 := TPageControl.Create(new_form); PageControl1.Name := 'PageControl1'; PageControl1.Top := 40; PageControl1.width := new_form.Width - 15; PageControl1.Height := new_form.height - 45; PageControl1.TabOrder := 0; new_form.InsertControl(PageControl1); TabSheet1 := TTabSheet.Create(PageControl1); TabSheet1.Name := 'TabSheet1'; TabSheet1.Parent := PageControl1; TabSheet1.PageControl := PageControl1; TabSheet1.Caption := 'Button 1'; pagecontrol1.InsertControl(Tabsheet1); end; |
Das erzeugte PageControl sieht so aus wie erwartet, nur beim Schließen
bekomme ich stets den Fehler:
Accessviolation at address 00000, Read of Address 00000
Wenn ich das auskommentierte exit aktiviere läuft es ohne Fehler.
Was mach ich falsch?
Danke im Voraus
Thomas
Moderiert von Peter Lustig: Code- durch Delphi-Tags ersetzt
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Mi 21.01.04 19:35
Mach mal im OnClose:
Delphi-Quelltext 1: 2:
| PageControl1.Free; TabSheet1.Free; |
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Tendl 
      
Beiträge: 117
|
Verfasst: Mi 21.01.04 19:51
Ganz so einfach ist die Sache nicht, auch das TForm ist dynamisch erzeugt.
Der Fehler kommt meiner Meinung nach daher, daß zweimal versucht wird das Tabsheet zu löschen (.free). Ich weiß aber nicht warum und wie ich das vehindern kann.
Thomas
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Mi 21.01.04 19:54
du musst immer von oben nach unten vorgehen...
Erst Tabsheet, dann TabControl, dann das Form
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
Tendl 
      
Beiträge: 117
|
Verfasst: Mi 21.01.04 19:59
Ich habe dazu keinen Code geschrieben,
ich denke diese Arbeit wird vom Formular, dem das Pagecontrol gehört übernommen. Dies sollte pagegcontrol.free aufrufen, das seinerseits das tabsheet.free aufruft.
Liege ich da falsch?
Danke für die Hilfe
Thomas
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mi 21.01.04 22:22
Probiers mal so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure fill2form(new_form:TForm); var PageControl1: TPageControl; TabSheet1: TTabSheet;
begin PageControl1 := TPageControl.Create(new_form); PageControl1.Parent := new_form; PageControl1.Name := 'PageControl1'; PageControl1.Top := 40; PageControl1.width := new_form.Width - 15; PageControl1.Height := new_form.height - 45; PageControl1.TabOrder := 0; TabSheet1 := TTabSheet.Create(PageControl1); TabSheet1.Name := 'TabSheet1'; TabSheet1.Parent := PageControl1; TabSheet1.PageControl := PageControl1; TabSheet1.Caption := 'Button 1'; end; |
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
Tendl 
      
Beiträge: 117
|
Verfasst: Do 22.01.04 10:03
Danke, so hat es funktioniert.
Kann jemand dann sagen wozu ich die Methoden
InsertControl(..)
InsertComponent(..)
brauche und wo der genau Unterschied liegt?
Thomas
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Do 22.01.04 11:20
Im Normalfall brauchst du diese Methoden nie aufzurufen.. bei InsertCotnrol sagt die Hilfe sogar:
Online Hilfe hat folgendes geschrieben: | Applications should not need to call InsertControl directly. |
Im Normalfall reicht es den Owner als Parameter im Constructor mitzugeben und den Parent zu setzen... mehr brauchst du eigentlich nicht machen, und mehr hab ich in meinem obigen Code auch nicht gemacht...
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|