Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Fehlermeldung bei Prozeduraufruf aus einem anderen Formular
Jakane - Mi 19.09.12 10:18
Titel: Fehlermeldung bei Prozeduraufruf aus einem anderen Formular
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 :)
Delphi-Quelltext
1: 2: 3: 4:
| procedure Tfm1.btnHinzuClick(Sender: TObject); begin fm2._Hinzu; end; |
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
Narses: Code- durch Delphi-Tags ersetzt
Sybok Factor - 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?
jaenicke - Mi 19.09.12 10:58
Jakane hat folgendes geschrieben : |
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 - 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 - 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 - Mi 19.09.12 12:38
Ich hatte auch eine Variable, aber die falsche :lol:
Danke für die Hilfe.
Jakane - 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:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TfmHaupt._Formular_laden(Index: Integer); var f : Integer; begin 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
Narses: Code- durch Delphi-Tags ersetzt
Narses - Fr 21.09.12 14:51
Moin!
Jakane hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TfmHaupt._Formular_laden(Index: Integer); var f : Integer; begin | |
Soll der Kommentar andeuten, dass da Code steht? Wenn ja, welcher? :lupe:
Jakane hat folgendes geschrieben : |
Ohne das ShowMessage = Fehlermeldung |
Was soll "Fehlermeldung" genau bedeuten? :nixweiss:
cu
Narses
Jakane - Fr 21.09.12 15:04
Jakane hat folgendes geschrieben : |
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.
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 ShowMessage(''); if psAktivesFormular <> nil then begin MessageDlg('Es ist bereits ein Formular offen.', mtInformation, [mbOK], 0); EXIT; end; 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; 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 - Fr 21.09.12 17:02
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; 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
Martok: Delphi-Tags hinzugefügt
Moderiert von
Martok: Highlight-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!