![]() |
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:
|
AW: Was ist falsch am Aufruf und Freigaben von Create
Zitat:
|
AW: Was ist falsch am Aufruf und Freigaben von Create
Am einfachsten ist es noch immer Formulare zu erstellen wenn man sie braucht und einfach bis zum Programmende im Speicher zu lassen.
Dann braucht man auch kein ShowModal :P |
AW: Was ist falsch am Aufruf und Freigaben von Create
Dann weißt du nicht, was ShowModal tut. Es stoppt den weiteren Programmablauf im aufrufenden Fenster und lässt nur Eingaben im mit ShowModal angezeigten Fenster zu. Das aufrufende Fenster ist währenddessen blockiert und man muss erst das modale Fenster schließen, um im aufrufenden Fenster weiter arbeiten zu können.
|
AW: Was ist falsch am Aufruf und Freigaben von Create
Hallo,
Zitat:
Delphi-Quellcode:
public
{ Public-Deklarationen } constructor Create(AOwner: TComponent); override; end;
Delphi-Quellcode:
Sonst wird er vom
constructor TMoHilfe.Create(AOwner: TComponent);
begin inherited Create(AOwner); GlobalPfad := TAppConstants.GetGlobalPath; PfadHandBuch := TAppConstants.GetHandBuchPfad; end;
Delphi-Quellcode:
nicht benutzt. Und ohne das
Application.CreateForm
Delphi-Quellcode:
ist so ein Constructor bei einem DatenModul überhaupt nicht zu gebrauchen.
inherited
|
AW: Was ist falsch am Aufruf und Freigaben von Create
Zitat:
|
AW: Was ist falsch am Aufruf und Freigaben von Create
Zitat:
Sherlock |
AW: Was ist falsch am Aufruf und Freigaben von Create
Zitat:
Gruß K-H |
AW: Was ist falsch am Aufruf und Freigaben von Create
Ich weiß nach dreimaligem Lesen des Threads offengesagt nicht mehr worum es geht. Es wurde im ersten Post von Modulen gesprochen, und mit einem TDataModule der Sourcecode eingeleitet. Dieses TDatamodule heisst auch MoHilfe oder sowas. Dann geht es plötzlich mit Formularen weiter und dann hat es mich verloren...
Eventuell kommt nochmal etwas vom OP. Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 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