21/03/2006

Duvida - Explicação

Pessoal, tenho uma duvida sobre o fonte abaixo:

Msg := ´Deseja Calcular a Porcentagem Automaticamente?´;
Msg := Format(Msg, [vlcompra]);
if messagebox(0, PAnsiChar(Msg),´Pergunta´,mb_yesno+mb_iconquestion)= 6 then

Eu rodei e está beleza, mas não consegui entender:

[b:5560b42ab6]Porque eu não poderia colocar assim:[/b:5560b42ab6]
if messagebox(´Deseja Calcular a Porcentagem Automaticamente?´),´Pergunta´,mb_yesno+mb_iconquestion)= 6 then

[b:5560b42ab6]Nesta linha abaixo, o ´vlcompra´ é uma variavel, pq tem que ter ela para funcionar?[/b:5560b42ab6]
Msg := Format(Msg, [vlcompra]);

[b:5560b42ab6]O que significa:[/b:5560b42ab6]
0, PAnsiChar

Grato,
Ricieri.


Ricieri

Respostas

21/03/2006

Rjun

[b:b9b8ab9cf2]Porque eu não poderia colocar assim:[/b:b9b8ab9cf2] if messagebox(´Deseja Calcular a Porcentagem Automaticamente?´),´Pergunta´,mb_yesno+mb_iconquestion)= 6 then


O desenvolvedor está usando uma função da API do Windows e não o MessageBox da VCL do Delphi. Acho que a única diferença é que os botões serão exibidos no idioma do Windows, equanto o MessageBox do Delphi será em Inglês.

Nesta linha abaixo, o ´vlcompra´ é uma variavel, pq tem que ter ela para funcionar? Msg := Format(Msg, [vlcompra]);


Bom, aqui deve estar faltando algo. O FORMAT serviria para substituir um argumento dentro da string. Por exemplo, se você quiser exibir a seguinte mensagem para o usuario:

[b:b9b8ab9cf2] Foram selecionados 10 registros.[/b:b9b8ab9cf2]

Digamos que o 10 não seja um número fixo. Ele pode variar de acordo com o processamento. Em vez de enfiar um IntToStr(Valor) dentro da string, podemos fazer da seguinte maneira:

ShowMessage(Format(´Foram selecionados ¬d registros.´, [valor&93;));


O que significa: 0, PAnsiChar


O [b:b9b8ab9cf2]0[/b:b9b8ab9cf2] significa o Handle da janela em que a MessageBox será exibida. Se eu estiver errado, por favor, me corrijam. E PAnsiChar server para converter a string em um ponteiro de array de caracteres, que é o tipo do argumento a ser informado.


Responder Citar

22/03/2006

Thiago Vidal

na verdade, para funcionar, citando o seu próprio exemplo, faltou apenas informar o Handle:

if MessageBox(0, ´Deseja Calcular a Porcentagem Automaticamente?´),´Pergunta´, MB_YESNO+MB_ICONQUESTION)= MB_YES then 


ou, para pegar o handle da aplicação, vc pode usar direto Application.MessageBox.

PAnsiChar, na verdade, retorna um ponteiro para o 1o caractere de uma string, que é assim que os aplicativos passam strings para as APIs do windows, que também pode ser referenciado, para uma string chamada s, por exemplo, como @s[1].

espero ter ajudado.


Responder Citar

22/03/2006

Adriano Santos

if MessageBox(0, ´Deseja Calcular a Porcentagem Automaticamente?´),´Pergunta´, MB_YESNO+MB_ICONQUESTION)= MB_YES then 


Tem um parentese a mais depois do apostrofe e da interrogação:

if MessageBox(0, ´Deseja Calcular a Porcentagem Automaticamente?´,´Pergunta´, MB_YESNO+MB_ICONQUESTION)= MB_YES then 



Responder Citar

22/03/2006

Martins

[quote]
if MessageBox(0, ´Deseja Calcular a Porcentagem Automaticamente?´),´Pergunta´, MB_YESNO+MB_ICONQUESTION)= MB_YES then 


Tem um parentese a mais depois do apostrofe e da interrogação:

if MessageBox(0, ´Deseja Calcular a Porcentagem Automaticamente?´,´Pergunta´, MB_YESNO+MB_ICONQUESTION)= MB_YES then 
[/quote:08fcb8062f]

Talvez ele queria colocar assim...
if MessageBox(0, Pchar(´Deseja Calcular a Porcentagem Automaticamente?´), ´Pergunta´, MB_YESNO+MB_ICONQUESTION)= MB_YES then 


ou foi esquecimento na hora de alterar o código.

Msg := ´Deseja Calcular a Porcentagem Automaticamente?´; Msg := Format(Msg, [vlcompra]); if messagebox(0, PAnsiChar(Msg),´Pergunta´,mb_yesno+mb_iconquestion)= 6 then


:wink:


Responder Citar

23/03/2006

Thiago Vidal

realmente, o parenteses foi a mais, desculpem...

o correto é:

if MessageBox(0, ´Deseja Calcular a Porcentagem Automaticamente?´, ´Pergunta´, MB_YESNO+MB_ICONQUESTION)= MB_YES then 



Responder Citar