Array
(
)

Duvida - Explicação

Ricieri
   - 21 mar 2006

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:

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

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

O que significa:
0, PAnsiChar

Grato,
Ricieri.


Rjun
   - 21 mar 2006


Citação:

Porque eu não poderia colocar assim:

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.


Citação:

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:

Foram selecionados 10 registros.

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:

#Código


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



Citação:

O que significa:
0, PAnsiChar


O 0 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.


Thiago Vidal
   - 22 mar 2006

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

#Código

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.


Adriano Santos
   - 22 mar 2006


Citação:

#Código

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:

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



Martins
   - 22 mar 2006


Citação:

Citação:

#Código

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:

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


Talvez ele queria colocar assim...
#Código

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.


Citação:

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


:wink:


Thiago Vidal
   - 23 mar 2006

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

o correto é:

#Código

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