Newsgroup: it.comp.lang.delphi
Titolo: Consiglio su componenti da usare...

Salve amici, mi è stata fatta richiesta per un programma, vi spiego in
sintesi cosa devo fare...
Devo avere in una form a video un'immagine di una città (la carico da hd), e
permettere all'utente di piazzare delle bandierine (o roba simile)
sull'immagine, e poterle spostare liberamente. In seguito quando riapre il
programma, le bandierine devono essere nello stesso posto in cui le ha
lasciate, ed eventualmente poterle spostare, cancellare o aggiungerne di
nuove.
Sinceramente avevo pensato di mettere nella  form una semplice TImage, ma
per quanto riguarda "l'oggetto" bandierina da spostare all'interno
dell'immagine, non ho proprio idee...
Qualcuno sà darmi qualche consiglio, link,etc...???
Grazie per la cortese attenzione!
Buona cena!


Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)

Qualcosa di standard con delphi no eh...pekkato :(  io pensavo di creare
oggetti dinamici e di spostarli sull'immagine...ma non sò che oggetti usare
:°(


potresti usare delle semplici bitmap (sempre gestite con TImage)
trasparenti.
Ciao, Sandro

 oggetti usare
In Delphi ci sono tutti gli strumenti che ti servono...potresti
utilizzare anche la semplice PaintBox, ma tieni conto che le performance
complessive, con i metodi di disegno forniti normalmente dal Canvas
(l'oggetto che incapsula alcune funzioni GDI dell'API di Windows) non
sono cosě performanti, specialmente se la tua area deve essere spesso
ridisegnata ed č composta da un fondale a tinta unita sul quale vengono
tracciati numerosi elementi; a quel punto, ti converrebbe forse
"chiedere aiuto" utilizzando qualche libreria o componente grafico che
gestisca autonomamente alcune delle problematiche piů complesse.


 Qualcosa di standard con delphi no
Tempo fa in giro trovai questo codice: crea un nuovo componente derivando da
TPanel e "codifica" i relativi eventi MouseMove e MouseDown come segue:
uses Winprocs;
type
  TMioPanel = class(TPanel)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
  X, Y :integer ); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer ); override;
  published
    { Published declarations }
  end;
procedure TMioPanel.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: integer);
begin
  inherited;
 if Button = mbLeft then
 begin
  WinProcs.ReleaseCapture;
  Self.Perform(WM_SysCommand, SC_DragMove, 0);
 end;
 if Button = mbLeft then
 begin
  WinProcs.ReleaseCapture;
  if (X >= Width - sizeBorder) And NOT ((Y <= sizeBorder) or (Y >= Height -
sizeBorder)) then
   Self.Perform(WM_SysCommand, sc_SizeRight , 0)
  else
  if Not( ( X <= sizeBorder ) or ( X >= Width -sizeBorder ) ) And ( Y <=
sizeBorder )  then
   Self.Perform( WM_SysCommand, sc_SizeTop , 0 )
  else
  if ( X <= sizeBorder ) And ( Y <= sizeBorder )  then
   Self.Perform( WM_SysCommand, sc_SizeTopLeft, 0 )
  else
  if ( X >= Width -sizeBorder ) and ( Y <= sizeBorder ) then
   Self.Perform( WM_SysCommand, sc_SizeTopRight , 0 )
  else
  if Not( ( X <= sizeBorder ) or ( X >= Width -sizeBorder ) ) And ( Y >=
Height - sizeBorder )  then
   Self.Perform( WM_SysCommand, sc_SizeBottom , 0 )
  else
  if ( Y >= Height -sizeBorder )  And ( X <= sizeBorder )  then
   Self.Perform( WM_SysCommand, sc_SizeBottomLeft , 0 )
  else
  if ( Y >= Height -sizeBorder ) and ( X >= Width - sizeBorder ) then
   Self.Perform( WM_SysCommand, sc_SizeBottomRight , 0 )
  else
  if Not( ( Y <= sizeBorder ) or ( Y >= Height -sizeBorder ) ) And ( X <=
sizeBorder )  then
   Self.Perform( WM_SysCommand, sc_SizeLeft , 0 )
  else
  begin
   Self.Perform( WM_SysCommand, SC_DragMove, 0 );
  end;
 end;
end;
procedure TMioPanel.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
  inherited;
 if ( X <= sizeBorder ) or ( X >= Width - sizeBorder ) then
 begin
  if ( Y >= Height - sizeBorder ) then
  begin
   if ( X >= Width - sizeBorder ) then
            begin
    Cursor := crSizeNWSE
            end
   else
            begin
    Cursor := crSizeNESW;
            end
  end
  else
        begin
            if ( Y <= sizeBorder ) then
            begin
                if ( X >= Width -sizeBorder ) then
                begin
                    Cursor := crSizeNESW
                end
                else
                begin
                    Cursor := crSizeNWSE;
                end
            end
            else
            begin
                Cursor := crSizeWE;
            end
        end
 end
 else
    begin
  if ( Y <= sizeBorder ) or ( Y >= Height - sizeBorder ) then
  begin
   Cursor := crSizeNS;
  end
  else
        begin
   Cursor := crDefault;
        end
    end
end;
Installa il tuo nuovo componente e piazzalo su un form: a runtime dovrebbe
essere riposizionabile (e resizabile).
Saluti
        Marco Bortolani
 
infoN...@marcobortolani.it

oggetti dinamici e di spostarli sull'immagine...ma non sň che oggetti usare
Il TPaintBox č quello piů adatto per disegnare (a differenza del
TImage, che non č studiato per questo ed ha un fastidioso effetto
"flickering").  Per le bandierine puoi semplicemente usare dei bitmap,
da disegnare a determinate coordinate.