![]() |
TExpander unter Delphi 10.4.2 Fehler
Hallo,
ich belege per Code einen Expander mit Controls und male auch darauf
Delphi-Quellcode:
Das funktionierte unter Delphi 10.3 problemlos, jetzt bekomme ich bei EndScene die Meldung:
with ExpanderDokumente.Canvas do
begin BeginScene(); py := 30; br := ExpanderDokumente.Width - 10; Font.Family := 'Arial'; ... EndScene(); "Kein Eigentümer der Objektsperre" Was ist denn da schon wieder passiert? Ciao Stefan |
AW: TExpander unter Delphi 10.4.2 Fehler
Probiere mal testweise das with aufzulösen, indem du stattdessen eine kurze lokale Variable für den Canvas nimmst.
BeginScene hat auch ein boolschen Rückgabewert, den du vor dem Zeichnen prüfen kannst.
Delphi-Quellcode:
if MyCanvasVariable.BeginScene then
begin //...Drawing... MyCanvasVariable.EndScene; end; |
AW: TExpander unter Delphi 10.4.2 Fehler
Danke, den Ansatz werde ich mal ausprobieren
Ciao Stefan |
AW: TExpander unter Delphi 10.4.2 Fehler
Hallo,
ich habe mal in die Richtung umgebaut:
Delphi-Quellcode:
und der if c.BeginScene then Zweig wird nicht durchlaufen, BeginScene scheint also fehlzuschlagen, warum?
c := ExpanderDokumente.Canvas;
if c.BeginScene then begin py := 30; // oberste zeichenposition br := ExpanderDokumente.Width - 10; c.Font.Family := 'Arial'; c.Font.Size := 12; ... Auch in folgendem Code greift BeginScene nicht:
Delphi-Quellcode:
Und ein abgewandeltes Beispiel aus der Embarcadero Doku ebenfalls nicht
b := TBitmap.Create;
if b.Canvas.BeginScene then begin i := 4; b.canvas.EndScene; end;
Delphi-Quellcode:
Ciao
b := TImage.Create(self);
if b.Bitmap.Canvas.BeginScene then begin i := 4; b.canvas.EndScene; end; Stefan |
AW: TExpander unter Delphi 10.4.2 Fehler
Und hier nun Original Embarcadero:
Delphi-Quellcode:
Und wieder "Kein Eigentümer der Objektsperre"
procedure TForm2.Button2Click(Sender: TObject);
var MyRect: TRectF; begin // sets the circumscribed rectangle of the ellipse MyRect := TRectF.Create(50, 40, 200, 270); // draws the ellipse on the canvas Image1.Bitmap.Canvas.BeginScene; Image1.Bitmap.Canvas.DrawEllipse(MyRect, 40); Image1.Bitmap.Canvas.EndScene; end; Ciao Stefan |
AW: TExpander unter Delphi 10.4.2 Fehler
Sind andere Threads im Spiel?
Lass dir den BeginSceneCount ausgeben. Wenn sonst noch keiner BeginScene gerufen hat, dann müsste der ja 0 davor und 1 danach sein. ![]() |
AW: TExpander unter Delphi 10.4.2 Fehler
Sind TCanvas.Width und TCanvas.Height größer null?
|
AW: TExpander unter Delphi 10.4.2 Fehler
Image1 hat einen Parent?
|
AW: TExpander unter Delphi 10.4.2 Fehler
Zitat:
Funktioniert dies (Code unten) bei dir auch: (?)
Delphi-Quellcode:
...
MyRect: TRectF; ... MyRect := TRectF.Create(0, 0, 200, 200); Image1.Bitmap := TBitmap.create; Image1.Bitmap.Width := trunc(Image1.Width); Image1.Bitmap.Height := trunc(Image1.Height); ... Image1.Bitmap.Canvas.BeginScene; Image1.Bitmap.Canvas.DrawEllipse(MyRect, 40); Image1.Bitmap.Canvas.EndScene; ... In deinem Beispiel wird FBeginSceneCount beim EndScene dekrementiert, beim BeginScene jedoch nicht inkrementiert. FBeginSceneCount wird dadurch -1 und die Sache fällt dann so richtig auf in:
Delphi-Quellcode:
Es wäre gut, wenn dich Delphi bereits in Image1.Bitmap.Canvas.DrawEllipse(MyRect, 40); darauf aufmerksam machen würde, dass dein Bitmap (ich nehm's mal an...) gar keinen Speicher reserviert hat für deinen Kreis.
function TMonitor.CheckOwningThread: TThreadID;
begin Result := FOwningThread; // ist dann 0 if Result <> GetCurrentThreadId then Error(reMonitorNotLocked) // => Fehler end; Und es wäre natürlich auch schön, wenn FBeginSceneCount in einem solchen Problemfall (BitMap leer) korrekt zählen würde. Letztendlich solltest du es aber mit korrektem Code schaffen, den Kreis ohne Fehler auszugeben. |
AW: TExpander unter Delphi 10.4.2 Fehler
Delphi-Quellcode:
Dein Beispiel mit dem TImage funktioniert, nur bkomme ich es nicht hin, dem TExpander Canvas ein Bitmap zu erzeugen :-(
...
MyRect: TRectF; ... MyRect := TRectF.Create(0, 0, 200, 200); Image1.Bitmap := TBitmap.create; Image1.Bitmap.Width := trunc(Image1.Width); Image1.Bitmap.Height := trunc(Image1.Height); ... Image1.Bitmap.Canvas.BeginScene; Image1.Bitmap.Canvas.DrawEllipse(MyRect, 40); Image1.Bitmap.Canvas.EndScene;
Delphi-Quellcode:
funktioniert nicht da das ExpanderDokumente.Canvas = Nil und ExpanderDokumente.Canvas.BitMap = Nil ist, ExpanderDokumente.Canvas.Bitmap kann ich nichts zuweisen weil es eine "nur Lesen" Eigenschaft ist...
ExpanderDokumente.Canvas.Bitmap.Width:=100;
Ciao Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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 by Thomas Breitkreuz