Ao adicionar compatibilidade com Delphi 5 a um exemplo VCL antigo, o projeto falhou em uma linha que é perfeitamente normal em versões mais novas do Delphi. O código tentou atribuir um padrão de data personalizado diretamente à propriedade TDateTimePicker.Format.
|
1 |
DateTimePicker.Format := 'MM/dd/yyyy'; |
TDateTimePicker é um wrapper VCL em torno do controle comum do Windows. Versões mais novas do Delphi expõem uma propriedade conveniente Format, mas o Delphi 5 não. No Delphi 5 e anteriores, o controle normalmente segue as configurações regionais de data do Windows, a menos que a mensagem do controle comum subjacente seja enviada diretamente.
Use a API do controle comum no Delphi 5
A correção de compatibilidade é chamar DateTime_SetFormat da unit CommCtrl para Delphi 5, mantendo a atribuição direta da propriedade para compiladores mais novos. Adicione CommCtrl à cláusula uses ao compilar o branch Delphi 5.
|
1 2 3 4 5 |
{$IFDEF D5} DateTime_SetFormat(DateTimePicker.Handle, PChar('MM/dd/yyyy')); {$ELSE} DateTimePicker.Format := 'MM/dd/yyyy'; {$ENDIF} |
Notas práticas
A string de formato usa a sintaxe do date-time picker do Windows, não todos os tokens de formatação do Delphi. Mantenha o padrão simples e teste em uma máquina com configurações regionais diferentes se a aplicação será implantada internacionalmente.
Se você mantém código de exemplo compartilhado entre Delphi 5, Delphi 6 e versões modernas do Delphi, isole esse branch atrás de um símbolo do compilador como D5. Isso mantém o código moderno legível e ainda documenta o workaround antigo do controle comum.
Checklist de compatibilidade
- Adicione
CommCtrlapenas onde o branch Delphi 5 precisa deDateTime_SetFormat. - Passe o handle do picker, não o handle do form.
- Mantenha a string de formato viva durante a chamada passando um literal de string normal ou uma variável estável.
- Verifique a data exibida na localidade Windows de destino.
Por que ShortDateFormat não basta
Alterar as variáveis globais de formato de data do Delphi não muda de forma confiável um date-time picker apoiado no controle comum do Windows. O picker renderiza de acordo com as configurações do controle e as mensagens que recebe. Por isso DateTime_SetFormat é a camada de compatibilidade correta para Delphi 5.
Essa distinção importa em projetos de exemplo antigos porque eles frequentemente são compilados em várias versões do Delphi. Uma linha limpa no Delphi 7 ou Delphi 2009 pode não existir no Delphi 5, enquanto uma mensagem do controle comum do Windows ainda pode estar disponível. A compilação condicional permite que cada compilador use o caminho mais natural.
Testando compatibilidade com versões antigas
Depois de aplicar o workaround, teste tanto o valor exibido quanto o valor salvo. O formato afeta o que o usuário vê; ele não deve alterar o valor TDateTime subjacente usado por cálculos. Essa separação é importante em pedidos de compra, faturas e exportações para planilhas, onde a formatação exibida e os valores numéricos de data devem permanecer consistentes.
Verifique também o form depois de recriar o handle da janela. Alguns controles VCL podem perder estado nativo se o handle for destruído e criado novamente. Se sua aplicação altera estilos ou parents em runtime, aplique o formato depois que o handle estiver disponível.
Nota de manutenção de longo prazo
Quando um projeto não precisar mais de suporte ao Delphi 5, remova o branch condicional e mantenha a atribuição direta da propriedade Format. Até lá, mantenha o código de compatibilidade perto da configuração do controle, em vez de escondê-lo em lógica de negócio sem relação. Isso deixa claro que o workaround existe por uma limitação do controle VCL, não pelo cálculo do pedido de compra.