Variável global de “aplicativo” não reconhecida
Pergunta
Trabalho em um grande projeto em Delphi 5. Hoje, depois de mesclar dois ramos do aplicativo, uma das centenas de unidades, UnitMain (a unidade do formulário principal, você imaginaria) parou de reconhecer o aplicativo global.
Esse é um problema bastante bizarro - eu poderia fazer com que o programa seja compilado definindo a aplicação: Tapplication em Unitmain e definindo isso para o aplicativo do nosso arquivo .dpr, mas isso leva a uma violação de acesso, que não é muito um de um Surpreenda com a aplicação sendo a coisa especial que é.
Espero que alguém tenha enfrentado o mesmo problema antes, ou saiba o suficiente dos trabalhos internos da Delphi VCL para me ajudar aqui.
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ComCtrls, StdCtrls, cxButtons, ExtCtrls, IniFiles, ShellAPI,
LMDControl, LMDBaseControl, LMDBaseGraphicControl, LMDGraphicControl,
LMDScrollText, cxControls, cxContainer, cxListBox, Psock, NMFtp, db, DBTables,
FileCtrl, Configs, cxHint, DSetFunc, OleCtrls, DsInformation,
InterAppComm, ActnList, ADODB, OleServer, CRAXDRT_TLB;
O erro exato é que o compilador não reconhece o aplicativo nesta unidade. Por exemplo, para um aplicativo.processmessages; Chamada, o erro é "Objeto ou tipo de classe necessário". Nenhuma das outras unidades tem esse problema.
Solução
Eu acho que é mais provável que você tenha dois símbolos chamados "Aplicação" no escopo, e o da unidade de formulários não é o ativo. Verifique se a unidade de formulários na lista de usos ocorre após qualquer unidade anterior que contenha um símbolo chamado Aplicativo.
Mas você precisa fornecer mais informações. As mensagens de erro exatas, etc.
Outras dicas
Fico feliz em ver tudo funcionando agora, mas acrescentarei que outra maneira de resolver esses problemas, especialmente se você não quiser reorganizar seus usos, é prefixar o nome da unidade para o que você quiser usar, por exemplo.
Forms.Application.ProcessMessages;
Quais unidades estão na cláusula de uso na parte superior do arquivo? O aplicativo vem da unidade "Formulários".
por exemplo.
unit MyUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;