Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ClickEvent auf formen (nichts quadratisches) (https://www.delphipraxis.net/136887-clickevent-auf-formen-nichts-quadratisches.html)

Freiwilderer 9. Jul 2009 14:25


ClickEvent auf formen (nichts quadratisches)
 
Hallo,
ich weiß, der Titel ist etwas seltsam, aber das is vielleicht auch der grund, warum ich so noch nichts finden konnte für mein problem.
Und zwar möchte ich eine art Zeichnung programmieren, deren unterschiedliche objekte unterschiedliche Buttons darstellen sollen.
Die Buttons soll man aber nicht sehen und sie sollen nicht quadratisch sein ^^

Habe die Jedi komponenten durchforstet und zwei dinger gefunden, die in kombination genau das wären, was ich brauche, aber vielleicht gehts ja auch anders.

also ich will eigentlich im Grunde ein auto zeichnen, wenn ich auf die reifen klicke, soll es quietschen, wenn ich auf die motorhaube klicke soll es brummen (mal so als beispiel).

Die beiden komponente, die ich meine sind einmal
JvShapedButton, der zwar ein button, mit verschiedenen formen, aber trotzdem sehr beschränkt ist.
und
JvTransparentForm,
Bei dem dingen kann ich eine Maske hinterlegen und zwar ein bild, und danach wird die form dann "abgeschnitten"

Wenn es jetzt einen button mit der möglichkeit eine maske zu hinterlegen geben würde, wäre ich vollkommen zufrieden.

nunja,

ich hoffe mein problem ist einigermaßen gut rübergekommen und freue mich auf lösungsvorschläge.
wie gesagt, ich brauch nich unbedingt buttons, muss nur wissen, über welchem teil eines bildes ein click event stattfindet,

mfg

BrunoT 9. Jul 2009 15:48

Re: ClickEvent auf formen (nichts quadratisches)
 
Hallo Freiwilderer, :gruebel:

ein Lösungsansatz wäre folgender:

Auf Webseiten nennt man so etwas Maps, das sind Bilder, die in Bereiche zerlegt sind und so auf Maus-Events reagieren.

Mach doch die auswertbaren Bereiche klein genug und frage die zusammengehörigen Bereiche einer Form( z.B. Rad) ab.

Lege die Bereiche in Arrays ab, diese kann man dann schnell durchforsten, welcher getroffen wurde und zu welcher Form (Rad, Hupe)
er gehört.

Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     //auswerten
end;
mfg

Holger

Freiwilderer 9. Jul 2009 16:01

Re: ClickEvent auf formen (nichts quadratisches)
 
Hallo Bruno,
danke schonmal für die schnelle antwort
das ist genau das, was ich brauche ...
allerdings hatte ich irgendwie gehofft, dass das schöner geht
.. bis ich alle bereiche, die einen kreis bilden abgefragt hab, hab ich ja fast jedes pixel einzeln abgefragt.
Und ich muss grob geschetzt 100 bilder mit jeweils ca 50 einzelnen bereichen erzeugen,
evtl. wollte ich dafür auch einen editor schreiben und naja ... hatte halt einfach gehofft, dass es zB mit shapes geht


muss flux, weg, ich meld mich von zuhause nochmal an in ca 90 minuten bye

BrunoT 9. Jul 2009 16:15

Re: ClickEvent auf formen (nichts quadratisches)
 
Hallo Freiwilderer,

es gibt noch eine bessere Methode:

fertige von jedem Bild eine Kopie an. Die klickbaren Bereiche färbst du in der Kopie gleichmässig mit jeweils einer andern Farbe. wenn dann ein Klick auf das Original-Bild erfolgt, wertest du einfach die Kopie im Hintergrund aus, welche Farbe da ist. Die farbe erzählt dir, was für ein Bereich getroffen Wurde. Die Bilder verwaltest du in einer TImageList.

Das Erstellen der Bilder sollte recht einfach sein. die Abfrage auch. (und schnell)

Viel Spass beim Malen

mfg

Muetze1 9. Jul 2009 16:47

Re: ClickEvent auf formen (nichts quadratisches)
 
... oder Regions in einer Liste verwaltet und mit PtInRgn() einfach abfragen.

Freiwilderer 9. Jul 2009 17:41

Re: ClickEvent auf formen (nichts quadratisches)
 
hi, da bin ich wieder
die version klingt um einiges einfacher, und angenehmer, vor allem, wenn es um einen editor geht, das werd ich morgen sofort mal ausprobieren, danke :)

@Muetze1 ... die funktion kenne ich nicht, werd mich morgen aber auch mal reinlesen, vielen dank ebenfalls.

Freiwilderer 10. Jul 2009 08:19

Re: ClickEvent auf formen (nichts quadratisches)
 
hallo
also das mit den zwei bildern läuft
und ziemlich genau so, wie ich mir das vorgestellt hatte
...
doof is nur, dass mir grad was aufgefallen ist
nämlich würde ich eigentlich ganz gern, die stellen vom angezeigten bild, die schonmal angeklickt wurden kennzeichnen
... ich gebe zu, hab ich vorher nich drüber gesprochen, is mir auch gerade erst aufgefallen, dass das sinnvoll wäre ^^

... ich glaub, das schmeißt gerade die gesamte funktion wieder über den haufen ^^ ;)

ich hoffe auf eure geduld und auf ne gute Lösung für dieses neue problem

mfg

Draos 10. Jul 2009 08:48

Re: ClickEvent auf formen (nichts quadratisches)
 
also so wie ich das Bild verstand, ist der Button da wo nicht der Hintergrund ist. Gut es gibt ja mehr als 2 Farben, somit kannste die angeklickte Stelle sagen wir eine 3. Färbung verpassen. So kannst du 16^6 verschiedene Farben wählen für 16^6 Klicks auf die selbe Stelle

Sherlock 10. Jul 2009 08:49

Re: ClickEvent auf formen (nichts quadratisches)
 
Wieso? Du kannst Doch einfach auf den Canvas, an der Stelle wo geklickt wurde einen anders farbigen Punkt setzen. Schon ist es markiert.

Oder wie hast Du das jetzt gemeint?

Sherlock

Freiwilderer 10. Jul 2009 08:54

Re: ClickEvent auf formen (nichts quadratisches)
 
Hallo,
Danke schonmal für die Antworten zu so früher stunde.

Also Stellt euch die Bauzeichnung von einem Haus vor
Da gibts n dach, ne wand, n fenster und ne tür.

Dach = Rot,
Wand = Blau
Fenster = Grün
Tür = Gelb

darstellen möchte ich eine schwarz/weiß zeichnung
also habe ich eine zeichnung in schwarz/weiß und im Hintergrund ein farbiges haus, mit ausgefüllten flächen.
wenn ich jetzt auf die tür in der schwarz/weiß zeichnung klicke, kann ich die farbe gelb abfragen.
nun möchte ich aber, dass in dem moment, wo ich die tür anklicke, sie auch in der schwarz/weiß zeichnung gelb wird
oder schwarz, ... oder irgendwie anders halt.
aber nicht nur der einzeln angeklickte punkt, sondern die gesamte fläche.

ich hoffe, das ist nun verständlicher rübergekommen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Seite 1 von 2  1 2      

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