Analitcs

Pesquisar no conteúdo do blog.atlabs.com.br

segunda-feira, 26 de setembro de 2016

DELPHI - Get System Operational Version (Old GetWinVersion)

Reações: 
Função para recuperar a versão do sistema operacional (Teste realizado com a versão do Delphi 10.1 Berlin)


    Function GetOsVersionDetail: String;
    Function GetOsVersion: String;
//...

function GetOsVersion: String;
var
  AOsVersion : TOsVersion;
begin
  Result := AOsVersion.Name;
end;

function GetOsVersionDetail: String;
var
  AOsVersion : TOsVersion;
  StrL : TStringList;
begin
  StrL := TStringList.Create;
  try
    StrL.Clear;
    StrL.Add(AOsVersion.ToString);
    StrL.Add('--------------------');
    case AOsVersion.Architecture of
      arIntelX86 : StrL.Add('Architecture: IntelX86');
      arIntelX64 : StrL.Add('Architecture: IntelX64');
      arARM32    : StrL.Add('Architecture: ARM32');
      arARM64    : StrL.Add('Architecture: ARM64');
    end;


    case AOsVersion.Platform of
      pfWindows  : StrL.Add('Platform: Windows');
      pfMacOS    : StrL.Add('Platform: MacOS');
      pfiOS      : StrL.Add('Platform: iOS');
      pfAndroid  : StrL.Add('Platform: Android');
      pfWinRT    : StrL.Add('Platform: WinRT');
      pfLinux    : StrL.Add('Platform: Linux');
    end;
    StrL.Add('OS Name: ' + AOsVersion.Name);
    StrL.Add('Buid: ' + Inttostr(AOsVersion.Build));
    StrL.Add('Major Version: ' + Inttostr(AOsVersion.Major));
    StrL.Add('Minor Version: ' + Inttostr(AOsVersion.Minor));
    StrL.Add('ServicePack Major Version: ' + Inttostr(AOsVersion.ServicePackMajor));
    StrL.Add('ServicePack Minor Version: ' + Inttostr(AOsVersion.ServicePackMinor));
  finally
    Result := StrL.Text;
    FreeAndNil(StrL);
  end;
end;

segunda-feira, 19 de setembro de 2016

DELPHI - WebBroker - Como exibir imagens de um diretório local

Reações: 
Como fazer para exibir uma imagem de um site criado pelo webbroker, sem a utilização do Apache ou do ISS por ex?

Simples!

Para isso iremos precisar de uma ação ("action") no WebModule que acione a imagem por linha de comando:


E preparar seu Html para enviar o local da imagem.

Deixei dentro do meu diretório do cgi, um local com as imagens chamado "img"



Criei uma função:


function GetLocalIMG(AImgName: String): String;
begin
  Result := '../Img?Name=' + AImgName;
end;


E no Htm, alterei para exibir o seguinte:

...
    '      ' + sLineBreak +
    '        
' + sLineBreak + ' ' + sLineBreak + ' '...


E no action do Webmodule

procedure TwmLic.wmLicwaImgAction(Sender: TObject; Request: TWebRequest;
  Response: TWebResponse; var Handled: Boolean);
var
  Name: String;
  ImageStream: TmemoryStream;
  sFileImg : String;
  sExt : String;
begin
  Name := Request.QueryFields.Values['Name'];
  Name := StringReplace(Name, '/', '\', [rfReplaceAll, rfIgnoreCase]);

  sFileImg := ExtractFilePath(Application.exeName) + Name;
  if FileExists(sFileImg) then
  begin
    sExt := ExtractFileExt(sFileImg);
    sExt := StringReplace(sExt, '.', '', [rfReplaceAll, rfIgnoreCase]);
    ImageStream := TMemoryStream.Create;
    try
      ImageStream.LoadFromFile(sFileImg);
      ImageStream.Position := 0; // reset ImageStream
      Response.ContentType := 'image/' + sExt;
      Response.ContentStream := ImageStream;
      Response.SendResponse;
    finally
      FreeAndNil(ImageStream);
    end;
  end;
end;


Com este comando acima, você lista a imagem do disco para a memória do servidor, e depois transmite a informação do stream para o html direto.

Testado em Rad Studio 10.1 Berlin em 19/09/2016

terça-feira, 13 de setembro de 2016

DELPHI - ClientDataSet Erro: "missing data provider or data packet" quando é carregado de um stream (LoadFromStream)

Reações: 
Após não achar nada na internet que funcione, fica a dica:

// Salvar um CDS dentro de um campo blob no banco de dados
var
AStreamCDS : TMemoryStream;
AMsgCDS : String;
begin
  //...
  AStreamCDS := TMemoryStream.Create;
  try
    CDS.SaveToStream(AStreamCDS, dfBinary);
    CDSDestino.Edit; // Lembarndo que precisa de um campo de id, caso contrario não funciona no applyupdates
    try
      TBlobField(CDSDestino.FieldByName('CAMPO_BLOB')).LoadFromStream(AStreamCDS);
    except
      on E: Exception do
        AMsgCDS := E.Message;
    end;
    CDSDestino.Post;
  finally
    AStreamCDS.Free;
  end;
  //...



// Salvar de um Campo Blob no banco de dados (um CDS salvo como binario) para um TStream, e recarregar dentro de um CDS
var
AStreamCDS : TStream;
begin
  //...
  AStreamCDS :=  CDS_Local.CreateBlobStream(CDS_Local.FieldByName('BL_DATA_SYNC'), bmRead); // Carrega um Cds salvo dentro de um blob
  try
    ACdsStream := TClientDataSet.Create(Nil);
    ACdsStream.LoadFromStream(AStreamCDS);
  finally
    AStreamCDS.Free;
  end;
  //...

Max Gehringer