![]() |
In Kreis klicken funktioniert nicht
Liste der Anhänge anzeigen (Anzahl: 1)
Tach,
hatte vor längerer Zeit schonmal das Thema gehabt und konnte das problem bis jetzt nicht beheben. Ich habe drei TShaps übereinander liegen jetzt so geprüft werden im welchen Shape(als Kreis) sich die Maus befindet. Das Problem ist jetzt das es zu ungenau ist wie bekomme ich das genauer hin. So sieht bis jetzt meine Procedure aus
Delphi-Quellcode:
Projekt ist mal im Anhang.
procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var Inside: Boolean; R: Extended; begin if Shape1.Width < Shape1.Height then R := Shape1.Width/2 else R := Shape1.Height/2; Inside := Sqr(X - R) + Sqr(Y - R) <= Sqr(R); if inside then begin lblPreis.Caption:= '55€'; end; end; Danke schon mal im voraus |
Re: In Kreis klicken funktioniert nicht
Warum machst du das mit shapes und nicht mit einem Image
|
Re: In Kreis klicken funktioniert nicht
Ich brauche das ganze Transparent mit einer Linie darum und rund muss es auch sein. Da bietet mir das Shape eine rheie von Einstellungen
|
Re: In Kreis klicken funktioniert nicht
Die Lösung is ganz einfach: Wenn du es tatsächlich mit den Shapes machen willst, musst du bei den Mousemove Prozeduren von Shape1 und Shape2 abfragen ob sich die Maus evtl in Shape3 befindet... bzw. andersherum...du musst auf jedenfall in jedem Mausmove ereignis alle kreise abfragen...
|
Re: In Kreis klicken funktioniert nicht
Am Einfachsten erscheint mir eine Lösung mit Regions, d.h. man erstellt sich eine Funktion, der man die Mauskoordinaten sowie die Eckpunkte des umgebenden Rechtecks übergibt, worauf die temporär mit CreateEllipticRgnIndirect eine Region erstellt und mit PtInRgn prüft, ob sich die Koordinate innerhalb dieser Region befindet. Das erspart zumindest eine Menge Rechnerei und sollte ausreichend genau sein.
[edit] Wobei natürlich der berechtigte Einwand von alleinherrscher zu berücksichtigen ist. Also entweder (Pseudocode):
Code:
oder
wenn im äußeren Kreis:
wenn im mittleren Kreis: auch im inneren Kreis?
Code:
[/edit]
wenn nicht im inneren Kreis:
wenn nicht im mittleren Kreis: im äußeren Kreis? |
Re: In Kreis klicken funktioniert nicht
Edit: @DeddyH: Yeah, wir sind ja voll das Team geworden :P
Versuchs mal hiermit:
Delphi-Quellcode:
uses math;
Delphi-Quellcode:
function TForm1.MouseToMoney:string;
var R: array [1..3] of single; MausRadius:single; i,MausInShape:integer; Mittelpunkt:tPoint; MausPosition:tPoint; begin MausPosition:=ScreenToClient(Mouse.CursorPos); R[1]:=min(Shape1.Width,Shape1.Height) / 2; R[2]:=min(Shape2.Width,Shape2.Height) / 2; R[3]:=min(Shape3.Width,Shape3.Height) / 2; Mittelpunkt.x:=Shape1.left+round(R[1]); Mittelpunkt.y:=Shape1.top+round(R[1]); MausInShape:=0; for i:=3 downto 1 do if sqr(Mausposition.x-mittelpunkt.x) + sqr(Mausposition.y-Mittelpunkt.y) <= sqr(r[i]) then MausInShape:=i; case MausInShape of 0:result:='--'; 1:result:='55€'; 2:result:='75€'; 3:result:='95€'; end; end; Bitte in jedem MouseMove Ereigniss aufrufen:
Delphi-Quellcode:
lblPreis.Caption:=MouseToMoney; Schönen Tag noch, Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz