Entwickler-Ecke

Multimedia / Grafik - Ein Shape als Knopf - Problem


Cyborgmillenium - Mo 23.09.02 13:44
Titel: Ein Shape als Knopf - Problem
Hallo,
ich habe ein Shape als Elipse. Dieses Shape benutze ich als Knopf. Jetzt ist es so, das das Shape aber auch auf den Mausklick reagiert, auch wenn ich neben die Elipse klicke. Das liegt daran, das es nur wie ein Shape aussieht, aber noch der Viereckige Kasten drumrum ist.
Kann mir wer sagen, wie ich es Programmiere, das der Klick nur ausgeführt wird, wenn ich wirklich in die elipse klicke?

Danke
Bastian


CenBells - Mo 23.09.02 14:10

ja, du musst halt beim onclick ereignis abfragen, ob du wirklich innerhalb deines Shapes bist. Das machst du über cursorpos. Und dann vergleichst du die koordinaten mit denen deines Shapen und voila, fertig bist du.
Musst halt mal schauen wie das mit den mathematischen funktionen aussieht. Es gibt funktionen, mit denen du berechnest, ob ein bunkt in einem zweidimensionalen raum innerhalb einer zweidimensionalen ebene liegt.

Bin aber gerade auf der arbeit und kann nicht nachschauen.
Gruß
Ken


MathiasH - Mo 23.09.02 18:00

du müsstest die Entfernung von Cursorpos zum Zentrum der Ellipse berechnen (Phytagoras), und dann den x/oder y-Wert etwas strecken, und dann mit dem Radius der Ellipse vergleichen(dünnste/dickste stelle)

MathiasH


Cyborgmillenium - Mo 23.09.02 19:50

DAs is mir schon klar. Mit nem Kreis hab ich es ja auch schon. Nur bei ner Elipse hab ich keine Ahnung von der Formel.
Vielleicht kann mir ja mal jemand ein Beispiel posten.

Danke
Bastian


MathiasH - Di 24.09.02 14:33

strecken!!!, ich würde die x-Werte im verhältniss zum Ellipsenzentrum strecken(oder schrumpfen(egal);
dann kanst du es genauso machen wie bei einem Kreis

Wenn du es nicht schaffst mach ich dir mal ein Beispiel, aber die nächsten Tage hab ich dazu leider keine Zeit.

Mathias


Delete - Di 24.09.02 14:50

Vielleicht hilft dir diese API weiter:
Zitat:

PtInRegion
The PtInRegion function determines whether the specified point is inside the specified region.


Cyborgmillenium - Mi 25.09.02 13:19

Mathias, das wäre super nett wenn du ein Beispiel machen könntest.
Ich kann deinem Vorschlag nämlich nicht so ganz folgen.

Meine E-Mail is: BastianBreidenbach@web.de

Lass die ruhig Zeit, is eh nicht so dringend.

Schonmal danke.

Bastian


LCS - Mi 25.09.02 13:38

Hi
ich hätt noch nen unkonventionellen Vorschlag. Das Shape ist doch einfarbig. Warum checkst du nicht welche Farbe der Punkt an den Mauskoordinaten hat. Wenns die Farbe der Ellipse ist, dann ist der Mauszeiger innerhalb.
Ich weiss, ist nicht ganz wasserdicht, aber einfach.

Gruss Lothar


Cyborgmillenium - Mi 25.09.02 22:10

Das habe ich schon gemacht. Aber das is ne Aufgabe in der Schule und der Lehrer will es halt berechnet haben, leider.

Aber trotzdem Danke.

Bastian


weiti - Do 26.09.02 09:51
Titel: mathe?
hmm als schüler net wissen wie ma a ellipse berechnet...


LCS - Do 26.09.02 11:12
Titel: Re: mathe?
weiti hat folgendes geschrieben:
hmm als schüler net wissen wie ma a ellipse berechnet...

Um ehrlich zu sein muss ich hier auch passen. Bei nem Kreis wärs kein Prob. Aber mal die Gegenfrage: Weisst du's? :twisted:

Gruss Lothar


weiti - Do 26.09.02 11:18
Titel: :-)
1.) bin i Schüler?
2.)wozu hat ma mathebücher?


