Accedi per seguire   
Seguaci 0
ZipGenius

[delphi] Posizionare Una Tlabel Su Una Timage E Solo All'interno D

13 messaggi in questa discussione

Problema...

Ho una TImage con un'immagine BMP. Voglio che l'utente premendo il bottone "Add Text" veda comparire una TLabel sull'immagine e gli sia consentito si trascinare il testo nell'area dell'immagine ma non al di fuori di questa.

Per il movimento del componente TLabel non ho problemi perché ho usato google.jpgTMove VCL: TMove mi consente di impostare quattro proprietà per impedire che il componente da spostare non superi tali limiti, cioè...

  • MinLeft
  • MinTop
  • MaxLeft
  • MaxTop

Il vero problema sorge nel momento in cui indico le coordinate alle quattro proprietà indicate qui sopra: ogni volta che vado a spostare il TLabel, questo se ne va fuori dall'immagine e si posiziona in un'altra area dello ScrollBox che contiene il tutto; se sposto il TLabel qui dove s'è posizionato da sè, il TLabel rispetta i limiti indicati (cioè non si può spostare oltre una certa area che però non coincide con le coordinate del TIMage).

Ricapitolando: devo far coincidere l'area delimitata nelle quattro proprietà di TMove con le coordinate dell'area che occupa il TImage.

Mi pare che dovrei usare ClientToScreen o ScreenToClient, ma non ho mai capito come funzionano.

Spero di essere stato chiaro :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Metto le mani avanti dicendo che non conosco la sintassi di Delphi... :)

Quindi...ipotizziamo che il controllo TImage sia posizionato nella form con le proprietà:

TImage.left=100
TImage.top=100

Presumo tu abbia impostato i 4 parametri in questa maniera quindi:

MinLeft = TImage.left
MinTop = TImage.top
MaxLeft = TImage.left+TImage.width
MaxTop = TImage.left+TImage.height

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ho già fatto questo tentativo, ma il TLabel appare dove non dovrebbe...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Le specifiche di TMove VCL immagino che non ti aiutino granchè... <_<

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Se devo essere sincero non ho capito molto quello che vorresti fare :)

Per ora posso dirti cosa sia ClientToScreen (e la sorella ScreenToClient)

Questi due metodi (di TControl) servono per convertire le coordinate logiche in coordinate fisiche e viceversa. In pratica se ad esempio una form si trovasse con Top e Left rispettivamente a 50, 50, un Form1.ClientToScreen(Point(50, 50)) restituirebbe un Point(100, 100).

In pratica le coordinate relative (50, 50) della form verrebbero trasformate nelle coordinate di schermo (assolute) (100, 100).

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Quindi non vorrei che le proprietà sopra citate, ragionino con le coordinate dello schermo e non della form...

A questo punto ScreenToClient dovrebbe venire in tuo soccorso...

:) ...giusto?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Se devo essere sincero non ho capito molto quello che vorresti fare :P

Per ora posso dirti cosa sia ClientToScreen (e la sorella ScreenToClient)

Questi due metodi (di TControl) servono per convertire le coordinate logiche in coordinate fisiche e viceversa. In pratica se ad esempio una form si trovasse con Top e Left rispettivamente a 50, 50, un Form1.ClientToScreen(Point(50, 50)) restituirebbe un Point(100, 100).

In pratica le coordinate relative (50, 50) della form verrebbero trasformate nelle coordinate di schermo (assolute) (100, 100).

Ipotizza di avere in una form un controllo contenitore (ed. TabControl) con al suo interno un altro controllo(es. Label)...lui vuole poter muovere la label mediante l'evento Drag&Drop (immagino) all'interno del TabContol, ma solo ed esculsivamente al suo interno e non su tutta la form... :P

Mi pare che il problema sia questo... :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ipotizza di avere in una form un controllo contenitore (ed. TabControl) con al suo interno un altro controllo(es. Label)...lui vuole poter muovere la label mediante l'evento Drag&Drop (immagino) all'interno del TabContol, ma solo ed esculsivamente al suo interno e non su tutta la form... :P

Mi pare che il problema sia questo... :)

Ah :P

Non conosco il componente TMove... Quindi non so se utilizza coordinate logiche o coordinate fisiche...

Se fossero coordinate fisiche allora si, dovresti utilizzare ClientToScreen e ScreenToClient...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Zip...sei riuscito a risolvere il problema?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ho trovato il componente google.jpgCanvasText, che fa proprio quel che mi serve, però ha una grossissima limitazione: le immagini nel TImage devono essere in formato .BMP, altrimenti genera una violazione d'accesso.

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
Ho trovato il componente google.jpgCanvasText, che fa proprio quel che mi serve, però ha una grossissima limitazione: le immagini nel TImage devono essere in formato .BMP, altrimenti genera una violazione d'accesso.
:up1:

...e cosa aspettavi a dircelo... :angel_not: :angel_not: :angel_not:

:)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti
...e cosa aspettavi a dircelo...

Perché non ho risolto :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Perché non ho risolto :)

:P:P:wub:

Il componente è OpenSource?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per partecipare

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!


Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.


Accedi Ora
Accedi per seguire   
Seguaci 0