Einzelnen Beitrag anzeigen

mikeSK

Registriert seit: 20. Nov 2008
4 Beiträge
 
#10

Re: [delphix] ctrl-alt-del fehler canvas does not allow draw

  Alt 20. Nov 2008, 16:44
Also ich benutzte CPU listing.
Problem ist in diese Funktion: TCanvas.RequiredState

Google kann helfen. Auch in Delphi Code gibt es Bugs:
http://qc.codegear.com/wc/qcmain.aspx?d=5132
Aber dieser Bug hilft nicht.

Dann habe ich diese Procedure gefixt (in Graphics.pas):
Es funkcioniert sehr gut, aber ich muss noch ein paar Teste machen.

OLD PROCEDURE

Delphi-Quellcode:
procedure TCanvas.RequiredState(ReqState: TCanvasState);
var
  NeededState: TCanvasState;
begin
  NeededState := ReqState - State;
  if NeededState <> [] then
  begin
    if csHandleValid in NeededState then
    begin
      CreateHandle;
      if FHandle = 0 then
        raise EInvalidOperation.CreateRes(@SNoCanvasHandle);
    end;
    if csFontValid in NeededState then CreateFont;
    if csPenValid in NeededState then CreatePen;
    if csBrushValid in NeededState then CreateBrush;
    State := State + NeededState;
  end;
end;
NEW PROCEDURE

Delphi-Quellcode:
procedure TCanvas.RequiredState(ReqState: TCanvasState);
var
  NeededState: TCanvasState;
begin
  NeededState := ReqState - State;
  if NeededState <> [] then
  begin
    if csHandleValid in NeededState then
    begin
      CreateHandle;
      if FHandle = 0 then exit; //// ---- CHANGED LINE
      // raise EInvalidOperation.CreateRes(@SNoCanvasHandle); ////---- LINE SKIPPED
    end;
    if csFontValid in NeededState then CreateFont;
    if csPenValid in NeededState then CreatePen;
    if csBrushValid in NeededState then CreateBrush;
    State := State + NeededState;
  end;
end;
[edit=Admin]Delphi-Tags ergänzt. Künftig bitte selber machen, danke. Mfg, Daniel[/edit]
  Mit Zitat antworten Zitat