AGB  ·  Datenschutz  ·  Impressum  







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

Polygonpunkte als graphische contol elemente

Ein Thema von CADSDFrank · begonnen am 9. Mär 2008 · letzter Beitrag vom 10. Mär 2008
Antwort Antwort
CADSDFrank

Registriert seit: 18. Jan 2008
Ort: Penzberg
7 Beiträge
 
Turbo Delphi für Win32
 
#1

Polygonpunkte als graphische contol elemente

  Alt 9. Mär 2008, 21:28
Nach 15 Jahren Programmierpause (damals Turbo Pascal) habe ich mit Delphi begonnen und das erste Problem steht an. Ich hoffe, dass mir jemand evtl. mit einem Code Beispiel helfen kann.
Ich benötige zur Laufzeit in einem definierten Bereich eines Formulars (z.B. Paintbox, Panel, …?) die Punkte eines Polygons als graphische control elemete.
In diesem Bereich sollen z.B. 5 Punkte als kleine Kreise (z.B. 4 Pixel Durchmesser) jeweils einzeln per Mouse (Drag & Drop?) verschiebbar sein. Dabei sollen diese Punkte immer durch Linien von links nach rechts verbunden sein. Beim Verschieben der Punkte sollen sich die Verbindungslinien wie „Gummibänder“ anpassen. Die aktuellen X,Y-Koordinaten der Punkte sollen in einem Array als Werte für weitere Verarbeitungen verfügbar sein.
Vielen Dank für hoffentlich hilfreiche Antworten.
Frank
Frank
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Polygonpunkte als graphische contol elemente

  Alt 9. Mär 2008, 21:39
Das geht z.B. mit einer Paintbox

Dazu brauchst du:

Array [5] of TPoint
Pointer auf TPoint ActivePoint
Paintbox

Im PaintBoxPaint machst du dann sowas:
Delphi-Quellcode:
for int i := 0 to 4 do
  paintbox.canvas.ellipse(array[i])
Und im OnMousedown sowas wie:
Delphi-Quellcode:
for int i := 0 to 4 do
begin
  int d = sqrt( sqr(maus.X - point[i].X) + sqr(aus.y - point[i].y))
  if d < 4 then // oder was fürn Radius anklickbar sein soll
  begin
    activepoint = point[i];
    break;
  end;
end;
Im OnMouseMove dann den ActivePoint (falls <> nil) bewegen (und paintbox updaten), und im OnMouseUp dann activePoint := nil;

Das sollte zumindest für einen Anfang reichen, ein paar einheiten kann man da aber bestimmt noch verbessern

Obiger Code ist mehr oder weniger Pseudocode, also nicht syntaktisch korrekt oder gar getestet
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Polygonpunkte als graphische contol elemente

  Alt 9. Mär 2008, 22:11
Etwas konkreter...
Angehängte Dateien
Dateityp: zip polygon_182.zip (1,6 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Polygonpunkte als graphische contol elemente

  Alt 10. Mär 2008, 10:53
Mir war grad mal langweilig, da hab ich mich nochmal damit beschäftigt, um noch ein paar Feinheiten zu machen

Man kann den Punkt nicht mahr aus der Paintbox hinausschieben
Der Cursor verändert sich beim überfahren eines Punktes
Die rechte Maustaste kann nicht mehr dazwischenfunken
Es gibt ein "delta" ==> Der Kreis geht nicht immer mit der Mitte auf den Mauszeiger/er springt nicht mehr/Man kann den Kreis an einem Punkt "anfassen" und ihn daran bewegen
Sonst eigentlich nichts, nur ein, zwei optische Veränderungen

Das ganze könnte man natürlich noch in ein eigenes Control kapseln, aber das wäre etwas .... overkill ^^
Angehängte Dateien
Dateityp: zip polygon_2_205.zip (2,9 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
CADSDFrank

Registriert seit: 18. Jan 2008
Ort: Penzberg
7 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Polygonpunkte als graphische contol elemente

  Alt 10. Mär 2008, 20:32
Hallo "jfheins" und "omata", vielen dank für eure spontanen antworten und vor allem für das beispielprogramm. Ist eine grosse hilfe für mich und erleichtert meinen wiedereinstieg. Werde mich am wochenende intensiver damit beschäftigen. Toll, dass es euch und dieses forum gibt.
Frank
Frank
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Polygonpunkte als graphische contol elemente

  Alt 10. Mär 2008, 21:07
Zitat von jfheins:
Sonst eigentlich nichts, nur ein, zwei optische Veränderungen
Alles soweit ok, bis auf die Verunstaltung der Funktion isPolygonPoint. Das break klappt mir da die Fussnägel hoch, autsch!

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

Re: Polygonpunkte als graphische contol elemente

  Alt 10. Mär 2008, 21:20
Zitat von omata:
Zitat von jfheins:
Sonst eigentlich nichts, nur ein, zwei optische Veränderungen
Alles soweit ok, bis auf die Verunstaltung der Funktion isPolygonPoint. Das break klappt mir da die Fussnägel hoch, autsch!

Gruss
Thorsten
Oh, tut mir leid, das mit deinen Fußnägeln - Schmerzen wollte ich nicht

Ich weiß nit, also ich find das break nicht soo schlimm (<> goto ) - man könnte es auch rausnehmen, dann bräuchte die Funktion ein paar Millisekundne länger (ja nach Listenlänge) ... aber ich finde, man sieht so besser, was gemacht wird (über das Array iteriert) als mit der while-Schleife und der zusätlichen abbruch-Variablen ...

Aber für mich war das immer ein legitimes Mittel der Schleifensteuerung, genauso wie continue - eigentlich mache ich das bei fast jeder Suche im Array so: Durchiterieren, wenn was passt, Index in Result und break (da Ziel erfüllt)

Klar - man kann auch ohne break programmieren, aber imho geht da ein kleines bisschen Übersicht verloren
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Polygonpunkte als graphische contol elemente

  Alt 10. Mär 2008, 23:39
Zitat von jfheins:
...dann bräuchte die Funktion ein paar Millisekundne länger...
Das halte ich für ein Gerücht. Immerhin ist die erste Regel bei Benutzung eines Compilers: optimiere nie selbst! (Compilerbau)

Zitat von jfheins:
Klar - man kann auch ohne break programmieren, aber imho geht da ein kleines bisschen Übersicht verloren
Natürlich kann man das. Ich versuche aber strukturiert zu programmieren. Da break ein Befehl ist, der zu den unstrukturierten Befehlen gehört, ist er für mich nicht existent. Break ist nunmal unnötig, unübersichtlich ist eine Strukturierte Programmierung eigentlich nicht (sagt ja schon der Name).

Wie auch immer, macht was ihr wollt. Ich wollte das nur nicht so stehen lassen, weil das mein Quellcode war, der da an einer Stelle so unschön verändert wurde.

Gruss
Thorsten
  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 11:54 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