Diccionario Delphi y datos de pedido

Mi código es:

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 qué casi cada vez obtengo un valor diferente en Showmessage?
¿Por qué los valores no se almacenan en el orden en que se agregaron?

Soy un novato en Delphi y no sé cómo funciona Dictionary. Y no encontré ninguna información sobre esto en Google. ¿Podría explicarme por qué es así?
¿Hay alguna forma de usar Dictionary sin usar TList <> para ordenar datos?

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta