Einzelnen Beitrag anzeigen

Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Rechtecke auf TCanvas "verteilen"

  Alt 8. Nov 2007, 07:13
Ich habe mir der Painbox noch nicht gearbeitet, weiss also auch nicht, ob sie ein eigenes Mouse-event hat, über das man gehen kann, aber auch ohne ist es nicht so schwer:

Sei x deine Mauskoordinate:
Dann rechnest du floor(Gesamtbreite/breite) und solltest deine Fläche gefunden haben. Alternativ könntest du auch eine Liste der Positionen benutzen. Wenn du die Rechtecke verlegst, merkst du dir die gerundeten Positionen der Kanten und wenn du jetzt einen Klick verarbeiten willst, gehst du da einfach mit einer Schleife durch.

Was mir grad noch auffällt, ist das immer zwei Kanten aufeinanderfallen. (rechts_(n)=links(n+1)
Das kannst du entweder ignorieren (wenn der Benutzer eben direkt auf die Kante klickt, ist er selbst Schuld, wenn er nicht genau weiss, was passiert), oder du verkleinerst eben die Breite der o.B.d.A linken Kachel ohne ihre linke Position zu ändern.

Also grob ein Vorschlag:

-> 2D array anlegen
Delphi-Quellcode:
for i:=0 to Anzahl-1 do
 list(i):= round(i*breite); // Koordinate der linken Ecke

Panel_i.left := list(i-1);
Panel_i.right := list(i-1+1)-1;
Width sollte klar sein.

Abfrage:
i:=0;
while x<list(i-1) do inc(i); // müsste so stimmen
Ungetestet, das Array kann man wahrscheinlich auch weglassen, wenn man alternativ über die Kacheln iteriert, aber das ist ja nur eine Skizze. Und da das array klein ist und du es nicht häufig durchlaufen wirst, kannst du dich einfach für die verständlichere Version oder die einfacher zu implementierende entscheiden.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat