Personalizar MessageBox

Delphi

28/08/2024

Pessoal, tenho um laço FOR onde calculo parcelas e ao final da inclusão das parcelas, disparo uma mensagem que contém o numero da parcela, o vencimento e o valor.
Ocorre que se eu lançar muitas parcelas, a mensagem fica enorme.
Pensei em delimitar a mensagem para listar até 3 parcelas e após a 3ª parcela, escrever : "e mais xxx parcelas" ou listar as 3 primeiras, colocar uns pontos e listar a ultima.
Será que é possível fazer?

ex:
1ª parcela - 30/08/2024 - R$ 250,00
1ª parcela - 30/09/2024 - R$ 250,00
1ª parcela - 30/10/2024 - R$ 250,00
.
.
18ª parcela - 30/08/2025 - R$ 250,00


  Mensagem:= 'Inclusão de conta realizada com sucesso!'+#13;

  for i := 1 to StrToInt(EdParcelas.Text) do
  begin
    if i = StrToInt(EdParcelas.Text) then
    begin
      //rotina de parcelamento
    end

  Mensagem := Mensagem +#13+IntToStr(i)+'ª Parcela - '+FormatDateTime('dd/mm/yyyy',VencParcela)+' - '+FormatFloat('R$ #,##0.00',ValorParcela);
  Application.MessageBox(Pchar(Mensagem),'Sis Contas',MB_OK + MB_ICONINFORMATION);
Renan

Renan

Curtidas 0

Respostas

Arthur Heinrich

Arthur Heinrich

28/08/2024

Mensagem:= 'Inclusão de conta realizada com sucesso!'+#13;
 
for i := 1 to StrToInt(EdParcelas.Text) do
  begin
    //rotina de parcelamento - cálculo da parcela i

    if ( ( StrToInt(EdParcelas.Text) <= 5 ) or
         ( i <= 3 ) or
         ( i = StrToInt(EdParcelas.Text) ) ) then
      Mensagem := Mensagem +#13+IntToStr(i)+'ª Parcela - '+FormatDateTime('dd/mm/yyyy',VencParcela)+' - '+FormatFloat('R$ #,##0.00',ValorParcela)
    else
      if ( i = 4 ) then
        Mensagem := Mensagem +#13+'...';
  end;
Application.MessageBox(Pchar(Mensagem),'Sis Contas',MB_OK + MB_ICONINFORMATION);

GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/08/2024

sugiro apresentar as parcelas numa grade. uma control grid daria um resultado muito bom
GOSTEI 0
Renan

Renan

28/08/2024

Obrigado pelas respostas pessoal.

Acho que vou tirar essa opção das parcelas e apresentar apenas um resumo da operação

Mensagem:= 'Inclusão de conta realizada com sucesso!'+#13+#13+
             'Fornecedor  : '+EdCedente.Text +#13+
             'Nº Parcelas : '+EdParcelas.Text +#13+
             'Valor Total : '+FormatFloat('R$ #,##0.00',Total);

  Application.MessageBox(Pchar(Mensagem),'Sis Contas',MB_OK + MB_ICONINFORMATION);


Não sei porque, mas não consigo deixar o texto alinhado na mensagem, da mesma forma que está acima.
GOSTEI 0
Arthur Heinrich

Arthur Heinrich

28/08/2024

O MessageBox exibe a mensagem utilizando um fonte de espaçamento variável, impedindo o alinhamento.

Parece que dá para criar um hook (Uma callback function) que é chamada ao criar a janela. Neste momento, dá para setar o fonte do MessageBox. Mas é uma solução complexa.

Mais fácil criar a sua própria janela de mensagens.
GOSTEI 0
POSTAR