AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TExpander unter Delphi 10.4.2 Fehler

Ein Thema von skoschke · begonnen am 18. Mär 2021 · letzter Beitrag vom 19. Mär 2021
 
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
772 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TExpander unter Delphi 10.4.2 Fehler

  Alt 19. Mär 2021, 08:31
Und hier nun Original Embarcadero:

Delphi-Quellcode:
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;
Und wieder "Kein Eigentümer der Objektsperre"

Ciao
Stefan
Steht das echt genau so bei Embarcadero? Da wurde doch vergessen, das Bitmap zu erzeugen und diesem eine Grösse zuzuweisen (?).
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:
function TMonitor.CheckOwningThread: TThreadID;
begin
  Result := FOwningThread; // ist dann 0
  if Result <> GetCurrentThreadId then
    Error(reMonitorNotLocked) // => Fehler
end;
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.

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.
Michael Gasser

Geändert von Michael II (19. Mär 2021 um 08:34 Uhr)
  Mit Zitat antworten Zitat
 


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 00:26 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