Autor Beitrag
M. Raab
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Fr 03.02.06 15:31 
Hallo NG,

folgendes Problem:

Ich habe eine Oberfläche hergestellt, auf der man mit der Maus verschiedene Dinge (z.B. einen Kreis) einzeichnen kann. Um bei dem Kreisbeispiel zu bleiben: man kann diesen Kreis auf dem Image auch beschriften. Dazu erzeuge ich zur Laufzeit ein Label, auf dem dann die Beschriftung steht. Alle erzeugte Labels haben eine laufend nummerierte Kennzeichnung im TAG. Mein Problem nun: man kann den Kreis löschen, indem man diesen einfach wieder anklickt. Das zugehörige Label Feld befindet sich immer etwas unterhalb des Kreises. Wie kann ich das zugehörige Label nun löschen ? Ich kann die Farbe der Pixel unterhalb des Kreises abfragen - sind die z.B. weiß, ist es ein Pixel des Labels und ich hätte es getroffen. Nun aber: wie finde ich heraus, um welches Label es sich handelt ?

Normalerweise löscht man die Labels in dem man sie ebenfalls erneut anklickt. Ich weiß jedoch nicht, um welches Label es sich handelt.

Hat da jemand ne gute Idee ??


Gruss


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!
azubi_20
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 593

WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
BeitragVerfasst: Fr 03.02.06 15:38 
schau dir mal FindComponent an
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Sa 04.02.06 09:42 
Hallo,

die FindComponent Methode kann hier nicht funktionieren. Mir ist nicht bekannt, wo der Benutzer Kommentare (=Labels) eingetragen hat. Das würde nur funktionieren, wenn ein Label zu einem Kreis gehört.

Es kann jedoch sein, dass der Benutzer mehrere Beschriftungen an einem Kreis einträgt - hätte ich noch dazu sagen sollen.

Problem also ist: ich kann nur erkennen, dass sich ein oder mehrere Label unter dem Kreis befinden. Aber nicht, um welche(s) Label es sich handelt.


Zudem: der Benutzer kann zuerst alle Kreise eintragen, später (z.B. in einer 2. Sitzung) dann die Beschriftungen vornehmen. Auch sind mehrere Beschriftungen je Kreis möglich.

Hat jemand noch ne Idee ?


Gruss


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: So 05.02.06 11:45 
Hallo


falls es jemanden interessiert, ich habe das Problem gelöst.

Klickt man mit der Maus auf den Kreis (x,y) um ihn zu löschen, kenne ich die PIXEL Korodinaten. Jedes Label besteht aus den TOP/LEFT/WIDTH/HEIGHT Eigenschaften und beschreibt somit ein Rechteck(x1,y1,x2,y2). Bekannt ist, dass eine eventuelle Beschriftung sich um einen Kreis befindet. Also prüfe ich nun in einem gewissen Abstand (10 Pixel) um meinen Kreis herum, ob ein Pixel in das Label-Rechteck passen würde.

==> x1<=x<=x2 und
y1<=y<=y2

Damit lässt sich das Beschriftungslabel finden und mitlöschen. Jetzt sieht es eleganter aus.


Gruss


Markus

_________________
Das Leben besteht aus Bits und Bytes - nur: wo laufen sie denn ????
Super ... Du kannst das zwar lesen, toll..... aber: völlig zwecklos !!!