Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit showModal (https://www.delphipraxis.net/66095-probleme-mit-showmodal.html)

ksh 24. Mär 2006 16:45


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:
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;
Leider kommt immer, sobald ich den Menüpunkt ausführen will: Access violation at address 00471686 in module' Project.exe'. Read of address 00000000.
Danach immer ein Verweis auf diese Zeile.

Heißt das jetzt, dass ein Verweis in dem Project fehlt oder wie?

mkinzler 24. Mär 2006 16:48

Re: Probleme mit showModal
 
Wurde Eingabe instantiiert? ( Eingabe = TEingabe.Create oder createForm )

ManuMF 24. Mär 2006 16:50

Re: Probleme mit showModal
 
Hallo,

hast du die Unit Dialog unter uses (ganz oben) aufgelistet?

Gruß,
ManuMF

shmia 24. Mär 2006 16:51

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;

ksh 24. Mär 2006 17:06

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...

mkinzler 24. Mär 2006 17:08

Re: Probleme mit showModal
 
Poste mal die Klassendefinition.

ksh 24. Mär 2006 17:11

Re: Probleme mit showModal
 
sorry, steh grad völlig auf dem schlauch! welche denn? :oops:

mkinzler 24. Mär 2006 17:14

Re: Probleme mit showModal
 
TEingabe.

ksh 24. Mär 2006 17:17

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.

mkinzler 24. Mär 2006 17:24

Re: Probleme mit showModal
 
In welcher Unit ist angdaten deklariert?

ksh 24. Mär 2006 17:28

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...

mkinzler 24. Mär 2006 17:40

Re: Probleme mit showModal
 
Kann es sein das es mehrere Variable mit der Bezeichnung Eingabe gibt?

marabu 24. Mär 2006 17:43

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

ksh 24. Mär 2006 17:48

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:

mkinzler 24. Mär 2006 18:03

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.

marabu 24. Mär 2006 18:07

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

ksh 24. Mär 2006 18:10

Re: Probleme mit showModal
 
und wie kann ich das überprüfen?

Also muss ich die Eingabe nochmal in main instantiieren (identisch wie in Dialog)?!

mkinzler 24. Mär 2006 18:11

Re: Probleme mit showModal
 
@ksh Vielleicht wäre es ja sinnvoll, wenn du mal die Projektdatei (.dpr) postest.

ksh 24. Mär 2006 18:22

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.

mkinzler 24. Mär 2006 18:28

Re: Probleme mit showModal
 
Aha, hier wird Eingabe also nicht intstantiiert!
Zitat:

also, der Dialog wird instantiiert mit FormCreate und ist natürlich auch in der main bei den uses mit drin!
Wo denn ? Poste mal den Code, in dem du Eingabe öffnen willst.

ksh 24. Mär 2006 18:32

Re: Probleme mit showModal
 
habe ich doch am Anfang?!

Hilfe! Komme mir gerade wirklich saublöd vor! :cry:

ksh 24. Mär 2006 18:37

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:

mkinzler 24. Mär 2006 18:39

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:
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;
Wenn die Instantiierung hier nicht steht solltest du sie hier einfügen

ksh 24. Mär 2006 18:48

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