Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [DELPHI]centrare immagine


    Qualcuno sa come faccio a centrare un'immagine sul punto dove faccio click con il mouse? Grazie.

  2. #2
    La mia immagine deve essere zoommata ma il centro dell'immagine deve rimanere quello in cui cui faccio click con il mouse per ottenere lo zoom.
    Ho fatto alcune prove e ne ho concluso che devo ricavare le coordinate del mouse e pensare che anche quelle coordinate si modificheranno a seguito dello zoom, invece devono rimanere le stesse.
    [code]
    var
    zoom:double;
    px,py:integer;

    begin
    Img.AutoSize := False;
    Img.ScaleMode := smStretch;
    begin
    px:=mouse.CursorPos.X;
    py:=mouse.CursorPos.Y;
    end;
    case Button of
    mbLeft:
    begin
    if (img.width >8147) then
    zoom:=1
    else zoom:=0.8;
    px:=trunc(px * zoom);
    py:=trunc(py * zoom);

    Img.Width := Trunc(Img.Width / zoom ) -px ;
    Img.Height := Trunc(Img.Height / zoom ) -py;
    end;
    end;
    [/Code ]
    Non ottengo, ahimè, risultati.
    Siccome l'immagine è contenuta in una scrollbox ho pensato che un'altra possibilità fosse agire sulle scrollbar ma a questo punto preferisco chiedere un consiglio a chi ne sa certo più di me.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,474
    Le proprietà su cui devi agire saranno Left e Top del controllo TImage contenuta nella TScrollBox, in modo da modificare la posizione del controllo quando fai clic e ingrandisci l'immagine.

    Il problema vero è determinare quali sono le coordinate da attribuire a queste proprietà a seguito del clic calcolando quelle che portano, in sostanza, il punto preciso dell'immagine su cui è avvenuto il clic al centro dell'area visibile della ScrollBox, dopo che l'immagine è stata ingrandita.

    Parlo in modo puramente teorico poiché dal lato pratico si dovrebbe studiare il meccanismo, scrivere codice appropriato e verificare i risultati; purtroppo, non ho questo tempo a disposizione, del resto manipolare le immagini non è sempre un gioco da ragazzi e la creazione di routine appropriate richiede un pochino di tempo e dedizione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Ho provato ad agire sulla proprietà left e top del controllo TImage
    codice:
    Img.Width:= trunc(Img.Width /zoom);
    Img.Height:=trunc(Img.Height/zoom);
    Img.left:=-Trunc(Img.Width - screen.width)div 2;
    Img.Top:=-Trunc(Img.Height -screen.height)div 2;
    succede che la porzione dell'immagine che rimane fuori dal controllo non la posso vedere neanche con le barre di scorrimento: è proprio tagliata fuori. E' normale che sia così?

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,474
    Originariamente inviato da vicky
    Ho provato ad agire sulla proprietà left e top del controllo TImage [...]
    Non ho capito come mai è subentrato Screen tra le variabili.

    Di solito, per effettuare la centratura, si divide per due la differenza tra la dimensione del controllo esterno e il controllo interno, non viceversa.

    A questo tipo di centratura ci avevo pensato, ma non so se è quello che vuoi: quando si clicca nella parte alta dell'immagine, ad esempio, essa deve essere ingrandita, è vero, ma io non mi aspetterei di trovarmi sempre al centro dell'immagine, bensì nell'area che ha come centro il punto in cui ho fatto clic. E' questo il problema che secondo me va studiato bene.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.