www.pudn.com > COMPO-TCYCOLORMATRIX-ENFIN-SORT.zip > Unit1.pas


unit Unit1; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs, cyColorMatrix, ExtCtrls, StdCtrls, Buttons; 
 
type 
  TForm1 = class(TForm) 
    LblTickCount: TLabel; 
    cyColorMatrix1: TcyColorMatrix; 
    LblMoyenne: TLabel; 
    Label1: TLabel; 
    Label2: TLabel; 
    BtnClose: TBitBtn; 
    CBPause: TCheckBox; 
    SBChangeColor: TSpeedButton; 
    CBFullRepaint: TCheckBox; 
    procedure FormCreate(Sender: TObject); 
    procedure FormActivate(Sender: TObject); 
    procedure BtnCloseClick(Sender: TObject); 
    procedure CBPauseClick(Sender: TObject); 
    procedure SBChangeColorClick(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.dfm} 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  Randomize; 
// Try to activate this    DoubleBuffered := true; 
end; 
 
procedure TForm1.FormActivate(Sender: TObject); 
var 
  Depart, Temps, Occurences, TotMill: Cardinal; 
  c, r: integer; 
  Niveau: integer; 
  Couleur, Actuelle: TColor; 
begin 
  Occurences := 0; 
  TotMill := 0; 
 
  while (not CBPause.Checked) and (not Application.Terminated) do 
  begin 
    Depart := GetTickCount; 
 
    for c := 0 to cyColorMatrix1.BoxCols -1 do 
    begin 
      Niveau := Random(cyColorMatrix1.BoxRows-1); 
 
      for r := 0 to cyColorMatrix1.BoxRows-1 do 
      begin 
        if r < Niveau 
        then 
          Couleur := clBlack + 100 
        else 
          Case r of 
            0..20: Couleur  := clRed; 
            21..40: Couleur := clYellow; 
            41..99: Couleur := clLime; 
            100..200: Couleur := $0000DF00; // verde 
          end; 
 
        Actuelle := cyColorMatrix1.GetColorGrid(r, c); 
 
        if Actuelle <> Couleur 
        then cyColorMatrix1.SetColorGrid(r, c, Couleur, false); 
      end; 
    end; 
 
    inc(Occurences, 1); 
    Temps := GetTickCount - Depart;          
    inc(TotMill, Temps); 
 
    LblTickCount.Caption := IntToStr(Temps); 
    LblMoyenne.Caption := IntToStr(TotMill div Occurences); 
    Application.ProcessMessages; 
  end; 
end; 
 
procedure TForm1.CBPauseClick(Sender: TObject); 
begin 
  if not CBPause.Checked 
  then FormActivate(nil); 
 
  SBChangeColor.Enabled := CBPause.Checked; 
end; 
 
procedure TForm1.SBChangeColorClick(Sender: TObject); 
var i: Integer; 
begin 
  // Execute 100 times to compare speed : 
  for i := 0 to 99 do 
  begin                   
    cyColorMatrix1.SubstColor(clWhite, $0000DF00, CBFullRepaint.Checked); 
    cyColorMatrix1.SubstColor($0000DF00, clWhite, CBFullRepaint.Checked); 
  end; 
end; 
 
procedure TForm1.BtnCloseClick(Sender: TObject); 
begin 
  Close; 
end; 
 
end.