Autor Beitrag
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mi 19.09.12 10:18 
Hallo liebe Delphi-Helfer :)

ich habe ein MDI-Haupt-Formular (fm1) und ein reagierendes MDI-Formular (fm2) mit 2 Edit-Feldern.
Mit Tfm2.Create(Self) erstelle und öffne ich das 2. Formular.
Wenn ich dann auf den Hinzu-Schalter auf dem 1. Formular drücke, seh ich mein ShowMessage und dann eine Fehlermeldung:

Im Projekt Test22.exe ist eine Exception der Klasse C0000005 aufgetretten. Meldung: 'access violation at 0x0045bf66: read of address 0x000002e0'. Prozeß wurde angehalten.

Weiss einer wie das zustande kommt und wie man das beheben kann?

Danke für die Hilfe :)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure Tfm1.btnHinzuClick(Sender: TObject);
begin
  fm2._Hinzu;
end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure Tfm2._Hinzu;
begin
  ShowMessage('Test');
  if not edName.Enabled then
  begin
    edName.Enabled:= True;
    edPasswort.Enabled:= True;
  end;
end;


PS: Nein, ich möchte den Schalter Hinzu nicht auf fm2 haben.

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Sybok Factor
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50
Erhaltene Danke: 5

Win XP, Win Vista
Delphi 2010 Professional
BeitragVerfasst: Mi 19.09.12 10:50 
Zitat:
PS: Nein, ich möchte den Schalter Hinzu nicht auf fm2 haben.
???

Access Violation zeigt meist an, dass du ein Objekt ansprichst, dass nicht vorhanden ist. Ist das Formular erzeugt / vorhanden?

_________________
Jetzte michse verstehen dein Problem.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 19.09.12 10:58 
user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
Mit Tfm2.Create(Self) erstelle und öffne ich das 2. Formular.
Und du packst das auch in die Variable fm2? (Denn sonst ist die schlicht leer.)
Und du hast auch nur ein Formular vom Typ Tfm2? (Denn sonst ist in der Variablen ja nur eines der Formulare, nämlich das zuletzt erstellte, und das existiert vielleicht gar nicht mehr.)
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mi 19.09.12 12:25 
Ich sehe das Formular mit seinen 2 Edit-Feldern.
Packe ich eine CheckBox auf fm2, kann ich die auch anklicken.
FormCreate stellt das Formular auch auf maximiert ein.

Das kann soweit ich weiss, nur ein Formular das auch wirklich existiert.
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Mi 19.09.12 12:34 
Wie jaenicke schon schrieb:

> Und du packst das auch in die Variable fm2

Wenn Du das Formular erzeugst ist es erstmal da und zeigt sich.
Um auf dessen Elemente zuzugreifen mußt Du aber irgendeine Variable haben in der der Verweis auf das erzeugte Formular steht.
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Mi 19.09.12 12:38 
Ich hatte auch eine Variable, aber die falsche :lol:

Danke für die Hilfe.
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 21.09.12 14:35 
Jetzt bekomm ich schon wieder diese Fehlermeldung.
Allerdings hat sie diesmal eine seltsame Eigenart...

Ich rufe die Funktion auf:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TfmHaupt._Formular_laden(Index: Integer);
var
  f : Integer;
begin
  // Formular erstellen / füllen
  ShowMessage('');
  if psAktivesFormular <> nil then
  begin
    MessageDlg('Es ist bereits ein Formular offen.', mtInformation, [mbOK], 0);
    EXIT;
  end;
...

Ohne das ShowMessage = Fehlermeldung
ShowMessage('') = keine Fehlermeldung
ShowMessage('.') = keine Fehlermeldung
ShowMessage('..') = keine Fehlermeldung
ShowMessage('...') = Fehlermeldung
ShowMessage('abc') = keine Fehlermeldung
ShowMessage('abcd') = Fehlermeldung
ShowMessage('123') = keine Fehlermeldung
ShowMessage('1234') = Fehlermeldung

Gibt es dafür auch eine Erklärung?

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 21.09.12 14:51 
Moin!

user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TfmHaupt._Formular_laden(Index: Integer);
var
  f : Integer;
begin
  // Formular erstellen / füllen
Soll der Kommentar andeuten, dass da Code steht? Wenn ja, welcher? :lupe:

user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
Ohne das ShowMessage = Fehlermeldung
Was soll "Fehlermeldung" genau bedeuten? :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Jakane Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 21.09.12 15:04 
user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:

Im Projekt Test22.exe ist eine Exception der Klasse C0000005 aufgetretten. Meldung: 'access violation at 0x0045bf66: read of address 0x000002e0'. Prozeß wurde angehalten.


Es ist immer die selbe Fehlermeldung.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
procedure TfmHaupt._Formular_laden(Index: Integer);
var
  f : Integer;
