Fórum Diretivas de Compilação... #309258
16/01/2006
0
existe alguma diretiva que eu possa colocar no arquivo, que impossibilite do compilador compila-la caso o form nao esteja no projeto?
desde já agradeço.
[]s
Titanius
Curtir tópico
+ 0Posts
16/01/2006
Adriano Santos
1) Project >> Options do seu projeto.
2) Directories/Conditionals
3) No campo Conditional Defines vc coloca suas diretivas separadas por pont e virgula.
No código fonte vc vai testar se a diretiva existe:
{$IFDEF MINHA_DIRETIVA}
uses Unit2;
{$ENDIF}
E pra demonstrar o uso disso no evento onClick de um botão qualquer experimente isso?
procedure TForm1.Button1Click(Sender: TObject);
begin
{$IFDEF MINHA_DIRETIVA}
Form2 := TForm2.Create(Self);
try
Form2.ShowModal;
finally
FreeAndNil(Form2);
end;
{$ELSE}
ShowMessage(´Form2 não existe´);
{$ENDIF}
end;
Gostei + 0
16/01/2006
Michael
Vc pode usar a diretiva [b:21dc8801b2]$IFDEF[/b:21dc8801b2]:
{$IFDEF MEUPROJETO}
procedure A....
function B...
{$ELSE}
procedure C...
function D...
{$ENDIF}Depois, basta ir no menu [b:21dc8801b2]Project[/b:21dc8801b2]->[b:21dc8801b2]Options[/b:21dc8801b2], e na aba/nó [b:21dc8801b2]Directories[/b:21dc8801b2]/[b:21dc8801b2]Conditionals[/b:21dc8801b2], na caixa [b:21dc8801b2]Conditional defines[/b:21dc8801b2], digite ´MEUPROJETO´. Essa informação ficará salva com o arquivo de projeto da sua aplicação.
[]´s
Gostei + 0
16/01/2006
Michael
;-)
[]´s
Gostei + 0
16/01/2006
Dopi
[i:a7ec854685]if Assigned( VariavelSeuForm ) then ...[/i:a7ec854685]
Mas não é uma boa prática uma função usar o pre-suposto que uma determinada variavel já existe... Seria mais correto essas funções receberem a variavel do Form como parâmetro.
PS.: Se for usar o [i:a7ec854685]Assigned()[/i:a7ec854685], lembre-se de ´NILzar´ a variavel do Form depois de destrui-la:
Ex: [i:a7ec854685]FreeAndNil( VariavelSeuForm ) ; [/i:a7ec854685]
ou
[i:a7ec854685]VariavelSeuForm.Free ;
VariavelSeuForm := nil ; [/i:a7ec854685]
caso contrário o Assigned retornará True mesmo após vc efetuar o Free
Gostei + 0
16/01/2006
Adriano Santos
Esquenta não irmão estamos em casa. :lol:
Gostei + 0
17/01/2006
Titanius
Obrigado,
[]s
Gostei + 0
07/08/2007
Vitor Alcantara
Por exemplo eu tenho uma aplicação que roda em modo varejo e atacado com campos destintos na descrição do produto (Ex: Leite pó 12x400g e Lite pó 400g) então eu gostaria dependendo do tipo do ponto (Varejo ou Atacado) fosse feito uma coisa tipo:
{$IF atacado = 0 }
if PerguntaS(Screen.ActiveForm.Handle,´Confirma a alteração no kit do produto "´+kit.CxNome +´" pelo produto "´+DmDados.SpLocProdutoCxNome.Value +´" ?´) then
{$ELSE}
if PerguntaS(Screen.ActiveForm.Handle,´Confirma a alteração no kit do produto "´+kit.UnNome +´" pelo produto "´+DmDados.SpLocProdutoUnNome.Value +´" ?´) then
{$IFEND}Onde a ´diretiva´ atacado seria passado na hora da inicialização do programa que iria verificar no banco de dados um campo com o nome atacado (onde 0 indica atacado e 1 varejo).
Agradeço desde já
Atenciosamente Vitor Araújo Alcântara.
Gostei + 0
07/08/2007
Emerson Nascimento
Por exemplo eu tenho uma aplicação que roda em modo varejo e atacado com campos destintos na descrição do produto (Ex: Leite pó 12x400g e Lite pó 400g) então eu gostaria dependendo do tipo do ponto (Varejo ou Atacado) fosse feito uma coisa tipo:
{$IF atacado = 0 }
if PerguntaS(Screen.ActiveForm.Handle,´Confirma a alteração no kit do produto "´+kit.CxNome +´" pelo produto "´+DmDados.SpLocProdutoCxNome.Value +´" ?´) then
{$ELSE}
if PerguntaS(Screen.ActiveForm.Handle,´Confirma a alteração no kit do produto "´+kit.UnNome +´" pelo produto "´+DmDados.SpLocProdutoUnNome.Value +´" ?´) then
{$IFEND}Onde a ´diretiva´ atacado seria passado na hora da inicialização do programa que iria verificar no banco de dados um campo com o nome atacado (onde 0 indica atacado e 1 varejo).
Agradeço desde já
Atenciosamente Vitor Araújo Alcântara.[/quote:666a402d17]
talvez no seu caso seja melhor trabalhar com parâmetros de linha de comando. procure por ParamStr() e veja se atende ao que você precisa.
Gostei + 0
07/08/2007
Adriano Santos
{$IF atacado = 0 }
if PerguntaS(Screen.ActiveForm.Handle,´Confirma a alteração no kit do produto "´+kit.CxNome +´" pelo produto "´+DmDados.SpLocProdutoCxNome.Value +´" ?´) then
{$ELSE}
if PerguntaS(Screen.ActiveForm.Handle,´Confirma a alteração no kit do produto "´+kit.UnNome +´" pelo produto "´+DmDados.SpLocProdutoUnNome.Value +´" ?´) then
{$IFEND}talvez no seu caso seja melhor trabalhar com parâmetros de linha de comando. procure por ParamStr() e veja se atende ao que você precisa.[/quote:1f634202cf]
Também opto pela dica do [b:1f634202cf]emerson.en[/b:1f634202cf], porém é possível ´atribuir´ um valor a uma diretiva usando arquivos .inc se não me falha a memória. Alguém me corrija por favor?
Gostei + 0
07/08/2007
Vitor Alcantara
Vou dar uma estuadada melhor, sobre a utilização ou não de ´Diretivas´
Gostei + 0
07/08/2007
Massuda
Gostei + 0
07/08/2007
Vitor Alcantara
Gostei + 0
11/08/2008
Powerlog Tecnologia
Imaginem que eu tenho 3 projetos:
Tenho alguns forms que são em comum a todos os projetos, então a chamada deles fica fora dos ´IFDEFs´.
Porém alguns forms são compartilhados por dois projetos, A e B / A e C , etc.
Como eu resolvi hoje: dentro das diretivas, repliquei o código do create form.
Minha dúvida: existe alguma forma de colocar um ´OR´ de diretiva?
Ex:
Isso existe ou estou falando besteira ???!
Valeu
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)