Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TExpander unter Delphi 10.4.2 Fehler (https://www.delphipraxis.net/207378-texpander-unter-delphi-10-4-2-fehler.html)

Michael II 19. Mär 2021 09:17

AW: TExpander unter Delphi 10.4.2 Fehler
 
Hallo Stefan

ich habe rasch (geht ohne eine Zeile Code zu schreiben) TExpander auf TForm geklickt. In TExpander habe ich ein TImage reingesetzt. Im Objektinspektor (oder über Struktur) unter TImage finde ich die Eigenschaft Multiresbitmap. Ich klick drauf, lade ein Bild und lass das Programm laufen.

Expander wird angezeigt, ich expandiere, sehe das Bild. Funktioniert.

Dann sollte es doch via Code auch funktionieren?

TiGü 19. Mär 2021 09:28

AW: TExpander unter Delphi 10.4.2 Fehler
 
Welchen TCanvas-Nachfahren verwendest du denn? Default unter Windows ist ja TCanvasD2D.

Harry Stahl 19. Mär 2021 09:32

AW: TExpander unter Delphi 10.4.2 Fehler
 
Natürlich funktioniert Dein Code hier nicht:

Delphi-Quellcode:
 b := TBitmap.Create;
  if b.Canvas.BeginScene then
  begin
    i := 4;

    b.canvas.EndScene;
  end;
geenauowenig wie Dein anderes Beispiel:

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;
Dein Bitmap hat immer die Größe 0,0.

Auf welchen Canvas willst Du dann auf welcher Postion malen?
Logischerweise funktioniert dann auch kein Canvas.beginscene....

Mit anderen Worten: Das funktioniert:

Delphi-Quellcode:
b := TBitmap.Create (300,300);
  if b.Canvas.BeginScene then
  begin
    i := 4;

    b.canvas.EndScene;
  end;

Harry Stahl 19. Mär 2021 09:43

AW: TExpander unter Delphi 10.4.2 Fehler
 
Ach ja und ergänzend zu meiner vorherigen Antwort:

WANN willst Du auf den Canvas "des Expanders" zeichnen?

Anders als in der VCL hat in der FMX nicht jedes Control einen eigenen Canvas, sondern es existiert nur ein großer Canvas der Form, der von den einzelnen Controls verwendet wird.

D.H. Du kannst nicht einfach irgendwann auf den Canvas zeichnen.
Sondern Du machst es in den Events, wenn der Expander gezeichnet werden soll, also z.B:
Delphi-Quellcode:
procedure TForm38.Expander1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
begin

end;
Dann hast Du einen Canvas, der in diesem Moment frei ist und auch den Canvas-Bereich, der für dieses Control gilt.

Michael II 19. Mär 2021 11:06

AW: TExpander unter Delphi 10.4.2 Fehler
 
Zitat:

Zitat von skoschke (Beitrag 1485496)
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...

Ciao
Stefan

Es geht schon auch; so wie ich im Kurztest #11 gezeigt hatte: In der IDE: Nimm deinen TExpander, klick ein TImage rein und setze Align von image1 auf Client. Nun hast du über TImage deinen Canvas.

Dann kannst du exakt den gleichen Code verwenden wie in #9.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 Uhr.
Seite 2 von 2     12   

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