![]() |
Exception NACH Prozeduren
Hallo zusammen,
ich hab ein RIESEN Problem: ich hab eine MDI Anwendung in der ich mit
Delphi-Quellcode:
ein MDI Child erzeuge.
TMeinMDIChild.Create(tfMain);
In diesem Child hab ich einen TActionmanager und eine TActionToolBar Dazu hab ich mehrere TActions erzeugt, von denen zwei sich "abwechseln". D.h.mit dieser Prozedur ändere ich die Action auf der ActionToolbar:
Delphi-Quellcode:
NACHDEM diese Prozedur ausgeführt wurde, jedoch nicht bei jeder Ausführung kommt eine Zugriffsverletzung, die aber nirgends in meinem Quelltext abfangbar ist. Nur im Application.OnException komm ich an die ran.
procedure ChangeModus(AModus : TModus);
begin case AModus of erstermodus:Actionmanager.actionbars.actionbars[0].Items[0]:=ErsteAction; zweitermodus :Actionmanager.actionbars.actionbars[0].Items[0]:=ZweiteAction; end; end; Also: Nachdem das Programm diese Prozedur durchlaufen hat kommt die Exception, obwohl damit sämtlichen Prozeduren, Ereignisse oder sonstwas erledigt sind und einfach nur die Actions getauscht wurden. Info: 1.Ich hab keine Threads nebenher laufen. 2.Wenn ich die Case weglasse und einfach nur immer das Gleiche zuweise kommt der Fehler nicht. 3.Der Fehler tritt NUR in diesem speziellen Fenster auf und nicht in anderen, die jedoch genau die gleichen lokalen Prozeduren verwenden. Verwunderlich ist aber vorallem, dass der Fehler nicht bei jedem Durchlauf auftritt, sondern nur "wenn er Lust dazu hat" Hatte jemand schonmal so ein Problem und weis vielleicht was das sein könnte? Danke schonmal MfG :angel: |
Re: Exception NACH Prozeduren
Klingt nach unbeabsichtigtem Überschreiben von Speicherstellen - außer Suchen und Debuggen hilft da nicht viel.
|
Re: Exception NACH Prozeduren
ich hab ca. 20 andere Formulare, die jeweils haargenau die selben Variablen ud die selben Prozeduren verwenden und bei denen es einwandfrei funktioniert.
Ausserdem schreib ich nirgends was in Variablen oder so.. Das hier ist der komplette Code:
Delphi-Quellcode:
Diese Case-Anweisung hab ich schon paarmal überarbeitet in den letzten 1,5 Stunden.. deswegen ists nichtmehr ganz so wie ichs oben geschrieben hab...
procedure TtfKonten.LoadKontenToTreeView;
begin with tvKonten.Items do begin AddChild(nil,cKontodaten); AddChild(nil,cAnsprechpartner); AddChild(nil,cOptionen); AddChild(nil,cNotizen); AddChild(nil,cZahlungen); end; end; {******************************************************************************} procedure TtfKonten.FormCreate(Sender: TObject); begin OpenedForms[ftKonten]:=True; if Owner is TtfMain then FormStyle:=fsMDIChild; ChangeMode(BenutzerEinstellungen.ErsteModulAnsicht); ChangeShowedPart(spZahlung); LoadKontenToTreeView; end; {******************************************************************************} procedure TtfKonten.FormClose(Sender: TObject; var Action: TCloseAction); begin OpenedForms[ftKonten]:=False; Action:=caFree; end; {******************************************************************************} procedure TtfKonten.FilterActivate(AFActive : Boolean); var b : TBitmap; begin //unvollständig if AFActive then sbFilter.Action:=Filter_deactivate else sbFilter.Action:=Filter_Activate; //Bild auf Speedbutton setzen b:=TBitmap.Create; AMKonten.Images.GetBitmap(TAction(sbFilter.Action).ImageIndex,b); sbFilter.Glyph:=b; b.Free; end; {******************************************************************************} procedure TtfKonten.Filter_DeactivateExecute(Sender: TObject); begin FilterActivate(False); end; {******************************************************************************} procedure TtfKonten.Filter_ActivateExecute(Sender: TObject); begin FilterActivate(True); end; {******************************************************************************} procedure TtfKonten.EditExecute(Sender: TObject); begin ChangeMode(mtEdit); end;//Hier ist ein Haltepunkte , bis hierhin funkitoniert alles einwandfrei, erst danach kommt ein Fehler {******************************************************************************} procedure TtfKonten.BrowseExecute(Sender: TObject); begin ChangeMode(mtBrowse);// end;//Hier ist ein Haltepunkte , bis hierhin funkitoniert alles einwandfrei, erst danach kommt ein Fehler {******************************************************************************} procedure TtfKonten.SchliessenExecute(Sender: TObject); begin Close; end; {******************************************************************************* ****In ChangeMode wird der Modus in den Übergebenen Modus gewechselt************ ****hierbei wird das jeweilige Panel im Zentrum ******************************** ****und der entsprechende Button in der Toolbar angezeigt*********************** *******************************************************************************} procedure TtfKonten.ChangeMode(AMode : TModeTypes); var a: TAction; begin pEditMode.Visible:= AMode = mtEdit; PBrowseMode.Visible:= AMode = mtBrowse; pZahlungen.Visible:= AMode = mtZahlung; if AMode = mtEdit then a:=Browse else a:=Edit; AMKonten.ActionBars.BeginUpdate; AMKonten.ActionBars[0].Items[7].Action:=a;//Hier weise ich die Action zu!! {if AMode = mtBrowse then AMKonten.ActionBars[0].Items[7].Action:=Edit else AMKonten.ActionBars[0].Items[7].Action:=Browse; AMKonten.ActionBars.EndUpdate; Caption:=Format('Kontenübersicht [%s]',[ModeStrings[AMode]]);} end; {******************************************************************************} procedure TtfKonten.tvKontenChange(Sender: TObject; Node: TTreeNode); begin { try with tvKonten do begin ChangeShowedPart(spNone); if Selected.Text = cKontodaten then ChangeShowedPart(spKontodaten) else if Selected.Text = cOptionen then ChangeShowedPart(spOptionen) else if Selected.Text = cNotizen then ChangeShowedPart(spNotizen) else if Selected.Text = cAnsprechpartner then ChangeShowedPart(spAnsprechpartner) else if Selected.Text = cNotizen then ChangeShowedPart(spNotizen); end; except end;} end; {******************************************************************************} procedure TtfKonten.ChangeShowedPart(APart : TShowingParts); begin pKontodaten.Visible:=APart = spKontodaten; pNotizen.Visible:=APart = spNotizen; pOptionen.Visible:= APart = spOptionen; pZahlung.Visible:= APart = spZahlung; pAnsprechpartner.Visible:= APart = spAnsprechpartner; end; {******************************************************************************} procedure TtfKonten.Zahlungen_zuweisenExecute(Sender: TObject); begin ChangeMode(mtZahlung); end; |
Re: Exception NACH Prozeduren
Habs grad(hoffentlich endgültig) gelöst:
So funktioniert es:
Delphi-Quellcode:
aber warum funktioniert das und das andere(ohne nil setzen) nicht? :gruebel:
Actionmanager.actionbars.actionbars[0].items[0].action:=nil;
Actionmanager.actionbars.actionbars[0].items[0].action:=neue_action; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:09 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