Newsgroup: it.comp.lang.delphi
Titolo: Info componenti

Ciao,
ho due domande da farvi:
1) Come posso fare a gestire il drag&drop sul componente TImage? Ho provato
tutti gli eventi possibili ma nessuno fa al caso mio! Ho bisogno di caricare
un'immagine non proveniente dall'applicazione ma, ad esempio dal desktop.
2) C'è un modo di fare l'override delle funzioni dei componenti senza
doverne creare uno nuovo? Mi conviene?
Grazie e scusate il mio linguaggio non proprio tecnico!
Dr.Phobos

 Grazie e scusate il mio linguaggio non proprio tecnico! Dr.Phobos
figurati,
ma visto che siamo in argomento le "funzioni dei componenti" si chiamano
"metodi" ;)
Ciao,
Alan Solo

 ha scritto nel messaggio
news:94pvih$duupp$1...@ID-44131.news.dfncis.de...


 daresti qualche consiglio?
hmmmm... se vuoi fare il drag and drop proprio sull'oggetto specifico,
in questo caso sei giustificato al non trovare l'handle.... non esiste!
;) (i derivati da TGraphicControl non ne hanno, per una questione di
velocita' nel disegnarli, credo...)
cmq, non ho in mente idee chiare, te le butto li':
- mettere un TPanel (o simile) e piazzarci sopra il TImage
  con aligned := alClient e gestire il messaggio d&d dal TPanel
- come sopra ma mettre il tutto in un frame (se hai delphi 5).. sempre se
  i frame hanno un handle...
- farti un oggetto derivato da TImage che crea al suo interno un
  TGraphicControl da usare come parent per disegnare il TImage
- altre soluzioni, che ci saranno... ma sono molto stanco
  lascio la parola...
se mi vengono illuminazioni te lo faccio sapere...
Ciao,
Alan Solo

> se mi vengono illuminazioni te lo faccio sapere...
ho provato, pero' non piace molto (e' un derivato di TPanel,
sarebbe meglio uno di TImage ma non sono riuscito...)
/***************************************************************/
unit DGImage;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs,ExtCtrls, ShellAPI;
type
  TOnDropFile = procedure(FileName : string) of object;
  TDGImage = class(TPanel)
  private
   { Private declarations }
   FImage : TImage;
   FLoadFileOnDrop: boolean;
   FAcceptFileDrag : boolean;
   FOnDropFile : TOnDropFile;
   FLastFileDropped: string;
  protected
    { Protected declarations }
    procedure SetAcceptFileDrag(AValue : boolean);
  public
    { Public declarations }
   constructor Create(AOwner: TComponent); override;
   procedure DropFile (var Msg : TMessage); message WM_DROPFILES;
  published
    { Published declarations }
   property OnDropFile : TOnDropFile read FOnDropFile write FOnDropFile;
   property LoadFileOnDrop : boolean read FLoadFileOnDrop write FLoadFileOnDrop;
   property LastFileDropped: string read FLastFileDropped;
   property AcceptFileDrag: boolean read FAcceptFileDrag write SetAcceptFileDrag;
   property Image: TImage read FImage write FImage;
  end;
procedure Register;
implementation
procedure Register;
begin
  RegisterComponents('Samples', [TDGImage]);
end;
constructor TDGImage.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 FImage := TImage.Create(Self);
 FImage.Parent := Self;
 FImage.Align := alClient;
 AcceptFileDrag := True;
 LoadFileOnDrop := True;
end;
procedure TDGImage.SetAcceptFileDrag(AValue: boolean);
begin
 FAcceptFileDrag := AValue;
 DragAcceptFiles(Self.Handle, AValue);
end;
procedure TDGImage.DropFile(var Msg: TMessage);
var
  hDrop: Integer;
  Buffer: Array[0..255] of Char;
begin
  hDrop := Msg.wParam;
  DragQueryFile(hDrop,0,Buffer,255);
  FLastFileDropped := Buffer;
  DragFinish(hDrop);
  if FLoadFileOnDrop
   then FImage.Picture.LoadFromFile(FLastFileDropped);
  if Assigned(FOnDropFile)
   then FOnDropFile(FLastFileDropped)
end;
end.
/**************************************************************/
vedi se ti va bene (per funzionare... funziona... :)
Ciao,
Alan Solo