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.