Newsgroup: it.comp.lang.delphi
Titolo: Collegamenti ad immagini

Ciao ragazzi,
vorrei una grossa mano per questo tipo di problema.
Vi faccio un esempio.
Carico in una form una immagine con alcuni elementi, come scritte, altri
disegni ecc...
Se io volessi assegnare un collegamento ad un elemento presente
nell'immagine come devo fare?
Ad es. ho nell'immagine: "Clicca qui per aprire questo file" ; vorrei che
passando il cursore sulla scritta ci sia un collegamento che mi permetta di
aprire ad es. un file.
Come devo fare?
Grazie a tutti.

"Mljet Dubrovnik" ha scritto nel messaggio
| Carico in una form una immagine con alcuni elementi,
| come scritte, altri disegni ecc...
| Se io volessi assegnare un collegamento ad
| un elemento presente nell'immagine come devo fare?
|
Due ipotesi:
1) Metodo semplice: in D6 il componente TImage ha
la proprieta' OnContextPopup (la eredita da TControl);
quando si clicca sull'immagine con il tasto _destro_ del mouse
si scatena detto evento. Il parametro MousePos di questo
evento contiene le coordinate del cursore: controlla se sono entro
determinati limiti (l'area dell'elemento nell'immagine) e, in caso
positivo, esegui tutte le operazioni che desideri.
2) Metodo complicato (ma non troppo): crea un componente
chiamato TArea che deriva da TGraphicControl. Rendi published
la sua property OnClick e gestisci il suo disegno a Design time.
Poi crei, sempre a design time, quante TArea vuoi - nella posizione e
delle dimensioni che desideri - sopra alla tua immagine ed infine scrivi
i tuoi eventi OnClick per ogni TArea (trovo piu' difficile spiegarlo
che implementarlo). Comuque, qualcosa di simile esiste gia' e se
cerchi sui soliti siti di componenti puoi trovare cio' che fa al
caso tuo - forse addirittura una TImage che gestisce quello che ti serve.
--
Ciao.
ACSH
[D4]
---------------------------
Chi fa da se'
fatica il doppio
immagine

Io ho Delphi 5,
posso utilizzare il secondo metodo o ce n'è qualcun'altro?
Grazie.
ACSH <cat...@XXXinfinito.it> wrote in message
AuHk8.68796$_u5.1...@news1.tin.it...


Scarica il componente THotSpotImage.
Fa esattamente al caso tuo.
Lo trovi su torry o sul sito del produttore:
http://www.tmssoftware.com
il file dobrebbe chiamarsi hsimg.zip
Praticamente e' un TImage con aree sensibili, e il metodo click ti da l'area
che hai cliccato. Ha un property-editor molto ben fatto per definire le aree
e varie opzioni.
Se non lo trovi dimmelo che te lo invio.
Ciao!                {MSX}
--
{MSX}  -  
http://msx.rules.it
Mantenitore delle FAQ di it.comp.lang.delphi,
reperibili qui: 
http://gpi.infomedia.it/abc/delphi/FaqDelphi.txt

Grazie mille MSX quel componente da te segnalato è grandioso!
Ora però c'è un altro problema...
Nella form ho caricato una immagine con diverse scritte ma come faccio ad
assegnare un singolo evento a ciascuna scritta?
Ossia io voglio far aprire un .exe quando clicco su ciascuna scritta...
la funzione la conosco ( SHELLEXECUTE ecc....) ma se la voglio applicare a
ciascuna scritta?
Grazie.
{MSX} <nlugat...@THISinwind.it> wrote in message
6RIk8.25787$1S3.8...@twister1.libero.it...


 ciascuna scritta?
Non puoi assegnare metodi diversi, ma nell'evento OnHotSpotClick, ricevi tra
i parametri l'hot spot cliccato.
Puoi quindi differenziare le azioni da compiere in base a quel dato, ad
esempio:
procedure TForm1.HotSpotImage1HotSpotClick(Sender: TObject;
  HotSpot: THotSpot);
begin
 case HotSpot.ID of
  1: FaiUnaCosa;
  2: FanneUnAltra;
 end;
end;
Oppure usando HotSpot.Name
Nel tuo caso potrebbe essere:
 case HotSpot.ID of
  1: ShellExecute(programmaA);
  2: ShellExecute(programmaB);
  ecc ecc
 end;


"Mljet Dubrovnik" ha scritto nel messaggio
|
| Io ho Delphi 5,
|
Questa unit d'esempio dovrebbe funzionare anche in D5.
Puoi migliorare il componente aggiungendo altri eventi -
puo essere utile l'evento OnDblClick, per esempio.
-----------------------------------------------------------------------
unit Area;
interface
uses
  Classes, Graphics, Controls;
type
  TArea = class(TGraphicControl)
  public
    constructor Create(AOwner: TComponent); override;
    procedure Paint; override;
  published
    property OnClick;
  end;
  procedure Register;
implementation
procedure Register;
begin
  RegisterComponents('ComponentiPersonali', [TArea]);
end;
constructor TArea.Create(AOwner: TComponent);
begin
  // creo il componente
  inherited Create(AOwner);
  Width  := 100;
  Height := 50;
end;
procedure TArea.Paint;
begin
  // disegno il quadrato a Design Time
  if csDesigning in ComponentState then begin
    Canvas.Brush.Style := bsClear;
    Canvas.Pen.Color   := clRed;
    Canvas.Pen.Style   := psDashDotDot;
    Canvas.Rectangle(0, 0, Width, Height);
  end;
end;
end.
-----------------------------------------------------------------------


 wrote in message
news:LGGk8.24800$1S3.7...@twister1.libero.it...

Ma, io di solito uso l'ingegno. Fai delle label sopra alle scritte
dell'img e setta
proprietà OnClick per ogni label. Magari fai che il cursore diventa una
mano quando ci passa sopra
in modo da imitare un link html. Facile, veloce, funzionale :P
Meditate ragazzi meditate!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Funziona alla grande!
Non saprei proprio come ringraziarti!Ti posso offrire una cena?
Comunque scusami per il disturbo ma sono alle prime armi....
1000 grazie!