Autor |
Beitrag |
Alebo
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      
Beiträge: 389
|
Verfasst: 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..1000] of 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
      
Beiträge: 679
Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
|
Verfasst: Do 25.03.04 20:52
Hm, ich bin da nicht wirklich kompetent, weil mir die nötigen Befehle fehlen, aber:
 Ich würde den Pointer auf das erste gewünschte Element ermitteln.
 Die Größe in Bytes (also Anzahl * Größe von TPoint).
 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
|
Verfasst: 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..0] of TPoint;
...
var Points: array of TPoint; begin ... Windows.PolyBezier(canvas.handle, PPoints(@Points[startindex])^, Anzahl); ... end; |
|
|
MaxiTB
      
Beiträge: 679
Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
|
Verfasst: 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 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      
Beiträge: 314
D6 Ent, K3 Pro (patched)
|
Verfasst: 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 
_________________ MDK 9.1, Kernel 2.4.21, KDE 3.1 Kylix 3 Pro (patched), nutze aber auch Windows
|
|
Alebo 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
      
Beiträge: 314
D6 Ent, K3 Pro (patched)
|
Verfasst: 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 
Hält's aus hier
Beiträge: 15
|
Verfasst: 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
|
|