|
| Hotspots på et bitmap Fra : Thomas Due |
Dato : 26-03-02 08:25 |
|
Hej,
Jeg har et program som jeg er ved at skrive, hvor jeg har et kort i
jpeg format. Til dette kort hører forskellige lokationer som findes
i en liste ved siden af. Hver lokation har et koordinat (X, Y).
Lokationerne er gemt i et TClientDataSet (Delphi 6 Pro).
Nu vil jeg gerne kunne registrerer musens placering på kortet og
hvis musens placering er inden for en given afstand (+/- 10 f.eks)
fra en lokation skal cursoren skifte og det vil være muligt at klikke
på kortet for en eller anden effekt.
Jeg kan sagten lave hotspotten ved nøjagtige koordinater, men er der
nogen som har kendskab til TClientDataSet og lige kan fortælle hvordan
det bare lige skal gøres, så jeg har en radius på n ud fra lokationen.
Jeg håber lidt på at der er en eller anden smart algoritme som jeg
kan anvende.
På forhånd tak,
Thomas Due
| |
Uffe Kousgaard (26-03-2002)
| Kommentar Fra : Uffe Kousgaard |
Dato : 26-03-02 10:04 |
|
"Thomas Due" <tdue@mail.dk> wrote in message
news:f4373cde.0203252325.61293aa6@posting.google.com...
> Jeg kan sagten lave hotspotten ved nøjagtige koordinater, men er der
Kan du ikke vise koden for dette ?
Hilsen
Uffe
| |
Thomas Due (27-03-2002)
| Kommentar Fra : Thomas Due |
Dato : 27-03-02 08:17 |
|
"Uffe Kousgaard" <uffe@routeware.dk> wrote in message news:<3ca0395f$0$87750$edfadb0f@dspool01.news.tele.dk>...
> "Thomas Due" <tdue@mail.dk> wrote in message
> news:f4373cde.0203252325.61293aa6@posting.google.com...
> > Jeg kan sagten lave hotspotten ved nøjagtige koordinater, men er der
>
> Kan du ikke vise koden for dette ?
>
> Hilsen
> Uffe
Jeg fandt en komponent på det store internet som kan rumme hotspots og det
virker. Med hensyn til hotspots på specifikke koordinater, så gjorde jeg
noget i stil med følgende i OnMouseMove eventen for mit TImage.
// Her udnytter jeg at det er en database jeg anvender (omend simpel).
if ClientDataSet1.Locate('XPos;YPos', VarArrayOf([X, Y]), []) then
Image1.Cursor := crHandPoint;
Jeg har ikke min kode ved mig her, så det er efter hukommelsen. Denne
kode virker fint, men den kræver at musen er placeret på den eksakte
lokation.
Mvh
Thomas
| |
Uffe Kousgaard (27-03-2002)
| Kommentar Fra : Uffe Kousgaard |
Dato : 27-03-02 08:50 |
|
"Thomas Due" <tdue@mail.dk> wrote in message
news:f4373cde.0203262317.1d194f3@posting.google.com...
> Jeg fandt en komponent på det store internet som kan rumme hotspots og
det
> virker. Med hensyn til hotspots på specifikke koordinater, så gjorde
jeg
> noget i stil med følgende i OnMouseMove eventen for mit TImage.
>
Jeg kiggede længe på events for netop timage, men af en eller anden
årsag kunne jeg ikke få øje på OnMouseMove. Som bekendt er det øjnene,
man først bliver blind på.....
Hvis du ikke har vildt mange hotspots og du blot skal lave en
cirkelsøgning (ingen mange-kanter m.v.) er det vel blot rå regnekraft og
lidt Pythagoras ? Ellers skal du til at lave Quad tree's og så bliver
det kompliceret.
Hilsen
Uffe
| |
David A. D. Konrad (27-03-2002)
| Kommentar Fra : David A. D. Konrad |
Dato : 27-03-02 14:47 |
|
"Thomas Due" <tdue@mail.dk> skrev i en meddelelse
> Jeg håber lidt på at der er en eller anden smart algoritme som jeg
> kan anvende.
Hmm....
Jeg bille indlæse clientdatasettets værdier ind i et array ved opstart, og
bruge OnMouseMove og PtInRect, ala dette :
THotspotType = record
rect : TRect;
cursor : TCursor;
end;
var clientDataSetHotspots : array of THotspotType;
function getCursor(P:TPoint):TCursor;
var count:integer;
begin
for count:=1 to high(clientDataSetHotspots) do
begin
if PtInRect(clientDataSetHotspots[count].rect,P) then
begin
result:=clientDataSetHotspots.cursor;
exit;
end;
end;
result:=crDefault;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y:
Integer);
begin
image1.cursor:=getCursor(point(X,Y));
end;
| |
|
|