Hi,
Ich habe ein sehr komisches Problem...
Ich habe ein Formular, in dem sich einige übliche Kompos befinden. (Genauer: TRadioGroup, TGroupBox, TButton, TJvDirectoryEdit, TJvFileNameEdit, TLabel, TProgressBar, TJvRichEdit, TRichEdit, TTimer, TPopupMenu, TJvTrayIcon).
Auf einmal (Ich habe keine Kompo geändert, hinzufügt oder gelöscht) wirft er beim Ändern der Fenstergröße eine
Exception.
Zitat:
---------------------------
Benachrichtigung über Debugger-Problem
---------------------------
In Projekt G:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Borland Studio-Projekte\VPlan\VPlan.exe trat ein Problem mit folgender Meldung auf: '
access violation at 0x0040d971: write of address 0x00030fe8'. Prozess angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Aber auch das nur unter bestimmten Umständen:
Das Programm analysiert ein paar dateien und lädt dann die daten hoch...die
AV kommt erst nachdem dies getan wurde!
zudem kann man sie ebenfalls verhindern indem man im OnResize zB ein ShowMessage('Resizing...') einfügt...
für mich absolut unerklärbar.
Das einzige was während diesem Analysieren einfluss auf TForm_Main (Forumlar) einfluss nimmt, sind folgende Sachen:
Delphi-Quellcode:
procedure TForm_Main.ColorLog(ID, Len: Integer; Col: TColor);
//bestimmten Teil im Log färben
begin
Rch_Log.SelStart:=ID;
Rch_Log.SelLength:=Len;
Rch_Log.SelAttributes.Color:=Col;
Rch_Log.SelLength:=0;
end;
procedure TForm_Main.Log(Value, Msg, Level: String; Typ: TLogLevel);
//Ereignis in Log ablegen und färben
var S, Datum: String;
begin
if FLogLevel>Typ then Exit;
Datum:=DateTimeToStr(Now);
if Level<>'' then Level:='['+Level+'] ';
S:=Datum + DSep + Level + Value + VSep + cLogTypes[Typ].Desc + ' (' + Msg + ')';
Rch_Log.Perform(WM_VSCROLL, SB_BOTTOM,0);
Rch_Log.Refresh;
end;
procedure TForm_Main.InitProgress(Max: Integer; Action: String);
begin //Progressbar Initialisieren
Prg_Progress.Max:=Max;
Prg_Progress.Min:=0;
Prg_Progress.Step:=1;
Lbl_Status.Caption:=Action;
Lbl_Status.Refresh;
FLastAkt:=Now;
end;
procedure TForm_Main.SetProgress(Progress: Integer = -1);
begin //Progressbar weitersetzen
if Progress=-1 then
Prg_Progress.StepIt
else
Prg_Progress.Position:=Progress;
Prg_Progress.Refresh;
if MillisecondsBetween(FLastAkt,Now)>1000 then Application.ProcessMessages;
end;
procedure TForm_Main.UnInitProgress;
begin //Progressbar zurücksetzen
Prg_Progress.Position:=0;
Lbl_Status.Caption:='Bereit';
end;
Mir ist das verhalten absolut unerklärlich, ich hoffe irgendwer kann mir wenigstens sagen wo ich anfangen könnte nach einem fehler zu suchen