AGB  ·  Datenschutz  ·  Impressum  







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

GDI+ und DrawPolygon

Ein Thema von daschaos · begonnen am 7. Mär 2008 · letzter Beitrag vom 7. Mär 2008
Antwort Antwort
daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#1

GDI+ und DrawPolygon

  Alt 7. Mär 2008, 12:13
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:
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;
Wäre toll, wenn mir mal schnell jemand auf die Sprünge helfen könnte!

Dankeschööönnn,
liebe Grüße Laura
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: GDI+ und DrawPolygon

  Alt 7. Mär 2008, 12:57
Hi,

So wie ich das sehe werden jeweils Pointer als Parameter erwartet. Probier es mal so (Komplett ohne Garantie das es funktioniert!):

Delphi-Quellcode:
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;
Könnte auch alles Schwachsinn sein.

EDIT: ca. 156 mal editiert

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#3

Re: GDI+ und DrawPolygon

  Alt 7. Mär 2008, 13:09
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 .
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: GDI+ und DrawPolygon

  Alt 7. Mär 2008, 13:16
Hallo,

probier's mal mit
Graphics.DrawPolygon(GdiPen, @points[0], Count); Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#5

Re: GDI+ und DrawPolygon

  Alt 7. Mär 2008, 13:23
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?
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: GDI+ und DrawPolygon

  Alt 7. Mär 2008, 13:31
Zitat von daschaos:
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?
Ah ist klar

Du musst die Punkte erzeugen!

Delphi-Quellcode:
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;
Ach ja ich bin immernoch für:

Graphics.DrawPolygon(@GdiPen,points[0],@Count); oder zumindest:

Graphics.DrawPolygon(GdiPen,points[0],@Count);
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#7

Re: GDI+ und DrawPolygon

  Alt 7. Mär 2008, 13:47
Ä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 !
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: GDI+ und DrawPolygon

  Alt 7. Mär 2008, 14:09
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:
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;
Ich hab gerade kein Delphi zur Hand, um das zu überprüfen, aber da ein dynamisches Array ein Zeiger ist, müsste das gehen.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#9

Re: GDI+ und DrawPolygon

  Alt 7. Mär 2008, 14:46
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...
  Mit Zitat antworten Zitat
daschaos

Registriert seit: 23. Mai 2007
117 Beiträge
 
Delphi 2006 Professional
 
#10

Re: GDI+ und DrawPolygon

  Alt 7. Mär 2008, 15:03
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);
  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 05:28 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