begin
  // Formular erstellen / füllen
  ShowMessage('');
  if psAktivesFormular <> nil then
  begin
    MessageDlg('Es ist bereits ein Formular offen.', mtInformation, [mbOK], 0);
    EXIT;
  end;
  // ListBox Formulare füllen
  if Index = -1 then
  begin
    lbFormularName.Items.Clear;
    lbFormularCaption.Items.Clear;
    For f:= 0 to OLMenue.Count - 1 do
    begin
      _Formular_laden(f);
      lbFormularName.Items.Add(psAktivesFormular.Name);
      lbFormularCaption.Items.Add(psAktivesFormular.Caption);
      psAktivesFormular.Close;
      psAktivesFormular:= nil;
    end;
    pLoginAnwender.Visible:= False;
    EXIT;
  end;
  // Formular laden
  Case Index of
    00: fmStammArtikel:= TfmStammArtikel.Create(Self);
    01: fmStammArtikelbewertungen:= TfmStammArtikelbewertungen.Create(Self);
    02: fmStammArtikelgruppen:= TfmStammArtikelgruppen.Create(Self);
    03: fmStammMengeneinheiten:= TfmStammMengeneinheiten.Create(Self);
    04: fmStammLagerorte:= TfmStammLagerorte.Create(Self);
    05: fmStammEinkaufsquellen:= TfmStammEinkaufsquellen.Create(Self);
    06: fmStammKalender:= TfmStammKalender.Create(Self);
    07: fmStammLieferanten:= TfmStammLieferanten.Create(Self);
    08: fmStammLieferantenbewertungen:= TfmStammLieferantenbewertungen.Create(Self);
    09: fmFertigungEssen:= TfmFertigungEssen.Create(Self);
    10: fmFertigungEssensplan:= TfmFertigungEssensplan.Create(Self);
    11: fmFertigungHausaufgaben:= TfmFertigungHausaufgaben.Create(Self);
    12: fmFertigungTermine:= TfmFertigungTermine.Create(Self);
    13: fmLagerArtikeleingang:= TfmLagerArtikeleingang.Create(Self);
    14: fmLagerArtikeleingangsuebersicht:= TfmLagerArtikeleingangsuebersicht.Create(Self);
    15: fmLagerArtikeluebersicht:= TfmLagerArtikeluebersicht.Create(Self);
    16: fmEinkaufBedarfslisten:= TfmEinkaufBedarfslisten.Create(Self);
    17: fmEinkaufUebersicht:= TfmEinkaufUebersicht.Create(Self);
    18: fmEinkaufPreise:= TfmEinkaufPreise.Create(Self);
    19: fmEinkaufFestkosten:= TfmEinkaufFestkosten.Create(Self);
    20: fmVerkaufLohnGehalt:= TfmVerkaufLohnGehalt.Create(Self);
    21: fmVerkaufSonstige:= TfmVerkaufSonstige.Create(Self);
    22: fmVerkaufUmsatzstatistik:= TfmVerkaufUmsatzstatistik.Create(Self);
    23: fmKalkulationNeueRezepte:= TfmKalkulationNeueRezepte.Create(Self);
    24: fmSystemAnwenderkonto:= TfmSystemAnwenderkonto.Create(Self);
    25: fmSystemDesign:= TfmSystemDesign.Create(Self);
    26: fmSystemAdministator:= TfmSystemAdministator.Create(Self);
  end;
  Case Index of
    00: psAktivesFormular:= fmStammArtikel;
    01: psAktivesFormular:= fmStammArtikelbewertungen;
    02: psAktivesFormular:= fmStammArtikelgruppen;
    03: psAktivesFormular:= fmStammMengeneinheiten;
    04: psAktivesFormular:= fmStammLagerorte;
    05: psAktivesFormular:= fmStammEinkaufsquellen;
    06: psAktivesFormular:= fmStammKalender;
    07: psAktivesFormular:= fmStammLieferanten;
    08: psAktivesFormular:= fmStammLieferantenbewertungen;
    09: psAktivesFormular:= fmFertigungEssen;
    10: psAktivesFormular:= fmFertigungEssensplan;
    11: psAktivesFormular:= fmFertigungHausaufgaben;
    12: psAktivesFormular:= fmFertigungTermine;
    13: psAktivesFormular:= fmLagerArtikeleingang;
    14: psAktivesFormular:= fmLagerArtikeleingangsuebersicht;
    15: psAktivesFormular:= fmLagerArtikeluebersicht;
    16: psAktivesFormular:= fmEinkaufBedarfslisten;
    17: psAktivesFormular:= fmEinkaufUebersicht;
    18: psAktivesFormular:= fmEinkaufPreise;
    19: psAktivesFormular:= fmEinkaufFestkosten;
    20: psAktivesFormular:= fmVerkaufLohnGehalt;
    21: psAktivesFormular:= fmVerkaufSonstige;
    22: psAktivesFormular:= fmVerkaufUmsatzstatistik;
    23: psAktivesFormular:= fmKalkulationNeueRezepte;
    24: psAktivesFormular:= fmSystemAnwenderkonto;
    25: psAktivesFormular:= fmSystemDesign;
    26: psAktivesFormular:= fmSystemAdministator;
  end;
end;
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 21.09.12 17:02 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  if psAktivesFormular <> nil then
  begin
    MessageDlg('Es ist bereits ein Formular offen.', mtInformation, [mbOK], 0);
    EXIT;
  end;

  // ListBox Formulare füllen
  if Index = -1 then
  begin
    lbFormularName.Items.Clear;
    lbFormularCaption.Items.Clear;
    For f:= 0 to OLMenue.Count - 1 do
    begin
      _Formular_laden(f);
      lbFormularName.Items.Add(psAktivesFormular.Name);
      lbFormularCaption.Items.Add(psAktivesFormular.Caption);
      psAktivesFormular.Close;
      psAktivesFormular:= nil;


Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
Moderiert von user profile iconMartok: Highlight-Tags hinzugefügt

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS