Dicionário Delphi e dados de pedidos

Meu código é:

procedure TfrmSettings.btnFillDictClick(Sender: TObject);
var
  Dict: TDictionary<string, string>;
  Item: TPair<string, string>;
begin
  Dict := TDictionary<string, string>.Create();

  Dict.Add('Key1', 'Text1');
  Dict.Add('Key2', 'Text2');
  Dict.Add('Key3', 'Text3');
  Dict.Add('Key4', 'Text4');

  for Item in Dict do
  begin
    ShowMessage(Item.Key + ' ' + Item.Value);
  end;    
end;

Por que quase toda vez que recebo um valor diferente no Showmessage?
Por que os valores não são armazenados na ordem em que foram adicionados?

Eu sou um noob em Delphi e não sei como o Dictionary está funcionando. E não encontrei nenhuma informação sobre isso no Google. Poderia me explicar por que é assim?
Existe alguma maneira de usar o Dictionary sem usar TList <> para classificar dados?

obrigado

questionAnswers(1)

yourAnswerToTheQuestion