Jump to content

[Delphi] Arrastar ficheiro para programa


passarito

Recommended Posts

Boas,

Estou a pensar desenvolver um programa simples que copia um dado ficheiro para um local pré-estabelecido.

A duvida que eu queria colocar é a seguinte:

Além de existir a caixa de diálogo para seleccionar o ficheiro, há hipótese de arrastar o ficheiro para o programa e ele ficar com a indicação do ficheiro e caminho sem ter de usar a caixa de diálogo do "file open"?

Obrigado

Link to comment
Share on other sites

Olhó passarito! 🙂

Sim, claro que dá.
Tu podes fazer da form um Drop Target para ficheiros, e depois 'ouvir' o windows quando ele te disser quais os ficheiros.

  • Para tal, começas por colocar na uses da tua form as seguintes units.
Uses
    // blablabla
  , Winapi.Messages
  , ShellAPI;  
  • No FormCreate, activas o Drop Target
procedure TForm1.FormCreate(Sender: TObject);
begin
     DragAcceptFiles(Handle, True);
end;
  • Na secção Public da form, declaras o método que vai 'ouvir' o Windows:
  TForm1 = class(TForm, IFileDropTarget)
    // BlaBlaBla
    procedure FormCreate(Sender: TObject);
  private
  public
    procedure FileDrop(var Msg: TMessage); Message WM_DROPFILES; // Este método irá ouvir as mensagens relativas a file dropping
  end;
  • E a sua implementação:
procedure TForm1.FileDrop(var Msg: TMessage);
const
     cMaxFileNameLength = 255;
var
   i        : Integer;
   FCount   : Integer;
   FileName : Array [0..cMaxFileNameLength] of Char;
begin
     // Verifica quantos ficheiros estão a ser largados
     FCount := DragQueryFile(Msg.WParam, $FFFFFFFF, FileName, cMaxFileNameLength);

     // "Lê" os nomes dos ficheiros que estão a ser largados
     for i := 0 to FCount - 1 do
         begin
              DragQueryFile(Msg.WParam, i, FileName, cMaxFileNameLength);
              
              // Faz o que quiseres com o nome do ficheiro
              Memo1.Lines.Add(FileName);
         end;

     // Finaliza
     DragFinish(Msg.WParam);
end;

 

Em vez de adicionar FileName ao Memo1, podes fazer o que quiseres com ele. 😉

Edited by nunopicado
  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Era isto mesmo que eu queria saber. Obrigado.

Tenho de ver ser o Delphi que vou usar tem essas livrarias (uses) ou não.

O programa que idealizei é muito simples (para lá de simplérrimo!), sem abrir o ficheiro nem qualquer grafismo. Ao nível do "Welcome!" ou "Olá eu sou o ...."

Se resolver fazer isto, vou ponderar se complico isto um bocadito aqui com uma ideia que tive ou não. Não te preocupes que depois eu chateio-te.

 

À parte disto tudo, só para te dizer que em Dezembro fui ficar a Bolfiar e passei pelo vosso Pai Natal gigante e perguntei por ti. O gajo disse-me que não te conhecia... Afinal és popular ou não? 😄

Link to comment
Share on other sites

LOL Podias ter dito alguma coisa... 😛
O pai natal tem é inveja da minha generosidade! 😄

Quanto ao Delphi, o Delphi Starter já é gratuito, pelo que se quiseres aventurares-te numa versão actual, ficas satisfeito. 🙂

De resto, ambas as units são básicas, mesmo o Delphi 7 tem isso de certeza. A ShellAPI são wrappers para processos do Windows, e a Messages para a estrutura de mensagens que o Windows usa para tudo o que é GUI.

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Delphi starter? Pois, pois, tenho de pensar. É que a "complicação" que eu estava a pensar era a incorporação de um pequeno registo numa BD de access (ainda em .MDB).

Seria apenas data, nome do ficheiro e eventualmente o utilizador. E o starter fica-se nas couves, a não ser que haja alguma forma de contornar isso uma vez que um BD simples e é só para registar(ou alterar no caso do nome do ficheiro já existir) e eventualmente consultar.

Link to comment
Share on other sites

Lembei-me agora de uma coisa, com o delphi posso mandar executar uma url? Isto é, mandar executar, abrir uma página de internet... algo do género:

http://myspace/webservices/registo.asp?data=10/2/2017&fnome=aaa.txt

Se funcionasse não necessitava do delphi para fazer esse registo, com o ASP e o IIS eu tratava-lhe da saúde.

Edited by passarito
Link to comment
Share on other sites

No Starter podes instalar o componente ZeosLib, que te permite aceder a qualquer motor DB.

Também podes usar um TWebBrowser, para aceder a "qualquer" página web.

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Podes ainda aceder ao conteúdo de um ficheiro alojado online sem necessidade de abrir a página.
Podes abrir directo o ficheiro recolhendo o seu conteúdo (texto).

Para isso tens a suite de componentes Indy.

Edited by nunopicado
  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Para usares o Indy para ir buscar o conteúdo de um ficheiro online, basta isto:

  • Colocar na form um componente TidHTTP
  • Fazer a chamada onde quiseres, conforme o exemplo:
  • procedure TForm1.Button1Click(Sender: TObject);
    begin
         memo1.lines.text := idHTTP1.Get('http://myspace/webservices/registo.asp?data=10/2/2017&fnome=aaa.txt');
    end;

     

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.