Fórum ShortDateFormat x Windows 7 - Erro #427972

03/11/2012

0

Estou fazendo uns testes com o Onguard para fazer a "proteção à pirataria" de um sistema meu. Logo ao executar o programa dá o seguinte erro: "no argument for format '%s' ". O erro dá numa linha de uma unit do componente, alinha é: S := ShortDateFormat; no seguinte trecho de codigo:

function OgFormatDate(Value : TDateTime) : string;
  {convert date to string with 4-digit year and 2-digit month}
var
  S : string;
begin
  S := ShortDateFormat;
  if Pos('yyyy', S) = 0 then
    Insert('yy', S, Pos('yy', S));
  if Pos('MMM', S) > 0 then
    Delete(S, Pos('MMM', S), 1);
  Result := FormatDateTime(S, Value)
end;


Dei uma fuçada na internet, e vi q o erro pode ser por causa do formato de data do Windows 7. Alguém sabe como posso resolver este problema, pra funcionar corretamente em qualquer S.O. ?
Desde já agradeço.
Rodrigo Barra

Rodrigo Barra

Responder

Posts

03/11/2012

Marco Salles

Estou fazendo uns testes com o Onguard para fazer a "proteção à pirataria" de um sistema meu. Logo ao executar o programa dá o seguinte erro: "no argument for format '%s' ". O erro dá numa linha de uma unit do componente, alinha é: S := ShortDateFormat; no seguinte trecho de codigo:


Acho o erro dificil de ser nesta linha ??? afinal ShortDateFormat é uma Variável do tipo string e vc pode atribuir o seu
conteudo a uma outra Variavel do mesmo tipo

È estranho vc testar

if Pos('MMM', S) > 0 then ?? é como se o mes tivesse tres digitos ??

Antes de excecutar esta função teste o valor de ShortDateFormat

showmessage(ShortDateFormat); // teste aqui
S := ShortDateFormat;
if Pos('yyyy', S) = 0 then
Insert('yy', S, Pos('yy', S));
if Pos('MMM', S) > 0 then
Delete(S, Pos('MMM', S), 1);
Result := FormatDateTime(S, Value);

e qual a lógica desta função ???

[]sds

Responder

Gostei + 0

03/11/2012

Rodrigo Barra

Realmente o erro não deve ser neste trecho mesmo não. E este trecho não tem logica tb.
Só sei q quando tento compilar dá o erro: NO ARGUMENTE FOR FORMAT '%s'
E tudo q tem haver com data no componente dá este erro, não sei porque.
Responder

Gostei + 0

03/11/2012

Gilvanio Gonçalves

Amigos o que o colega esta usando é um source codigo do ONGUARD.INC (guardian) OGUTIL.PAS 1.13

dentro deste source tem varios exemplos de rotinas, e esta que ele esta tentado utilizar é um função
que retorna data como string no valor do ano em 4 digitos e 0 mês em 2 digitos, função de formatação utilizada
para para uso de exibição de datas sem ter que modificar o date no windows
é isto!. Mas ele não entendeu a rotina acredito eu, pois tem que levar em conta que pra ela funcionar corretamente,
existe varias declrarações de constantes. tipos,units, etc, neste source ao uso do componente,
o erro não tem nada haver com o windows ser 7, e sim se é 32 ou 64 bits , pois o source code é para win32.
no entanto teriamos que avaliar como foi instalado o componente, com ele esta usando a function etc.

vejam o link deste source code, e verão a rotina que ele postou
este este erro acontece muito quando o valor da variavel esta vazia,sem valor!.

link:[url]http://www.bvbcode.com/code/8n7akm20-1593359[/url]
Abs.
Responder

Gostei + 0

04/11/2012

Marco Salles

pois é eu não vi erro nenhum na rotina e nen entendi a lógica
deve ser isto então

[]sds
Responder

Gostei + 0

04/11/2012

Rodrigo Barra

O Gilvanio foi perfeito na sua colocação. È isto mesmo. Não sabia que este componente só funciona em versões 32 bits. (claro q modificando funciona em 64), mas como fazer funcioná-lo em 64 bits?
Estou fazendo uns exemplo que estão no manual,e como disse em todos exemplos que tem haver com DATA dá erro.
Eu inseri o componente OGDATECODE, após o implementation declarei a constante
const
CKey : TKey = ($19,$E8,$54,$A3,$A8,$BD,$7A,$31,$D6,$B5,$F7,$F9,$40,$08,$46,$20);

Esta chave foi gerada no "modo gráfico do componente", seguindo o tutorial de exemplo.
No evento GetKey do componente inseri:
GetKey

E por ultimo no evento OnChecked coloquei:
begin
case Status of
ogValidCode : ShowMessage('Código Inválido');
ogPastEndDate : ShowMessage('Data expirou');
ogInvalidCode : ShowMessage('Codigo invalido');
end;
if Status <> ogValidCode then
Application.Terminate;
end;

E ao compilar deu o erro descrito.
Responder

Gostei + 0

04/11/2012

Rodrigo Barra

O Gilvanio foi perfeito na sua colocação. È isto mesmo. Não sabia que este componente só funciona em versões 32 bits. (claro q modificando funciona em 64), mas como fazer funcioná-lo em 64 bits?
Estou fazendo uns exemplo que estão no manual,e como disse em todos exemplos que tem haver com DATA dá erro.
Eu inseri o componente OGDATECODE, após o implementation declarei a constante
const
CKey : TKey = ($19,$E8,$54,$A3,$A8,$BD,$7A,$31,$D6,$B5,$F7,$F9,$40,$08,$46,$20);

Esta chave foi gerada no "modo gráfico do componente", seguindo o tutorial de exemplo.
No evento GetKey do componente inseri:
Key := CKey;

E por ultimo no evento OnChecked coloquei:
begin
case Status of
ogValidCode : ShowMessage('Código Inválido');
ogPastEndDate : ShowMessage('Data expirou');
ogInvalidCode : ShowMessage('Codigo invalido');
end;
if Status <> ogValidCode then
Application.Terminate;
end;

E ao compilar deu o erro descrito.
Responder

Gostei + 0

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

Aceitar