Ver Mensaje Individual
  #10  
Antiguo 23-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El código puede escribirse de muchas formas pero lo que lo retrasa el la línea Memo1.Lines.Add(
Código Delphi [-]
// Similar al de roman con multiplicación binaria
var
  i :Integer;
begin
  Memo1.Text:='Numeros impares';

 for i := 0 to 499 do
   Memo1.Lines.Add(IntToStr((i shl 1) + 1));
end;

Código Delphi [-]
var
  i: integer;
begin
  i:= 1;
  Memo1.Text:='Numeros impares';
  repeat
    Memo1.Lines.Add(IntToStr(i));
    inc(i,2);
  until i > 999;
end;

Si hacemos que el memo se escriba por mensajes, cualquiera de las formas se ejecuta en menos de 10 milisegundos:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  i:= 1;
  Memo1.Text:='Numeros impares';
  repeat
    //Memo1.Lines.Add(IntToStr(i));
    PostMessage(Handle, WM_USER, i, 0);
    inc(i,2);
  until i > 999;
end;

procedure TForm1.OnMsg(var Msg: TMessage);
begin
  Memo1.Lines.Add(IntToStr(Msg.WParam));
end;

Los bucles terminarán en escasos milisegundos aunque el Memo tardará en llenarse de forma ordenada lo que tarde Windows en tramitar la cola de mensajes.


Saludos.
Responder Con Cita