Einzelnen Beitrag anzeigen

Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#1

Diese Anwendung wird aufgrund eines ungültigen Vorgangs ...

  Alt 9. Sep 2005, 02:32
Mein Programm läuft unter Windows NT, 2000, XP und 2003 ohne Fehler, aber unter Win98 (VMWare) bekomme ich an unterschiedlichen Stellen (mal läufts, mal crashts) die folgende Meldung:
Zitat von Diese Anwendung wird aufgrund eines ungültigen Vorgangs geschlossen.
Wenden Sie sich an den Hersteller, falls das Problem weiterhin besteht.

:
MYPROG verursachte einen Fehler durch eine ungültige Seite
in Modul <Unbekannt> bei 0000:00000000.
Register:
EAX=00000000 CS=0000 EIP=00000000 EFLGS=00000000
EBX=00000000 SS=0000 ESP=00000000 EBP=00000000
ECX=00000000 DS=0000 ESI=00000000 FS=0000
EDX=00000000 ES=0000 EDI=00000000 GS=0000
Bytes bei CS:EIP:

Stapelwerte:
Danach hilft nur noch ein Reset ... Was mir Windows mit dieser Fehlermeldung sagen will, erschließt sich mir jedoch auch nicht

Ich habe on Create meines Form die WndProc meiner ProgressBar überschrieben:
Delphi-Quellcode:
    OldProgressWndProc := ProgressBar1.WindowProc;
ProgressBar1.WindowProc := ProgressWndProc;

...

procedure TMyProg.ProgressWndProc(var Msg: TMessage);
var
  dc: HDC;
  rect: TRect;
  myfont: Cardinal;
  Text: string;
begin
  OldProgressWndProc(Msg);
  if ((Msg.Msg = 1026) or (Msg.Msg = WM_PAINT)) and (Timer3.Enabled = False)
    then
    // Wenn die Progressbar neugezeichnet wurde,
    // und somit die Zahl weg ist: Prozentzahl neu draufpinseln
  begin
    if (ProgressBar1.Max = 0) or (ProgressBar1.Position = 0) then
      Text := '0%'
    else if ProgressBar1.Max = ProgressBar1.Position then
      Text := '100%'
    else
      Text := IntToStr(Trunc(100 / ProgressBar1.Max * ProgressBar1.Position))
        + '%';
    dc := GetWindowDC(Progressbar1.Handle);
    try
      rect := ProgressBar1.ClientRect;
      //InvalidateRect(Progressbar1.Handle, @rect, True);
      myfont := CreateFont(MyProg_Main.Font.Size {-11}, 0, 0, 0, 0, 0, 0, 0,
        ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
        DEFAULT_PITCH, PAnsiChar(MyProg_Main.Font.Name) {'Verdana'});
      if suiSkinEngine1.Active = True then
        SetBkMode(dc, TRANSPARENT);
      SetTextColor(dc, clBlack);
      SelectObject(dc, myfont);
      DrawText(dc, PChar(Text), length(Text), rect, DT_SINGLELINE or DT_VCENTER
        or DT_CENTER);
    finally
      DeleteObject(myfont);
      ReleaseDC(Progressbar1.Handle, dc);
    end;
  end;
end;
Wenn ich die WndProc nicht überschreibe, dann läuft das Programm ohne Probleme. Was kann bei dieser Funktion unter Win9x einen kompletten Systemabsturz verursachen
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat