Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

OnResize => AV, Wenn OnResize leer...

  Alt 29. Mai 2006, 16:43
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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat