![]() |
GDI+ und DrawPolygon
Verzeiht mir diese Frage, aber ich bekomm es gerade nich hin, die Funktion DrawPolygon(const Pen *pen, const Point *points, INT *count) zu benutzen. Mein Problem liegt darin, dass ich nich weiß, wie ich bei GDI+ ein Array of PGPPoint anlegen kann.
Wenn ich es einfach mal mit Points: Array[0..3] of PGPPoint versuche, kann ich zwar über Points[0].X Werte zuweisen, aber sobald ich dann die DrawPolygon mit Points aufrufen möchte, schmeißt er mir folgende Fehlermeldung: [Pascal Error] Main.pas(6513): E2250 There is no overloaded version of 'DrawPolygon' that can be called with these arguments Code sieht folgendermaßen aus:
Delphi-Quellcode:
Wäre toll, wenn mir mal schnell jemand auf die Sprünge helfen könnte!
procedure TMainForm.Draw;
const ALPHA = 100; var Graphics: TGPGraphics; GdiPen: TGPPen; points: Array[0..3] of PGPPoint; PenR, PenG, PenB: Integer; begin PenR := GetRValue(clGray); PenG := GetGValue(clGray); PenB := GetBValue(clGray); Graphics := TGPGraphics.Create(TChart(Sender).Canvas.Handle); GdiPen := TGPPen.Create(MakeColor(Alpha, penR, PenG, PenB)); points[0].X := xBegin; points[0].Y := y; points[1].X := xEnd; points[1].Y := y; points[2].X := xEnd+xDelay; points[2].Y := y-yDelay; points[3].X := xBegin+xDelay; points[3].Y := y-yDelay; Graphics.DrawPolygon(GdiPen, points, 4); end; Dankeschööönnn, liebe Grüße Laura |
Re: GDI+ und DrawPolygon
Hi,
So wie ich das sehe werden jeweils Pointer als Parameter erwartet. Probier es mal so (Komplett ohne Garantie das es funktioniert!):
Delphi-Quellcode:
Könnte auch alles Schwachsinn sein. :mrgreen:
procedure TMainForm.Draw;
const ALPHA = 100; var Graphics: TGPGraphics; GdiPen: TGPPen; points: Array[0..3] of PGPPoint; PenR, PenG, PenB: Integer; Count: Integer; // <--- begin PenR := GetRValue(clGray); // ps: bei grau ist R=G=B ;) PenG := GetGValue(clGray); // d.h. PenR = PenG = PenB PenB := GetBValue(clGray); // d.h. wenn du dir einen Wert holst reicht das ;) Graphics := TGPGraphics.Create(TChart(Sender).Canvas.Handle); GdiPen := TGPPen.Create(MakeColor(Alpha, penR, PenG, PenB)); // GdiPen := TGPPen.Create(MakeColor(Alpha, penR, PenR, PenR)); <--- siehe oben points[0]^.X := xBegin; // <--- die ^ sollte man besser hinschreiben. points[0]^.Y := y; points[1]^.X := xEnd; points[1]^.Y := y; points[2]^.X := xEnd+xDelay; points[2]^.Y := y-yDelay; points[3]^.X := xBegin+xDelay; points[3]^.Y := y-yDelay; Count := 4; Graphics.DrawPolygon(@GdiPen,points[0],@Count); end; EDIT: ca. 156 mal editiert :roll: :roteyes: Gruß Neutral General |
Re: GDI+ und DrawPolygon
Ok, mit dem Grau hast du natürlich recht *schäm* :).
Das mit der Definition Array[0..3] of PGPPoint kracht übrigens bei Ausführung, AccessViolation... funktioniert irgendwie alles nich so :(. |
Re: GDI+ und DrawPolygon
Hallo,
probier's mal mit
Delphi-Quellcode:
Gruß
Graphics.DrawPolygon(GdiPen, @points[0], Count);
xaromz |
Re: GDI+ und DrawPolygon
Zum DrawPolygon kommt er erst garnich, weil er mit AccessViolation abbricht bei der ersten Points[0].X Zuweisung... aber compilieren tut er jetzt, immerhin ;). Aber dann kann doch immer noch irgendetwas nich stimmen bei dem Array oder?
|
Re: GDI+ und DrawPolygon
Zitat:
Du musst die Punkte erzeugen!
Delphi-Quellcode:
Ach ja ich bin immernoch für:
New(Points[0]); // <---
points[0]^.X := xBegin; points[0]^.Y := y; New(Points[1]); // <--- points[1]^.X := xEnd; points[1]^.Y := y; New(Points[2]); // <--- points[2]^.X := xEnd+xDelay; points[2]^.Y := y-yDelay; New(Points[3]); // <--- points[3]^.X := xBegin+xDelay; points[3]^.Y := y-yDelay;
Delphi-Quellcode:
oder zumindest:
Graphics.DrawPolygon(@GdiPen,points[0],@Count);
Delphi-Quellcode:
Graphics.DrawPolygon(GdiPen,points[0],@Count);
|
Re: GDI+ und DrawPolygon
Ändert leider nichts an der Zugriffsverletzung :(, jetzt verschiebt sich der Fehler einfach auf das New(Points[0])... argh.
Ach Quatsch, sorry, hatte im Code ausversehen aus Array[0..3] of PGPPoint Array of PGPPoint gemacht... sorry :). Ok, dann dankeschööön :)! |
Re: GDI+ und DrawPolygon
Hallo,
ein Array of PGPPoint dürfte eigentlich nicht funktionieren. Die Funktion erwartet ja einen Pointer auf ein Array mit Punkten, nicht einen Pointer auf ein Array mit Pointern. das einfachste ist übrigens folgendes:
Delphi-Quellcode:
Ich hab gerade kein Delphi zur Hand, um das zu überprüfen, aber da ein dynamisches Array ein Zeiger ist, müsste das gehen.
procedure TMainForm.Draw;
const ALPHA = 100; var Graphics: TGPGraphics; GdiPen: TGPPen; points: Array of TGPPoint; PenR, PenG, PenB: Integer; Count: Integer; begin PenR := GetRValue(clGray); PenG := GetGValue(clGray); PenB := GetBValue(clGray); Graphics := TGPGraphics.Create(TChart(Sender).Canvas.Handle); GdiPen := TGPPen.Create(MakeColor(Alpha, penR, PenG, PenB)); SetLength(Points, 4); points[0].X := xBegin; points[0].Y := y; points[1].X := xEnd; points[1].Y := y; points[2].X := xEnd+xDelay; points[2].Y := y-yDelay; points[3].X := xBegin+xDelay; points[3].Y := y-yDelay; Count := 4; Graphics.DrawPolygon(GdiPen, points, Count); end; Gruß xaromz |
Re: GDI+ und DrawPolygon
Funktioniert leider nicht. Dann kommt wieder meine Fehlermeldung, dass die Funktion nicht mit den aktuellen Parametern aufgerufen werden darf. Anders funktioniert es aber auch nicht so wie es soll. Das gibts echt nich...
|
Re: GDI+ und DrawPolygon
Habs jetzt so gelöst, so funktioniert es endlich:
Delphi-Quellcode:
var
Points: Array of TGPPoint; PPoints: PGPPoint; SetLength(Points, 4); Points[0].X := xBegin; Points[0].Y := y; Points[1].X := xEnd; Points[1].Y := y; Points[2].X := xEnd+xDelay; Points[2].Y := y-yDelay; Points[3].X := xBegin+xDelay; Points[3].Y := y-yDelay; PPoints := Pointer(Points); Graphics.DrawPolygon(GdiPen, PPoints, 4); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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