AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi [delphix] ctrl-alt-del fehler canvas does not allow drawing
Thema durchsuchen
Ansicht
Themen-Optionen

[delphix] ctrl-alt-del fehler canvas does not allow drawing

Ein Thema von mikeSK · begonnen am 20. Nov 2008 · letzter Beitrag vom 20. Nov 2008
Antwort Antwort
mikeSK

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

[delphix] ctrl-alt-del fehler canvas does not allow drawing

  Alt 20. Nov 2008, 11:45
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 20. Nov 2008, 11:55
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
441 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 20. Nov 2008, 11:59
Zitat von Luckie:
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.
Wie macht man das ? Gibt es dafür Beispiele oder ein Tutorial ?
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

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

  Alt 20. Nov 2008, 12:01
Siehe Delphi Hilfe Delphi-Referenz durchsuchenSynchronize.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mikeSK

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

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

  Alt 20. Nov 2008, 12:03
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

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

  Alt 20. Nov 2008, 12:05
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#7

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

  Alt 20. Nov 2008, 14:22
steht doch im Titel

Zeig doch mal deinen Code, mit dem du versuchst auf das Canvas zu zeichnen...
  Mit Zitat antworten Zitat
mikeSK

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

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

  Alt 20. Nov 2008, 14:31
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:
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;
Ich versuchte auch:
Delphi-Quellcode:
try
  textout...
except
end;
funcioniert nicht

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]
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#9

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

  Alt 20. Nov 2008, 15:05
Hmm bis auf das doppelte
if not dxdraw.CanDraw then exit; sieht eigentlich alles ganz richtig aus.

Liegt es vielleicht an deiner DirectX-Version?
Oder gar an deinem Rechner?

Schon mal an einem anderen Rechner versucht, das Programm auszuführen?
  Mit Zitat antworten Zitat
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz