Autor Beitrag
Alebo
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Do 25.03.04 19:35 
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


Zuletzt bearbeitet von Alebo am Fr 26.03.04 00:37, insgesamt 2-mal bearbeitet
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Do 25.03.04 20:48 
Hallo
kopier doch einfach di Punkte, die du brauchst in ein Temporäres array

ausblenden 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

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: 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.

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 25.03.04 21:38 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: 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 ;-) .

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.
Alebo Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: 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

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
Alebo Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 314


D6 Ent, K3 Pro (patched)
BeitragVerfasst: 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.

_________________
MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
Alebo Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: 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