Fórum Ajuda para passar de C# para o Delphi #278817

25/04/2005

0

Olá amigos

Tenho um sistema que monitora pastas. Quando abri o site hoje vi um artigo que faz a mesma coisa, porém em .net. Só que o código está em C e eu não sei nada de C. Alguem pode me ajudar com este trecho? o restante do código consegui fazer...

public Form1()
{
      InitializeComponent();

      // CHAMA FUNÇÃO DE MONITORAMENTO
      Monitora();
}

public void Monitora()
{
      Try
      {
            //FILTRANDO PELO NOME
            oMonitor.NotifyFilter = NotifyFilters.FileName;

            //OUTRAS VERIFICAÇÕES POSSÍVEIS
            //NotifyFilters.LastAccess
            //NotifyFilters.LastWrite
            //NotifyFilters.FileName
            //NotifyFilters.DirectoryName;

            //EVENTO CHAMADO AO CÓPIAR NA PASTA
            oMonitor.Created += new FileSystemEventHandler(OnChanged);

      }
      catch
      {
            MessageBox.Show("Ocorreu um erro, verifique o caminho da                   pasta monitorada!");
            this.lblAviso.Text = "";
      }

}

//EVENTO CHAMADO APÓS COPIAR O ARQUIVO
private void OnChanged(object source, FileSystemEventArgs e)
{
      cont++;
      this.txtMensagem.Text = "Arquivos monitorados: " +             cont.ToString();
      this.listArquivo.Items.Add(e.Name.ToString());
}



Obrigado

Sanses


Sanses

Sanses

Responder

Posts

25/04/2005

Rjun

Bom :

o bloco Try...catch no delphi você usaria Try...except

no trecho oMonitor.Created += new FileSystemEventHandler(OnChanged);

você esta adicionando desviando o evento Created do objeto oMonitor para a função OnChanged.


Responder

Gostei + 0

25/04/2005

Massuda

Sem saber o que é oMonitor fica difícil fazer a conversão, mas segue alguns pontos importantes:[list:b438774e90][*:b438774e90]C usa a função InitializeComponent() para criar dinamicamente todos os componentes contidos no form; em Delphi (ao menos para Win32) normalmente isso não é preciso porque os componentes são criados através do arquivo DFM.[*:b438774e90]oMonitor.NotifyFilter é uma propriedade que recebe um dos valores possíveis da enumeração NotifyFilters.[*:b438774e90]A linha
oMonitor.Created += new FileSystemEventHandler(OnChanged);
equivale a fazer
oMonitor.Created := OnChanged;
Assumindo que OnChanged seja um procedure do tipo esperado pelo evento Created.[*:b438774e90]Em C [b:b438774e90]this[/b:b438774e90] tem o mesmo significado de [b:b438774e90]Self[/b:b438774e90] em Delphi.[/list:u:b438774e90]


Responder

Gostei + 0

25/04/2005

Sanses

olá

o link da matéria é este
[url]http://www.neoficio.com.br/msdn/colunistas/Schmitt/03_monitorando_pastas.asp[url]

mesmo com a ajuda de voces ainda não consegui, vou ter que estudar C, rss.

Obrigado

Sanses[/url]


Responder

Gostei + 0

25/04/2005

Sanses

nossa, msg cheia de erros...
o link

[url]http://www.neoficio.com.br/msdn/colunistas/Schmitt/03_monitorando_pastas.asp[/url]

Sanses


Responder

Gostei + 0

25/04/2005

Massuda

Não seria mais simples fazer isso em Delphi? Me parece que existe um componente que faz isso que vem junto com o Delphi a partir da versão 6 (não lembro o nome, mas parece que está na aba Samples).


Responder

Gostei + 0

25/04/2005

Rjun

Me parece que existe um componente que faz isso que vem junto com o Delphi a partir da versão 6


[b:562b8313a6]ShellChangeNotifier[/b:562b8313a6] na aba Samples


Responder

Gostei + 0

25/04/2005

Sanses

mas não serve para o .net

mesmo assim obrigado

Sanses


Responder

Gostei + 0

25/04/2005

Sanses

e a propósito, estou tentando fazer no delphi mesmo, como o proprio título da mensagem diz, passar de C para Delphi

Sanses


Responder

Gostei + 0

25/04/2005

Rjun

D8 ou D2005 ?


Responder

Gostei + 0

25/04/2005

Sanses

D 2005 e o caso é que minha aplicaçãojá etá em pascal,nãohá comou utiliza o C.

Sanses


Responder

Gostei + 0

25/04/2005

Sanses

UP :)


Responder

Gostei + 0

25/04/2005

Nerdex

Em vez de usar a ShellChangeNotifier da aba Samples...
Pode usara API Hoock, que funciona com .NET...

Nosso colega Nildo é perito nesse assunto...
Tem um site para baixar isto: MadHoock (dá uma pesquisada antes aqui);


Responder

Gostei + 0

26/04/2005

Sanses

Concordo que é uma saída Nerdex, mais veja, estou migrando meu programa para o .NET. Tenho tempo para fazer, e vou aproveitar este tempo para aprender a trabalhar com as classes que o framework oferece, mesmo por que, quando essa plataforma estiver sendo amplamente utilizada, e se tivermos conhecimento das técnicas aplicadas, não precisaremos de componentes de terceiros para realizar tarefas que são nativas dos respectivos namespaces. Por isso volto a perguntr, alguem conseguiu resolver este problema? Sim, porque todos os exemplos( a maioria ) que encontrarmos, fatalmente será em C ou VB.

Obrigado pela Atenção
Mas continua sem solução

Sanses


Responder

Gostei + 0

26/04/2005

Massuda

Eu não trabalho com Delphi para .Net, mas tenho algum conhecimento de C.

Acho que o primeiro passo seria você criar uam instância do monitor via Delphi. A classe FileSystemWatcher é definida no namespace System.IO do framework. Com certeza os colegas que usam D8 ou D2005 podem te ajudar neste ponto.

Feito isso, você deve ajustar a propriedade NotifyFilter e atribuir um tratador de evento ao evento Created.


Responder

Gostei + 0

26/04/2005

Sanses

Olá

Meu problema está aqui:
procedure monitora();
begin
  try
   //FILTRANDO PELO NOME
   oMonitor.NotifyFilter := NotifyFilters.FileName;
   //OUTRAS VERIFICAÇÕES POSSÍVEIS, //NotifyFilters.LastAccess
   //NotifyFilters.LastWrite, //NotifyFilters.FileName, //NotifyFilters.DirectoryName;
   //EVENTO CHAMADO AO CÓPIAR NA PASTA
   oMonitor.Created := FileSystemEventHandler(Changed);
   except
   MessageBox.Show(´Ocorreu um erro, verifique o caminho da pasta monitorada!´,´Aviso Monitor´);
   end;
end;


oMonitor.Created := FileSystemEventHandler(Changed); >>ERRO

Diz que Changerd não é reconhecido
e também ´:=´ read/qrite not allowed CLR

Sanses


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar