Entwickler-Ecke

Multimedia / Grafik - canvas.polybezier


Alebo - Do 25.03.04 19:35
Titel: canvas.polybezier
Hallo!

Ich habe ein Array vom Typ TPoint.
Wie kann ich nun mit canvas.polybezier z.B. die Punkte von [0] bis [50] verbinden lassen?
Ich möchte nicht alle Punkte. die zum Array gehören miteinander verbinden sondern nur einen Teil von ihnen.

Ich hoffe mit kann jemand helfen,
Vielen Dank im Voraus


umpani - Do 25.03.04 20:48

Hallo
kopier doch einfach di Punkte, die du brauchst in ein Temporäres array


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var temp:array of tpoint;
      source:array[0..1000of tpoint;
      i:integer;  
begin
   setlength(temp,50);
    for i := 0 to 49 do
       begin
          temp[i] := source[i];
       end;
     canvas.polybezir(temp);
end;



Ich habe den Code jetzt nur so hingeschrieben und nicht getestet. Müßte aber gehen.

Gruß Umpani


MaxiTB - Do 25.03.04 20:52

Hm, ich bin da nicht wirklich kompetent, weil mir die nötigen Befehle fehlen, aber:

:arrow: Ich würde den Pointer auf das erste gewünschte Element ermitteln.
:arrow: Die Größe in Bytes (also Anzahl * Größe von TPoint).
:arrow: Den Speicherblock kopieren.

Das ist wesentlich schneller (denke mal mind. Faktor 2), aber wie gesagt - mir fehlen die Befehle dazu, weil ich hier kein Delphi habe.


Anonymous - Do 25.03.04 21:38


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  PPoints = ^TPoints;
  TPoints = array[0..0of TPoint;

...

var
 Points: array of TPoint; // oder auch dynamisch
begin
 ...
 Windows.PolyBezier(canvas.handle, PPoints(@Points[startindex])^, Anzahl);
 ...
end;


MaxiTB - Do 25.03.04 21:44

::obbschtkuche

Genau sowas in der Richtung habe ich gemeint - das ist sogar noch fixer, da braucht man nicht zu kopieren.
Hoch dem, der Delphi auf seinem Rechner hat ;-) .


Alebo - Fr 26.03.04 00:21

Vielen Dank für die schnelle Hilfe!
Wenn ich polybezier so aufrufe gibt der Compailer mir die Fehlermeldung zurück, dass zu viele Parameter übergeben werden.


Sven - Fr 26.03.04 08:07

Wenn Du nur einen bestimmten Teile eines Arrays an eine Funktion/Prozedur übergeben willst, so kannst Du die Funktion Slice verwenden.

Die ist in der Delphihilfe iegentlich gut erklärt :D


Alebo - Fr 26.03.04 10:15

Die Function Slice nimmt leider keinen Startwert entgegen sondern nur einen Endwert.

Ich bräuchte sowas wie slice(array,von,bis)


Sven - Fr 26.03.04 10:53

Dann würde ich vorschlagen, du verwendest ein Hilfsarray und füllst dieses mittels Copy. Dort kannst Du von und bis angeben.


Alebo - Fr 26.03.04 16:29

Copy kann ich nicht verwenden, da der Array, aus dem ich Punkte verbinden möchte, nicht dynamisch ist.
ich bekomme immer die Meldung: Inkompatible Typen