gruß
weiti


MathiasH - Do 26.09.02 17:34

ich hab doch schon die Lösung gesgt: so weit strecken bis es ein Kreis ist!(die Vergleichskoordinaten des Mauszeigers relativ zum Ellipsenmittelpunkt natürlich!!!) wenns keiner zam bringt werde ich doch nochmal QT schreiben müssen...

MathiasH


Cyborgmillenium - Do 26.09.02 18:34

@ Weiti: Unser Lehrer hat da was an die Tafel gemacht, aber das is mir zu hoch.

@ Mathias: Ich werde das jetzt mal versuchen, wäre aber trotzdem nett wenn du ein Beispiel machen könntest.
Danke

Bastian


Simon Joker - Fr 27.09.02 13:43

Hi Cyborgmillenium,

such mal nach der Komponente TEzRgnBnt http://www.delphi-treff.de/content/komponenten/index.php4?kat=4. Schau die bessonders die exportierte Funktion CropWindow(Handle,Picture); an. Das wäre die vernünftigste Lösung für solche ein Problem.


Cyborgmillenium - Fr 27.09.02 15:05

Hab es geschafft. Das mit dem Strecken hat funktioniert.

Danke


Aya - Sa 28.09.02 04:02

Hi,

Also... es gibt da noch ne super easy sache um rauszubekommen ob man z.B. auf den weißen kreis klickt oder auf das graue nichts.. :)

Wie? So:

Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Shape1MouseDown([...]);
begin
  if Shape1.Canvas.Pixels[X,Y]=clWhite then
    //Das was halt passieren soll
end;


Au'revoir,
Aya

PS: Andere möglichkeit wäre der Shape eine Elliptische Region zuzuweisen, oder per Ellipsengleichung berechnen ob man innerhalb des Kreises geklickt hat.


Aya - Sa 28.09.02 04:11

Ach ja, und für die, die's interressiert...

Die Ellipsengleichung geht so (um einen punkt der ellipse zu errechnen):

wi = 360 / EckenDerEllipse
w = (pi / 180) * (wi * Ecke - (wi / 2))
X:=Ellipse.Left / 2 + (Ellipse.Right / 2 + cos(w) * ((Ellipse.Right - Ellipse.Left) / 2));
Y:=Ellipse.Top / 2 + (Ellipse.Bottom / 2 + sin(w) * ((Ellipse.Bottom-Ellipse.Top) / 2));

EckenDerEllipse =Die ecken halt... denn ne Ellipse ist nichts anderes als ein Vieleck mit wahnsinnig vielen ecken :)

Ecke = Die Ecke von der man die Koordinaten errechnen will (z.B. die 3te Ecke, wobei man bei 0° anfängt zu zählen)

Ellipse.Left/Right/Top/Bottom = Die größe der Ellipse halt... z.B. ein Kreis mit Radius = 5 hätte bei allen 4 werten 5 :)

So, und nu nich noch nachfragen, sondern einfach ausprobieren und ein wenig drüber nachdenken... ist ganz einfach :) (Ich hab damit schon soviele dinge errechnet... unter anderem z.B. einen Stern.. versucht's mal ;) )

Au'revoir,
Aya

PS: Ihr könnt euch ja mal den Koshigaya GraphicShop [http://www.animes4u.de/friends/KoshigayaGraphics.zip] herunterladen... das programm ist zwar noch laange nicht fertig und hat sicher viele fehler.... aber, ALLES was es kann ist ohne jegliche fremdkomponenten gemacht und NUR mit Canvas realisiert.
(Den stern gibt's wenn man länger auf Shapes drückt :) )