/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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;





Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste