![]() |
[delphix] ctrl-alt-del fehler canvas does not allow drawing
hallo,
ich habe ein Timer, ich benutze Canvas. wenn ich presse cltr+alt+del, windows-sicherheit Fenster zeigt. Dann presse ich esc. ein dialog ziegt "canvas does not allow drawing" wie kann man das umgehen? ich habe viel versucht, aber nichts funkcioniert. canvas.lock und try und finally hilft nicht. est is auch so, wenn du ein demo von undelphix startest. ist das delphi problem? oder undeplhix problem? ich benutze delphi 7 enterprise und win xp Michal |
Re: [delphix] ctrl-alt-del fehler canvas does not allow draw
Zeichnest du in einem Thread auf den Canvas einer VCL Komponente? Wenn ja, musst du dies mit dem hauptthread synchronisieren, da die VCL nicht threadsafe ist.
|
Re: [delphix] ctrl-alt-del fehler canvas does not allow draw
Zitat:
|
Re: [delphix] ctrl-alt-del fehler canvas does not allow draw
Siehe Delphi Hilfe
![]() |
Re: [delphix] ctrl-alt-del fehler canvas does not allow draw
das weis ich nicht.
ich zeichne ins form.dxdraw.surface.canvas.pixels[... nur ein Pixel ist genug. was is Hauptthread? und wie kann ich die Synchronization machen? wo im Code kann ich definieren, dass das dialog box "canvas does not allow drawing" nicht angerufen ist? |
Re: [delphix] ctrl-alt-del fehler canvas does not allow draw
Du benutzt anscheinend DirectX, aber damit kenne ich mich auch nicht aus.
Wäre übrigens schön, wenn man mal solche Informationen gleich im ersten Beitrag bekommen würde. :? |
Re: [delphix] ctrl-alt-del fehler canvas does not allow draw
steht doch im Titel ;-)
Zeig doch mal deinen Code, mit dem du versuchst auf das Canvas zu zeichnen... |
Re: [delphix] ctrl-alt-del fehler canvas does not allow draw
Code ist sehr einfach. Aber die Nachricht "canvas does not allow drawing" ist schrecklich. Alle Demo Beispiele reagieren auf ctlr+alt+del mit diesem DialogBox.
Delphi-Quellcode:
Ich versuchte auch:
procedure TMainForm.DXTimerTimer(Sender: TObject; LagCount: Integer);
begin if not DXDraw.CanDraw then exit; DXDraw.Surface.Fill(0); with DXDraw.Surface.Canvas do begin Brush.Style := bsClear; Font.Color := clWhite; Font.Size := 30; if not dxdraw.CanDraw then exit; Textout(30, 30, DateTimeToStr(Now)); Release; { Indispensability } end; DXDraw.Flip; end;
Delphi-Quellcode:
funcioniert nicht
try
textout... except end; canvas.lock hilft auch nicht auch Andorra hat diese Probleme (ohne Dialog box, aber the Screen (form) ist schwarz ohne Update) [edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen :-) Mfg, SirThornberry[/edit] |
Re: [delphix] ctrl-alt-del fehler canvas does not allow draw
Hmm bis auf das doppelte
Delphi-Quellcode:
sieht eigentlich alles ganz richtig aus.
if not dxdraw.CanDraw then exit;
Liegt es vielleicht an deiner DirectX-Version? Oder gar an deinem Rechner? Schon mal an einem anderen Rechner versucht, das Programm auszuführen? |
Re: [delphix] ctrl-alt-del fehler canvas does not allow draw
Also ich benutzte CPU listing.
Problem ist in diese Funktion: TCanvas.RequiredState Google kann helfen. Auch in Delphi Code gibt es Bugs: ![]() 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:
NEW PROCEDURE
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;
Delphi-Quellcode:
[edit=Admin]Delphi-Tags ergänzt. Künftig bitte selber machen, danke. ;-) Mfg, Daniel[/edit]
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz