Ir para o conteúdo

Raficcha

Cadastrado: 04 Out 2010
Offline Última atividade: Ago 26 2011 10:38
-----

Códigos que criei

Monitor De Arquivos

26 agosto 2011 - 10:38

Esta vendo uns códigos antigos que tinha feito em delphi e acabei encontrando este que acho legal compartilhar. Ele não tem a melhor forma de programação e pode ter alguns erros de ortografia, mas vale a pena ver.

Este componente pode ser adicionado ao delphi ou utilizado dinamicamente. Serve para informar quando um arquivo é alterado.

unit FileMonitor;

interface

uses
  SysUtils, Classes, StdCtrls, ExtCtrls;

type
  TFileMonitorFile = record
  	arquivo : string;
    data_alteracao: integer;
  end;

  TAlterFileProcedure = procedure(FileName: string) of object;

  TFileMonitor = class(TComponent)
  private
    { Private declarations }
    FIntervalo: integer;
    FOnAlterFile: TAlterFileProcedure;
    FOnDestroy : TNotifyEvent;
    FOnCreate: TNotifyEvent;
    FOnVerify: TNotifyEvent;
    TimerMonitor: TTimer;
    FilesArray : array of TFileMonitorFile;
    procedure TimerMonitosOnTimer(Sender: TObject);
  protected
    { Protected declarations }
  public
    { Public declarations }
	constructor Create(AOwner: TComponent); override;
    Destructor destroy;
 //   procedure start;
  published
	FFiles: TStringList;
    { Published declarations }
   // property FilesMonitoring: TStringList read FFiles write FFiles;
   property IntervalVerify: integer read Fintervalo write Fintervalo default 1000;
    property onAlterFile: TAlterFileProcedure read FOnAlterFile write FOnAlterFile;
    property onDestroy : TNotifyEvent read FOnDestroy write FOnDestroy;
    property onCreate: TNotifyEvent read FOnCreate write FOnCreate;
    property onVerify: TNotifyEvent read FOnVerify write FOnVerify;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('ROBJ', [TFileMonitor]);
end;

{ TFileMonitor }



constructor TFileMonitor.Create(AOwner: TComponent);
begin
  inherited;
  	Self.FIntervalo := 1000;
  	Self.FFiles := TStringList.Create;
    SetLength(Self.FilesArray, 1);
  	Self.TimerMonitor := TTimer.Create(nil);
    Self.TimerMonitor.OnTimer := Self.TimerMonitosOnTimer;
  //  Self.TimerMonitor.Enabled := false;
  if (@Self.FOnCreate <> nil) then
  	Self.FOnCreate(Self);
end;

destructor TFileMonitor.destroy;
begin
    Self.TimerMonitor.Enabled := false;
    Self.TimerMonitor.Destroy;
    Self.FFiles.Destroy;
    if (@Self.FOnDestroy <> nil) then
    	Self.FOnDestroy(Self);
end;

{procedure TFileMonitor.start;
begin
	Self.TimerMonitor.Enabled := true;
end;}

procedure TFileMonitor.TimerMonitosOnTimer(Sender: TObject);
var
	cont, cont2 : integer;
    encontrado : boolean;
begin
	Self.TimerMonitor.Interval := Self.FIntervalo;
	for cont := 0 to Self.FFiles.Count-1 do
    begin
    	//percore a lista de arquivos e percore o array em busca do arquivo
        encontrado := false;
        for cont2 := 1 to length(Self.FilesArray)-1 do
        begin
        	if (FilesArray[cont2].arquivo = Self.FFiles[cont]) then
            begin
            	encontrado := true;
                //verificar se o arquivo foi alterado
                	if (FileAge(FilesArray[cont2].arquivo) <> FilesArray[cont2].data_alteracao) then
                    begin
                		//atualizar a data
                        FilesArray[cont2].data_alteracao := FileAge(FilesArray[cont2].arquivo);
                    	//chamar o evento
                        if (@Self.FOnAlterFile <> nil) then
                            Self.FOnAlterFile(FilesArray[cont2].arquivo);
                    end;
                //parar o loop
                break;
            end;
        end;
        //verificar se foi encontrado, senão, adicionar à lista
        if (encontrado = false) then
        begin
        	SetLength(Self.FilesArray, length(Self.FilesArray)+1);
            Self.FilesArray[Length(Self.FilesArray)-1].arquivo := Self.FFiles[cont];
            Self.FilesArray[Length(Self.FilesArray)-1].data_alteracao := FileAge(Self.FFiles[cont]);
        end;
    end;

    if (@Self.FOnVerify <> nil) then
    	Self.FOnVerify(Self);
end;

end.
 

Converter Inteiro Para Outra Base Numérica

05 outubro 2010 - 09:55

O código abaixo converte um número inteiro para uma outra base. Você pode informar a base e os caracteres que compõe esta base númerica.
A base padrão da função é a hexadecimal (como pode ser visto no escopo, incluindo os caracteres que a compõe).

function IntToBase(Valor : integer; base: integer = 16; valores: string = '0123456789ABCDEF'):string;
var
	Saida : string;
	corrente : integer;
	fltValor: real; //o usuario informa um integuer, mas a função trabalha com float
	cont : byte;
begin
	Result := '';
	Saida := '';
	fltValor := Valor;
 	while (fltValor >= base)  do begin
	 	corrente := strtoint(floattostr(fltValor)) mod base;
		fltValor := (fltValor -(strtoint(floattostr(fltValor)) mod base))/base; //diminui-se o valor para que o resultado não gere um numero quebrado
		Saida := Saida + valores[corrente+1];
	end;
  	corrente := strtoint(floattostr(fltValor)) mod base;
	Saida := Saida + valores[corrente+1];
	for cont := length(Saida) downto 1 do
		Result := Result+Saida[cont];

    if (length(Result) = 1) then
        Result := valores[1]+Result;
end;

exemplos de uso:

conversão para base hexadecimal:
IntToBase(1000);

conversãro para base octal:
IntToBase(1000, 8);

conversão para base binária:
IntToBase(1000, 2);

conversão para uma base de exemplo 20 com caracteres alfanuméricos não sequenciais (como na base hexadecimal)
IntToBase(1000, 20, '0123456789ANHKIUYSJD');