![]() |
Delphi-Version: 10.2 Tokyo
Was ist falsch am Aufruf und Freigaben von Create
Guten Tag Entwickler,
ich bin angefangen mich mit Modulen zu beschäftigen. Im Programm habe ich für die Hilfe zu den einzelnen Formularen, es sind 27 Formulare, ein Modul "ModulHilfe" erstellt. Weil das Modul in jedem Formular benötigt wird, lasse ich es automatisch beim Programmstart mit erzeugen:
Delphi-Quellcode:
Im Modul TMOHilfe steht folgendes im public
ModulHilfe in 'DatenModule\ModulHilfe.pas' {MoHilfe: TDataModule};
{$R *.res} begin Application.Initialize; Application.CreateForm(TdtmdMain, dtmdMain); Application.CreateForm(TMoEMail, MoEMail); ... und noch Anderes Application.Run; end.
Delphi-Quellcode:
und im Create-Ereignis folgendes:
public
{ Public-Deklarationen } constructor Create; procedure Hilfe(aNutzerID: Int64; aPrgTeil, aHauptSeite, aUnterseite: SmallInt); end;
Delphi-Quellcode:
constructor TMoHilfe.Create;
begin GlobalPfad := TAppConstants.GetGlobalPath; PfadHandBuch := TAppConstants.GetHandBuchPfad; end; In den Formularen wird die Hilfe in der Unit-Klausel so angegeben:
Delphi-Quellcode:
implementation
uses DatenModulMain, ModulSonstigeDrucke, ModulHilfe, .... und im OnCreate-Ereignis des Formulares so erzeugt:
Delphi-Quellcode:
MoHilfe.Create;
Im Destroy-Ereignis wird es so freigegeben:
Delphi-Quellcode:
MoHilfe.Free;
Die Hilfe wird dann im Formular so aufgerufen:
Delphi-Quellcode:
MoHilfe.Hilfe(NutzerID, 17, 0, 0);
Das Problem ist nun folgendes: Beim ersten Aufruf des Formulares kann ich die Hilfe aufrufen. Wenn ich aber das Formular schliesse und danach erneut aufrufe, wird sofort eine Zugriffsverletzung bei Adresse 0100D47D in Modul 'Loge.exe'. Schreiben von Adresse 000000A0. geworfen. Wenn ich aber das "MoHilfe.Free" im Formular nicht setze, dann kann ich das Formular ohne Absturz immer wieder aufrufen. Was mache ich falsch? Wo liegt mein Gedankenfehler? Sollte diese Frage hier nicht in die Kategorie passen, so bitte ich den Admin sie in die richtige zu verschieben. Vielen Dank im Voraus für Eure evtl. Hilfe. |
AW: Was ist falsch am Aufruf und Freigaben von Create
Delphi-Quellcode:
MoHilfe.Create; Das geht so nicht! So muss das lauten:
Delphi-Quellcode:
MoHilfe := TMoHilfe.Create; |
AW: Was ist falsch am Aufruf und Freigaben von Create
Und wo ist die Variable MoHilfe deklariert?
Zitat:
Man kann sowas auch erst dann erstellen, wenn es benötigt wird und anschließend wieder freigeben Gerade die Hilfe wird von Usern ja praktisch niemals benutzt. (Erfahrung vieler Entwickler) |
AW: Was ist falsch am Aufruf und Freigaben von Create
Zitat:
|
AW: Was ist falsch am Aufruf und Freigaben von Create
Ergänzend zu Lemmy: Ein Aufrufen der Methode Show vom Formular reicht dann.
Aber du hast doch selbst geschrieben, dass du es von der Anwendung automatisch erzeugen lässt. Warum erzeugst du es doch noch mal selbst? Mal ganz davon abgesehen, dass, so wie du es machst, es falsch ist. Und dann gibst du es frei und wunderst dich, dass ein erneuter Aufruf zu einem Fehler führt? |
AW: Was ist falsch am Aufruf und Freigaben von Create
Wahrscheinlich ist ihm der Unterschied zwischen .Close und .Hide nicht bekannt.
Gruß K-H |
AW: Was ist falsch am Aufruf und Freigaben von Create
Danke an allen die mit geantwortet haben.
Nun habe ich etwas dazu gelernt. Ich habe das Create und das Free aus dem Formular herausgenommen und siehe da es funktioniert. Einen schönen Tag an alle Entwickler |
AW: Was ist falsch am Aufruf und Freigaben von Create
.. wenn Du es denn doch noch dynamisch erstellen willst..
Delphi-Quellcode:
Grüße
moHilfe := TMoHilfe.create(nil);
try moHilfe.show; // oder // moHilfe.showModal; finally moHilfe.free; end; Klaus |
AW: Was ist falsch am Aufruf und Freigaben von Create
Ich dachte, es geht hier um ein TDataModule? Was gibt es da zu Showen oder Hiden?
Sherlock |
AW: Was ist falsch am Aufruf und Freigaben von Create
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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 by Thomas Breitkreuz