Einzelnen Beitrag anzeigen

Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

Re: Diese Anwendung wird aufgrund eines ungültigen Vorgangs

  Alt 10. Sep 2005, 15:40
hatte ich doch geschrieben ...


Ist aber so immer noch ein bisschen fehlerhaft: wie ich geschrieben habe, solltest du alle mit SelectObject in den DC gesetzten Handles wieder deselektieren, da sie ansonsten bei der Freigabe des DC gelöscht werden (DeleteDC bwz. ReleaseDC).

Code:
procedure TMyProg.ProgressWndProc(var Msg: TMessage);
var
  dc: HDC;
  [color=red]oldfont: THandle;[/color]
  rect: TRect;
  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);
      if suiSkinEngine1.Active = True then
        SetBkMode(dc, TRANSPARENT);
      SetTextColor(dc, clBlack);
      [color=red]oldfont := [/color]SelectObject(dc, MyProg_Main.Font.Handle);
      DrawText(dc, PChar(Text), length(Text), rect, DT_SINGLELINE or DT_VCENTER
        or DT_CENTER);
      [color=red]SelectObject(dc, oldfont);[/color]
    finally
      ReleaseDC(Progressbar1.Handle, dc);
    end;
  end;
end;
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat