![]() |
Probleme mit showModal
Hallo!
nachdem ich jetzt allmählich am verzweifeln bin... habe eine Delphi-Projekt als Vorlage bekomme, was ich jetzt dementsprechend den neuen Anforderungen verändere. Habe meine Mainunit mit meinem MainWindow (im Projekt Project)- inkl. Menü etc. Wenn ich jetzt auf den Menüpunkt Neu gehe, soll mein Dialogfenster erscheinen - aus der Unit Dialog mit Fenster names Eingabe. Habe folgenden Quellcode übernommen:
Delphi-Quellcode:
Leider kommt immer, sobald ich den Menüpunkt ausführen will: Access violation at address 00471686 in module' Project.exe'. Read of address 00000000.
procedure TMainWindow.NeuClick(Sender: TObject);
begin // ... if Eingabe.ShowModal = mrOK then begin RechnePersDaten(AngDaten.EinDaten,AngDaten.PersDaten); RechneRentDaten(AngDaten.EinDaten,AngDaten.PersDaten,AngDaten.RentDaten); ShowTab; SpeichernUnter.Enabled:=True; Speichern.Enabled:=False; Bearbeiten.Enabled:=True; Drucken.Enabled:=True; end; end; Danach immer ein Verweis auf diese Zeile. Heißt das jetzt, dass ein Verweis in dem Project fehlt oder wie? |
Re: Probleme mit showModal
Wurde Eingabe instantiiert? ( Eingabe = TEingabe.Create oder createForm )
|
Re: Probleme mit showModal
Hallo,
hast du die Unit Dialog unter uses (ganz oben) aufgelistet? Gruß, ManuMF |
Re: Probleme mit showModal
Modale Formulare sollte man im Programmcode erzeugen, benützen und gleich wieder zerstören,
denn man ist ja fertig mit dem Formular. Hier das immer gleiche Grundgerüst:
Delphi-Quellcode:
var
frm : TEingabeForm; begin frm := TEingabeForm.Create(Self); try if frm.ShowModal = mrOK then begin //mach was damit end; finally frm.Free; end; end; |
Re: Probleme mit showModal
also, der Dialog wird instantiiert mit FormCreate und ist natürlich auch in der main bei den uses mit drin!
bei TEingabe.Create(Self) (entsprechend angepasst) meckert er rum, dass es nur für Klassenmethoden erlaubt ist... |
Re: Probleme mit showModal
Poste mal die Klassendefinition.
|
Re: Probleme mit showModal
sorry, steh grad völlig auf dem schlauch! welche denn? :oops:
|
Re: Probleme mit showModal
TEingabe.
|
Re: Probleme mit showModal
Meinst du das??
Delphi-Quellcode:
unit Dialog;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls, ObjEin, HiType, HiFunc, Buttons; type TEingabe = class(TForm) TabelleEinlesen: TButton; ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; DataSource1: TDataSource; DBGrid1: TDBGrid; OpenDialog1: TOpenDialog; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Bilanztermin: TEdit; Rechnungszins: TComboBox; PA_Maenner: TComboBox; PA_Frauen: TComboBox; Rentendynamik: TComboBox; ARKZ: TComboBox; IRKZ: TComboBox; WRKZ: TComboBox; RZahlunsweise: TComboBox; WRArtKz: TComboBox; Beenden: TButton; OK: TBitBtn; Abbruch: TBitBtn; {****************** Beenden bzw. Abbrechen **********************} procedure AbbruchClick(Sender: TObject); {***************** Einlesen der Eingangstabelle *****************} procedure TabelleEinlesenClick(Sender: TObject); {********************* Zuweisen der Daten ***********************} procedure OKClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Eingabe : TEingabe; OKCLicked : boolean; implementation {$R *.dfm} uses Main; ..... procedure TEingabe.FormCreate(Sender: TObject); var JJ,MM,TT : word; function datumtostr(d : datum) : string; var s : string; {t,m,j : integer;} begin s:=inttostr(d.TT)+'.'+inttostr(d.MM)+'.'+inttostr(d.JJ); datumtostr:=s; end; begin {Standard-Werte setzten} ARKz.ItemIndex := 2; IRKz.ItemIndex := 1; WRKz.ItemIndex := 0; Rentendynamik.ItemIndex := 0; WRArtKz.ItemIndex := 0; DecodeDate(Date,JJ,MM,TT); Bilanztermin.Text := '31.12.'+inttostr(JJ); PA_Maenner.ItemIndex := 5; PA_Frauen.ItemIndex := 3; with angdaten.eindaten do begin Eingabe.Bilanztermin.Text := datumtostr(EinBil); Eingabe.Rechnungszins.Text := floattostr(EinRechZins); Eingabe.ARKz.ItemIndex := EinARKz; Eingabe.IRKz.ItemIndex := EinIRKz; Eingabe.WRKz.ItemIndex := EinWRKz; Eingabe.Rentendynamik.Text := floattostr(EinDynRenWert); Eingabe.WRArtKz.ItemIndex := EinWRArtKz; Eingabe.PA_Maenner.ItemIndex := EinPensAlter; Eingabe.PA_Frauen.ItemIndex := EinPensAlter; end; end; end. |
Re: Probleme mit showModal
In welcher Unit ist angdaten deklariert?
|
Re: Probleme mit showModal
moment, angdaten ist in main definiert. dies wiederum besteht aus Objekten, die in anderen Units definiert sind. Theoretisch müsste es ja so alles klappen, da das alte Projekt ja einwandfrei funktioniert...
|
Re: Probleme mit showModal
Kann es sein das es mehrere Variable mit der Bezeichnung Eingabe gibt?
|
Re: Probleme mit showModal
Wenn der Code aus Beitrag #1 bei ShowModal() die angegebene Exception wirft, dann ist die dort verwendete Variable Eingabe NIL. BreakPoint auf die Zeile und Variable auswerten sollte Klarheit bringen.
Grüße vom marabu |
Re: Probleme mit showModal
ähm, nein. Die Unit heißt Dialog, und mein Fenster Eingabe. Es gibt nur solche "ähnlichen" Bezeichnungen - wie die Unit EinObj allerdings mit dem Objekt EinDaten...
Sorry, marabu: verstehe kein Wort :oops: |
Re: Probleme mit showModal
marabu vermutet das gleiche wie ich: die Variable Eingabe die im Hauptprogramm instantiiert wird ist nicht identisch mir der, auf welche du das .ShowModal anwendest.
|
Re: Probleme mit showModal
Hallo Markus,
ich bin mir nicht sicher, ob die Formulierung in Beitrag #5 auf eine korrekte Instanziierung des Objektes Eingabe schließen lässt. marabu |
Re: Probleme mit showModal
und wie kann ich das überprüfen?
Also muss ich die Eingabe nochmal in main instantiieren (identisch wie in Dialog)?! |
Re: Probleme mit showModal
@ksh Vielleicht wäre es ja sinnvoll, wenn du mal die Projektdatei (.dpr) postest.
|
Re: Probleme mit showModal
hab so das Gefühl, dass es damit zusammenhängt. Leider ist mein Wissenstand nicht soweit :roll:
Delphi-Quellcode:
program Projekt;
uses Forms, Main in 'Main.pas' {MainWindow}; {$R *.res} begin Application.Initialize; Application.CreateForm(TMainWindow, MainWindow); Application.Run; end. |
Re: Probleme mit showModal
Aha, hier wird Eingabe also nicht intstantiiert!
Zitat:
|
Re: Probleme mit showModal
habe ich doch am Anfang?!
Hilfe! Komme mir gerade wirklich saublöd vor! :cry: |
Re: Probleme mit showModal
ok, wer stand auf meinem Schlauch?!
Jedenfalls danke fürs runtergehen und für die Hilfe!!! :wink: manchmal sieht man den code vor lauter code nicht :wall: |
Re: Probleme mit showModal
Sorry. ;-)
Wo in deinem Code wird die Instanz der Eingabe-Klasse den erzeugt? Du hast geschrieben, daß du sie mit CreateForm erzeugtst, das macht man im Allgemeinen im Hauptprogramm oder halt dynamisch mit T<Klasse>.Create;
Delphi-Quellcode:
Wenn die Instantiierung hier nicht steht solltest du sie hier einfügen
procedure TMainWindow.NeuClick(Sender: TObject);
begin // ... <-- Steht hier was? if Eingabe.ShowModal = mrOK then begin RechnePersDaten(AngDaten.EinDaten,AngDaten.PersDaten); RechneRentDaten(AngDaten.EinDaten,AngDaten.PersDaten,AngDaten.RentDaten); ShowTab; SpeichernUnter.Enabled:=True; Speichern.Enabled:=False; Bearbeiten.Enabled:=True; Drucken.Enabled:=True; end; end; |
Re: Probleme mit showModal
da ich sie nicht in main instantiiert habe, muss ich in die dpr vervollständigen! klappt also alles!
Wünsche euch noch ein schönes WE! :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 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