Multiple lines on a Showmessage in Delphi

Asked

Viewed 810 times

1

I need to trigger an error message if the user tries to enter invalid codes in a temporary table on grid. The codes come from a .txt. The codes fired on the monitor are ok but the message is repeated n times as there are n incorrect codes. I would like a single message to be fired with the incorrect code list. How to do this? Thank you.

// procedure para leitura do texto 
var
    myFile : TextFile;
begin
    AssignFile(myFile, arquivoTxt);

    Reset(myFile);

    while not Eof(myFile) do
    begin
        ReadLn(myFile, text);
        InsereTexto;
    end;
    CloseFile(myFile);
end;

// procedure para inserir dados do txt no banco 
begin
    if not qrSELCSPCliente.Locate('CSC_CAP_NroCartao', StrToInt(text), []) then
    begin
        {INSERE DADOS NO BANCO do txt} 
    else
    begin
        MsgAviso('Número já cadastrado!' + text);
    end;
end;

3 answers

3

Complementing @Ricardo’s response, you have several ways to include a new line in a string. See below for several commented examples:

procedure TForm1.Button1Click(Sender: TObject);
var
    Msg: string;
begin
    Msg := '';

    Msg := Msg + 'Linha 01'#13;                      // (1)  Comum de se encontrar em códigos Delphi
    Msg := Msg + 'Linha 02'#10;                      // (2)  Padrão Posix (Linux, OSX, Android, iOS, etc.)
    Msg := Msg + 'Linha 03'#13#10;                   // (3)  Padrão Windows
    Msg := Msg + 'Linha 04' + sLineBreak;            // (4)  Multiplataforma
    Msg := Msg + 'Linha 05' + chr(13);               // (5)  Mesmo que (1)
    Msg := Msg + 'Linha 06' + chr(10);               // (6)  Mesmo que (2)
    Msg := Msg + 'Linha 07' + chr(13) + chr(10);     // (7)  Mesmo que (3)
    Msg := Msg + 'Linha 08' + ^M;                    // (8)  Mesmo que (1)
    Msg := Msg + 'Linha 09' + ^J;                    // (9)  Mesmo que (2)
    Msg := Msg + 'Linha 10' + ^M^J;                  // (10) Mesmo que (3)
    Msg := Msg + AdjustLineBreaks('Linha 11'#10);    // (11) Mesmo que (1), mas ajusta para a plataforma usada
    Msg := Msg + AdjustLineBreaks('Linha 12'#13);    // (12) Mesmo que (2), mas ajusta para a plataforma usada
    Msg := Msg + AdjustLineBreaks('Linha 13'#13#10); // (13) Mesmo que (3), mas ajusta para a plataforma usada
    Msg := Msg + 'Linha 14';

    ShowMessage(Msg);
end;

I use to sLineBreak as it is cross-platform and can avoid future problems if you reuse a code on multiple platforms. But if not your case, use what you think best.

1


Simple! Add the character #13 (enter) at the end of each line. But first, create a temporary variable to accumulate messages, and display them at once at the end of the process

//procedure1 para leitura do texto 
var
    myFile : TextFile;
    mensagens:String;
begin
    mensagens:='Números já cadastrado!';//Inicializa a variável
    ...
    if not qrSELCSPCliente.Locate('CSC_CAP_NroCartao', StrToInt(text), []) then
    begin
    {INSERE DADOS NO BANCO do txt}
    end 
    else 
        mensagens:=mensagens+#13+ text);
    //veja que aqui ja terminou todo while
    if mensagens <>'' then
        MsgAviso(mensagens);
end;
  • Ricardo, thank you so much! Elegant and functional solution. I declared "messages" as a global variable and after CloseFile(myFile); of the text reading process I reset the variable "messages".

1

To complete the other answers with a slightly simpler process!

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage('Linha 01'+#13+
              'Linha 02'+#13+
              'Linha 03'+#13+
              'Linha 04'+#13+
              'Linha 05'+#13+
              'Linha 06'+#13+
              'Linha 07'+#13+
              'Linha 08'+#13+
              'Linha 09'+#13+
              'Linha 10'+#13+
              'Linha 11'+#13+
              'Linha 12'+#13+
              'Linha 13'+#13+
              'Linha 14)';
end;

If you use +#13#13+ he jumps two Lines.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.