![]() |
Objekt-Instanz durchreichen
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:
Code in der Klasse:
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;
Delphi-Quellcode:
Code im Hauptformular:
procedure TFotoBook.ShowPreview(FotoBook: TFotoBook);
begin TfrmPreview.Show(FotoBook); end;
Delphi-Quellcode:
Ich bekomme aber an markierter Stelle im Code eine AV. Hinweis: Die Unit mit der Klasse heißt Fotobook.pas.
procedure TfrmMain.Button3Click(Sender: TObject);
begin FotoBook.ShowPreview(FotoBook); end; |
Re: Objekt-Instanz durchreichen
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; |
Re: Objekt-Instanz durchreichen
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:
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.
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; |
Re: Objekt-Instanz durchreichen
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:
Gruß
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; Woto |
Re: Objekt-Instanz durchreichen
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? |
Re: Objekt-Instanz durchreichen
nein ... nicht
Delphi-Quellcode:
sondern
TfrmPreview.Create(nil, FotoBook)
Delphi-Quellcode:
denn wer verspricht mir denn das die Variable FotoBook Assigned ist? :)
TfrmPreview.Create(nil, Self)
Wenn dann noch nil ankommt, geb ich bei den nächsten Delphitagen ein Runde. :) |
Re: Objekt-Instanz durchreichen
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:
frmPreview ist im OnShow, laut Debugger, noch nil. Warum das?
procedure TfrmPreview.FormShow(Sender: TObject);
begin ShowMessage(FFotoBook.PageParent.Name); FFotoBook.PageParent := frmPreview; FFotoBook.Display(0); end; Die ShowMessage gibt mir den richtigen Namen des vorherigen PageParents aus, da scheint also alles anzukommen. Hmpf, im OnPaint ist es auch noch nil. :wall: |
Re: Objekt-Instanz durchreichen
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... :gruebel: Gruß Neutral General |
Re: Objekt-Instanz durchreichen
Es muss nicht frmPreview, sondern Self heissen bei der Parent-Zuweisung. :roll:
Geht alles wunderbar, wie gewünscht. :firejump: |
Re: Objekt-Instanz durchreichen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 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