AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt-Instanz durchreichen

Ein Thema von Luckie · begonnen am 23. Mai 2007 · letzter Beitrag vom 24. Mai 2007
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Objekt-Instanz durchreichen

  Alt 23. Mai 2007, 11:38
Situation: Zwei Formulare, Hauptformular und Unterformular, und eine Klasse K in einer Unit.

Im Hauptformular wird eine Instanz K der Klasse TK aus der Unit erzeugt und verwendet. Diese Instanz der Klasse soll jetzt auch im Unterformular benutzt werden. Das Anzeigen des Unterformulares soll allerdings von der Klasse TK geregelt werden. Das heißt, im Hauptformular wird die Methode K.Show(???) aufgerufen, die dann das Unterformular aufruft, in dem dann das Objekt K mit seinen Daten usw. zur Verfügung steht.

Im Moment stehe ich etwas auf dem Schlauch, wie man das regeln könnte. Meine bisherigen Versuche:
Code im Unterformular:
Delphi-Quellcode:
var
  FotoBook: TFotoBook;

class procedure TfrmPreview.Show(fb: TFotoBook);
begin
  FotoBook := fb;
  with TfrmPreview.Create(nil) do
  begin
    ShowModal;
  end;
end;

procedure TfrmPreview.FormCreate(Sender: TObject);
begin
  FotoBook.PageParent := frmPreview;
  FotoBook.Display(0); // AV!!!
end;
Code in der Klasse:
Delphi-Quellcode:
procedure TFotoBook.ShowPreview(FotoBook: TFotoBook);
begin
  TfrmPreview.Show(FotoBook);
end;
Code im Hauptformular:
Delphi-Quellcode:
procedure TfrmMain.Button3Click(Sender: TObject);
begin
  FotoBook.ShowPreview(FotoBook);
end;
Ich bekomme aber an markierter Stelle im Code eine AV. Hinweis: Die Unit mit der Klasse heißt Fotobook.pas.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Objekt-Instanz durchreichen

  Alt 23. Mai 2007, 12:31
Ich würde den Constructor des Formulars selber schreiben und da das Objekt K übergeben.

Delphi-Quellcode:
procedure TK.Show();
begin
  with TUnterForm.Create(Self) do
    ShowModal;
end;
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Objekt-Instanz durchreichen

  Alt 23. Mai 2007, 13:07
Hm, da sist es auch nicht. Wen ich das so mache:
Delphi-Quellcode:
procedure TfrmMain.Button3Click(Sender: TObject);
begin
  FotoBook.ShowPreview(FotoBook);
end;
Delphi-Quellcode:
procedure TFotoBook.ShowPreview(FotoBook: TFotoBook);
begin
  with TfrmPreview.Create(nil, FotoBook) do
    ShowModal;
end;
Delphi-Quellcode:
constructor TfrmPreview.Create(AOwner: TComponent; FotoBook: TFotoBook);
begin
  inherited Create(AOwner);
  FFotoBook := FotoBook;
end;

procedure TfrmPreview.FormShow(Sender: TObject);
begin
  FFotoBook.PageParent := frmPreview;
  FFotoBook.Display(0);
end;
Dann kommt bei FFotoBook nur eine leere Klasse an. Die Klasse TFotoBook ihrerseits wiederum beimhaltet auch wieder Objekte und die sind alle nil. Irgendwie bekomme ich das Objekt nicht durchgereicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
WoTo

Registriert seit: 28. Jun 2004
Ort: Rotenburg (Wümme)
102 Beiträge
 
Delphi 2005 Enterprise
 
#4

Re: Objekt-Instanz durchreichen

  Alt 23. Mai 2007, 13:19
Hallo Luckie,
vielleicht mußt du das Objekt FotoBook als Referenz übergeben:

Delphi-Quellcode:
procedure TfrmMain.Button3Click(Sender: TObject);
begin
  FotoBook.ShowPreview(FotoBook);
end;
Delphi-Quellcode:
procedure TFotoBook.ShowPreview(var FotoBook: TFotoBook);
begin
  with TfrmPreview.Create(nil, FotoBook) do
    ShowModal;
end;
Delphi-Quellcode:
constructor TfrmPreview.Create(AOwner: TComponent; var FotoBook: TFotoBook);
begin
  inherited Create(AOwner);
  FFotoBook := FotoBook;
end;

procedure TfrmPreview.FormShow(Sender: TObject);
begin
  FFotoBook.PageParent := frmPreview;
  FFotoBook.Display(0);
end;
Gruß
Woto
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Objekt-Instanz durchreichen

  Alt 23. Mai 2007, 13:23
Objekte werden doch automatisch als Referenz übnergeben. Nichst destotrotz habe ich es mal ausprobiert: Hilft nicht.

Die Klasse TFotoBook ist übrigens abgeleitet von TObject. Müsste ich sie in meinem Fall von TPersistent ableiten?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Objekt-Instanz durchreichen

  Alt 23. Mai 2007, 13:36
nein ... nicht
TfrmPreview.Create(nil, FotoBook) sondern
TfrmPreview.Create(nil, Self) denn wer verspricht mir denn das die Variable FotoBook Assigned ist?

Wenn dann noch nil ankommt, geb ich bei den nächsten Delphitagen ein Runde.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Objekt-Instanz durchreichen

  Alt 23. Mai 2007, 13:47
Aber ich habe doch eine Instanz dieser Klasse im Hauptformular erzeugt und dort damit gearbeitet, mit Daten gefüllt. Und diese Instanz brauche ich jetzt mit den Daten in einem Unterformular, wobei das Erzeugen und Anzeigen die Klasse / Objekt selber übernehmen soll. Wen ich dort jetzt Self angebe, ist das dann die im Hauptformular erzeugte Instanz?

Eventuell liegt mein Fehler auch wo anders:
Delphi-Quellcode:
procedure TfrmPreview.FormShow(Sender: TObject);
begin
  ShowMessage(FFotoBook.PageParent.Name);
  FFotoBook.PageParent := frmPreview;
  FFotoBook.Display(0);
end;
frmPreview ist im OnShow, laut Debugger, noch nil. Warum das?

Die ShowMessage gibt mir den richtigen Namen des vorherigen PageParents aus, da scheint also alles anzukommen.

Hmpf, im OnPaint ist es auch noch nil.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Objekt-Instanz durchreichen

  Alt 23. Mai 2007, 14:06
Hi,

Also entweder steht ihr alle aufm Schlauch oder ich kapier nix...
TFotobook ist doch ne Klassse oder nicht?

Dann is das kein Wunder das es ne AV gibt wenn es nie ein FotoBook := TFotoBook.Create(..) gab oder? o.O
Es wird Fotobook ja auch sonst keine Instanz zugewiesen...



Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Objekt-Instanz durchreichen

  Alt 23. Mai 2007, 14:09
Es muss nicht frmPreview, sondern Self heissen bei der Parent-Zuweisung.

Geht alles wunderbar, wie gewünscht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Objekt-Instanz durchreichen

  Alt 24. Mai 2007, 07:07
Zitat von Luckie:
Es muss nicht frmPreview, sondern Self heissen
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz