Autor Beitrag
Andi_d
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 10.06.08 21:50 
Hallo!

Arbeite mit Frames welche dynamisch erzeugt werden. Auf meinem "MainForm" befindet sich u.a. ein "MainScreen" vom Typ TPanel welches das Parent für die Frames ist.

Die Frames werden durch drücken bestimmter Buttons auf der MainForm erstellt. Die Frames selbst haben logsicherweise ebenfalls Buttons - einer davon sollte das Frame wieder verschwinden lassen. Und genau hier liegt mein Problem. Wenn ich im ONClick-Ereignis des Buttons am Frame den Frame freigeben möchte bekomme ich immer eine Zugriffsverletzung. Wenn ich den Frame vom MainForm aus freigebe ist das null Problem

Kurz sieht das ganze so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
type TFrameClass = class of TBasicFrame;  //TBasicFrame ist class (TFrame)
.
.
ButtonShowScreening.Tag:= Integer(TFrameScreening);  //TFrameScreening ist class (TFrameBasic)
ButtonShowAuswertung.Tag:= Integer(TFrameAuswertung);//TFrameAuswertung ist class (TFrameBasic)

.
.

procedure TfrmMain.CreateFrame(aButton:TButton;aScreen:TPanel);
Var Frame:TBasicFrame;
begin
  Frame:=TFrameClass(aButton.Tag).Create(Self);
  Frame.Parent:=aScreen;
  .
  .
  .
end;

procedure TfrmMain.DestroyFrame(aScreen:TPanel); // Dies funktioniert 1A solange ist es vom MainForm aus aufrufe!!
begin
  Frame:=TBasicFrame(aScreen.Controls[0]);
  If Frame<>Nil then Frame.Free;
end;

procedure TfrmMain.ButtonShowScreeningClick(Sender:TObject);
begin
     CreateFrame(ButtonShowScreening as TButton, MainScreen);
end;

Wie sollte der Code im TFrameScreening aussehen damit das ganze genau so gut geht?!?!?!!?

Bitte um Hilfe - zermartere mir schon seit Tagen den Kopf! :-(((

Vielen Dank!!

Andi

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 10.06.08 22:02 
Moin und :welcome: im Forum!

user profile iconAndi_d hat folgendes geschrieben:
Die Frames selbst haben logsicherweise ebenfalls Buttons - einer davon sollte das Frame wieder verschwinden lassen. Und genau hier liegt mein Problem. Wenn ich im ONClick-Ereignis des Buttons am Frame den Frame freigeben möchte bekomme ich immer eine Zugriffsverletzung. Wenn ich den Frame vom MainForm aus freigebe ist das null Problem
So ist es, du darfst VCL-Kompos nicht in ihren Ereignissen freigeben. Hier ist ein Vorschlag, wie man sowas lösen könnte. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Andi_d Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 10.06.08 22:26 
Danke für Deine Antwort!

Doch leider bekomme ich auch hier die Zugriffsverletzung!

Sehe ich das richtig: in dem Beispiel, das Du mir geschickt hat wird "nur" eine Komponente (TButton) auf einem TForm freigegeben und nicht das TForm (in meinem Fall TFrame) selbst!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TFrameScreeningNew.DestoryButton(Var msg:TMessage);
begin
    If Msg.Msg = WM_Destroy_btn then
       TFrameScreeningNew(msg.WParam).Free;
end;

procedure TFrameScreeningNew.btnCancelClick(Sender: TObject);
begin
    SendMessage(self.Handle, WM_DESTROY_BTN, Integer(TFrameScreeningNew), 0);
end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 10.06.08 22:42 
Moin!

user profile iconAndi_d hat folgendes geschrieben:
Doch leider bekomme ich auch hier die Zugriffsverletzung!
Hab´s grad mal getestet (siehe Anhang), geht einwandfrei. ;)

user profile iconAndi_d hat folgendes geschrieben:
Sehe ich das richtig: in dem Beispiel, das Du mir geschickt hat wird "nur" eine Komponente (TButton) auf einem TForm freigegeben und nicht das TForm (in meinem Fall TFrame) selbst!
Ja, das Konzept ist aber das Gleiche. Allerdings sehe ich grade, dass du deinen Frame in das Komponentenarray des Formulars eintragen lässt (indem du beim Create nicht NIL übergibst), vielleicht ist es das schon gewesen. :nixweiss:

cu
Narses

//EDIT: sehe grade, dass du auch "Destory" geschrieben hast... hihi, geht mir auch immer so... :)
Einloggen, um Attachments anzusehen!
_________________
There are 10 types of people - those who understand binary and those who don´t.
Andi_d Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 10.06.08 22:45 
Kann mir den Anhang nicht herunterladen... ich habe keine Berechtigung??!?!?!?!

Bin Neu hier..... was muss ich da tun???
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 10.06.08 22:46 
Moin!

user profile iconAndi_d hat folgendes geschrieben:
Kann mir den Anhang nicht herunterladen... ich habe keine Berechtigung??!?!?!?!
Hä? :? Wenn du eingelogged bist, kannst du auch Anhänge runterladen. :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Andi_d Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Di 10.06.08 22:48 
Jetzt hats geklappt!!

Genau das war mein Fehler!!

Super Forum Hier... vielen DANK!!!!


Andi