![]() |
Delphi-Version: XE
Zugriffsverletzung bei umgebogen Parent des Fensters
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen,
ich erstelle z.Z. eine Anwendung, wo ich bei einem TForm ein TabSheet als Parent angegeben habe. So erhalte ich ein Fenster welches sich innerhalb des TabSheet bewegen lässt. Greife ich nun aber vom diesem Fenster auf ein Controll innerhalb des Tabsheets, welches eben falls aus einen TFrom besteht zu, so erhalte ich eine Zugriffsverletzung, die Showmessage wird aber noch ausgeführt.
Code:
Hier binde ich das erste TForm in das erste TabSheet ein.
Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 007569C4 in Modul 'client.exe'
Delphi-Quellcode:
Hier erstelle ich das zweite TForm, welches auch angezeigt wird
unit mainfrm;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DBXDataSnap, DBXCommon, DB, SqlExpr, DBClient, DSConnect, Grids, DBGrids, midas, ExtCtrls, NxCollection, ComCtrls, Menus, VirtualTrees, frmgetGastroOrder, NxPageControl; [...] var Form14: TForm14; pagesArry: array of THandle; implementation uses dm_user, frmtest, dbselectfrm; [...] procedure TForm14.Btn1Click(Sender: TObject); var frmmeintest: Tfrm_Test; begin frmmeintest:= Tfrm_Test.Create(sheet1); frmmeintest.Parent:= sheet1; sheet1.Glyph.Assign(frmmeintest.Icon); sheet1.Caption:=frmmeintest.Caption; frmmeintest.Height:=sheet1.Height; frmmeintest.Width:= sheet1.Width; frmmeintest.Show; SetLength(pagesArry, pgcMain.PageCount); pagesArry[0]:=frmmeintest.Handle; // Wollte dort die Handle der Forms sammeln, um diese über das wm_close zu informieren pgcMain.ActivePageIndex:=0; end;
Delphi-Quellcode:
Der Zugriff auf das Parent Form
procedure Tfrm_Test.btnStartClick(Sender: TObject);
var dbselectevent: Tfrmdbselect; begin inc(iw); //Zum zählen der vorhandenen Fenster dbselectevent:= Tfrmdbselect.Create(frm_Test); dbselectevent.Visible:=True; //dbselectevent.name := 'Select' +IntToStr(iw); dbselectevent.nxflpnl1.Caption:= 'Select (' + IntToStr(iw) + ')'; dbselectevent.Parent:= sheetGetParams; //Ein Tabsheet dbselectevent.Left:=0; dbselectevent.Top:=200; dbselectevent.Show; end; function Tfrm_Test.addRow(NAME :string; EVNO: Integer; AKTIV: Boolean): Boolean; begin ShowMessage(VANAME); //dient mir zur Kontrolle ob das zweite Fenster es bis hierhin schaft! with mtblSelVA do //TkbmMemTable begin Append; FieldByName('VAID').AsInteger:=EVNO; FieldByName('VANAME').AsString:= NAME; FieldByName('AKTIVE').AsBoolean:= AKTIV; Post; end; end;
Delphi-Quellcode:
Ich verstehe ehrlich gesagt gerade nicht wo mein Fehler liegt! Hat einer von euch einen Tipp!
procedure Tfrmdbselect.btn1Click(Sender: TObject);
var intevno, I : Integer; ievbname: string; begin if dbgrdEvents.SelectedCount > 0 then for I := 0 to dbgrdEvents.RowCount -1 do if dbgrdEvents.Selected[i] then begin frm_Test.addRow(dbgrdEvents.CellField[1,i].AsString, dbgrdEvents.CellField[0,i].AsInteger, TRUE); end; end; Danke Dirk |
AW: Zugriffsverletzung bei umgebogen Parent des Fensters
Hm...
ist nicht einfach, alles zu erkennen. Was mir auffällt:
Code:
Ich kann nirgends erkennen, das die Variable frm_Test tatsächlich auf eine Instanz eines Forms zeigt.
frm_Test.addRow(dbgrdEvents.CellField[1,i].AsString,
dbgrdEvents.CellField[0,i].AsInteger, TRUE); Zumindest in den Codeschnipseln steht nirgendwo: frm_Test := Tfrm_Test... Frank |
AW: Zugriffsverletzung bei umgebogen Parent des Fensters
Wo tritt denn nun diese Exception auf?
Und wie wäre es mit MDI, anstatt dieser "umgebodenen" TForm? Zitat:
Delphi-Quellcode:
oder
Array of Tfrm_Test
Delphi-Quellcode:
?
Array of TForm
|
AW: Zugriffsverletzung bei umgebogen Parent des Fensters
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ich habe versucht die Komplexität zu reduzieren und beschränke mich auf drei Forms. Form14 erzeugt Form15 und dieses Form16. Form15 kann auf Form14 zugreifen, Form16 jedoch nicht auf Form15. Form15 und Form16 wurden nach dem gleichen Prinzip erzeugt. Auch das Auskommentieren der Änderung des Parent bei Form15 half nicht, ich erhalte eine Zugriffsverletzung. Da liegt bestimmt ein Denkfehler vor! LG Dirk
Delphi-Quellcode:
unit Unit14;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm14 = class(TForm) btn1: TButton; lbl1: TLabel; pgc1: TPageControl; ts1: TTabSheet; procedure btn1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form14: TForm14; implementation uses Unit15; {$R *.dfm} procedure TForm14.btn1Click(Sender: TObject); var test: TForm15; begin test:= TForm15.Create(self); test.Parent:= ts1; test.Show; end; end.
Delphi-Quellcode:
unit Unit15;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Unit14, StdCtrls; type TForm15 = class(TForm) btn1: TButton; btn2: TButton; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form15: TForm15; implementation uses Unit16; {$R *.dfm} procedure TForm15.btn1Click(Sender: TObject); begin Form14.lbl1.Caption:='Test'; Form14.Caption:= 'Test'; end; procedure TForm15.btn2Click(Sender: TObject); var test2: TForm16; begin test2:= TForm16.Create(self); test2.Show; end; end.
Delphi-Quellcode:
unit Unit16;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm16 = class(TForm) btn1: TButton; procedure btn1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form16: TForm16; implementation uses Unit15; {$R *.dfm} procedure TForm16.btn1Click(Sender: TObject); begin Form15.Caption:='Test'; //löst keinen Fehler aus, macht aber nichts! Form15.btn2.Caption:='Test'; //hier bekomme ich eine Zugriffsverletzung end; end. |
AW: Zugriffsverletzung bei umgebogen Parent des Fensters
das
Delphi-Quellcode:
ist der Grund an 2 Stellen...
var
test: TForm15; begin test:= TForm15.Create(self); Der Zugriff über Form15.Caption kann so nicht funktionieren, da Form15 ja gar nichts zugewiesen wurde, in Deinem Fall
Delphi-Quellcode:
Form15:= TForm15.Create(self);
|
AW: Zugriffsverletzung bei umgebogen Parent des Fensters
Danke Euch, das war es!
Delphi-Quellcode:
procedure TForm14.Btn1Click(Sender: TObject);
begin frm_Test:= Tfrm_Test.Create(self); frm_Test.Parent:= sheet1; sheet1.Glyph.Assign(frm_Test.Icon); sheet1.Caption:=frm_Test.Caption; frm_Test.Height:=sheet1.Height; frm_Test.Width:= sheet1.Width; frm_Test.Show; SetLength(pagesArry, pgcMain.PageCount); pagesArry[0]:=frm_Test.Handle; pgcMain.ActivePageIndex:=0; end;
Delphi-Quellcode:
procedure Tfrm_Test.btnStartClick(Sender: TObject);
begin frmdbselect:= Tfrmdbselect.Create(frm_Test); frmdbselect.Visible:=True; frmdbselect.nxflpnl1.Caption:= 'Select'; frmdbselect.Parent:= sheetGetParams; frmdbselect.Left:=0; frmdbselect.Top:=200; frmdbselect.Show; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz