Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exception NACH Prozeduren (https://www.delphipraxis.net/65277-exception-nach-prozeduren.html)

Angel4585 14. Mär 2006 14:39


Exception NACH Prozeduren
 
Hallo zusammen,

ich hab ein RIESEN Problem:

ich hab eine MDI Anwendung in der ich mit

Delphi-Quellcode:
TMeinMDIChild.Create(tfMain);
ein MDI Child erzeuge.

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

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:

NicoDE 14. Mär 2006 14:46

Re: Exception NACH Prozeduren
 
Klingt nach unbeabsichtigtem Überschreiben von Speicherstellen - außer Suchen und Debuggen hilft da nicht viel.

Angel4585 14. Mär 2006 14:52

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:
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;
Diese Case-Anweisung hab ich schon paarmal überarbeitet in den letzten 1,5 Stunden.. deswegen ists nichtmehr ganz so wie ichs oben geschrieben hab...

Angel4585 14. Mär 2006 14:58

Re: Exception NACH Prozeduren
 
Habs grad(hoffentlich endgültig) gelöst:

So funktioniert es:
Delphi-Quellcode:
Actionmanager.actionbars.actionbars[0].items[0].action:=nil;
Actionmanager.actionbars.actionbars[0].items[0].action:=neue_action;
aber warum funktioniert das und das andere(ohne nil setzen) nicht? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz