Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.25;
Скачать: CL | DM;

Вниз

matrix   Найти похожие ветки 

 
Нуб   (2007-03-05 11:10) [0]

как можно этот код упростить чтобы самому не писать else if then begin - в лом как-то и не красиво может с помощью case ? код ниже

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);

 private
   { Private declarations }
   procedure OnTimer (Sender: TObject);
 public
   { Public declarations }

 end;

var
 Form1: TForm1;
   i : integer = 0;
   t: TTimer;
   l: array of TLabel;
   e: TEdit;
   kol : Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   i := i + 1;
   t := TTimer.Create(Application);
   t.Interval := 10;
   t.OnTimer := OnTimer;
   SetLength(l,1000);
   for kol :=1 to 480 do begin
       l[kol] := TLabel.Create(Application);
       l[kol].Parent := Form1;
       l[kol].Visible := true;
       l[kol].Caption := IntToStr(i);
       if kol <= 40 then begin
           l[kol].Left := kol*20;
           l[kol].Top := 1;
       end
       else if kol <= 80 then begin
           l[kol].Left := (kol-40)*20;
           l[kol].Top := 20;
       end
       else if kol <= 120 then begin
           l[kol].Left := (kol-80)*20;
           l[kol].Top := 40;
       end
       else if kol <= 160 then begin
           l[kol].Left := (kol-120)*20;
           l[kol].Top := 60;
       end
       else if kol <= 200 then begin
           l[kol].Left := (kol-160)*20;
           l[kol].Top := 80;
       end
       else if kol <= 240 then begin
           l[kol].Left := (kol-200)*20;
           l[kol].Top := 100;
       end
       else if kol <= 280 then begin
           l[kol].Left := (kol-240)*20;
           l[kol].Top := 120;
       end
       else if kol <= 320 then begin
           l[kol].Left := (kol-280)*20;
           l[kol].Top := 140;
       end
       else if kol <= 360 then begin
           l[kol].Left := (kol-320)*20;
           l[kol].Top := 160;
       end
       else if kol <= 400 then begin
           l[kol].Left := (kol-360)*20;
           l[kol].Top := 180;
       end
       else if kol <= 440 then begin
           l[kol].Left := (kol-400)*20;
           l[kol].Top := 200;
       end
       else begin
           l[kol].Left := (kol-440)*20;
           l[kol].Top := 220;
       end;
   end;
end;

procedure TForm1.OnTimer (Sender: TObject);
begin
   t.Interval := 10;
   i := i + 1;
   for kol :=1 to 480 do begin
       l[kol].Caption := IntToStr(i);
   end
end;

end.



 
Desdechado ©   (2007-03-05 11:18) [1]

Судя по всему, вычисления могут быть представлены в виде формулы от переменной kol. Тогда ветвления излишни.


 
MBo ©   (2007-03-05 11:19) [2]

два вложенных цикла, первый до 12, второй до 40

А вообще на каких маньяков рассчитана  программа с полутысячей надписей?


 
Нуб   (2007-03-05 11:25) [3]

Сенкс за инфу, прогу пишу для себя, на работе нефиг делать вот и решил что-то написать


 
ЮЮ ©   (2007-03-05 11:25) [4]

Для вывода данныз в "сетке" используются TStringGrid или TDrawGrid (а не 1000 TLabel). Тогда и таймером извращения не потребуются


 
Нуб   (2007-03-05 11:31) [5]

грид не хочу юзать, сенкс за инфу


 
novill ©   (2007-03-05 11:57) [6]

> [0] Нуб   (05.03.07 11:10)

такие извращения делаются двумя строчками :)

Процедура может выглядеть так:

procedure TForm1.FormCreate(Sender: TObject);
begin
  i := i + 1;
  t := TTimer.Create(Application);
  t.Interval := 10;
  t.OnTimer := OnTimer;
  SetLength(l,1000);
  for kol :=1 to 480 do begin
      l[kol] := TLabel.Create(Application);
      l[kol].Parent := Form1;
      l[kol].Visible := true;
      l[kol].Caption := IntToStr(i);
      l[kol].Left:=((kol-1) mod 40)*20;
     l[kol].Top:=((kol-1) div 40)*20;

  end;
end;


 
Нуб   (2007-03-05 12:19) [7]

:) красиво !!!, но для меня это еще рано, я новичок строк побольше написал намного :) вообщем кто хочет увидеть матрицу и проверить свой проц на способность может следующий код заюзать , у меня тачка потуплевать начала после запуска следующего кода

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls;

type
 Tmatrix = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormShow(Sender: TObject);
   procedure Button1Click(Sender: TObject);

 private
   { Private declarations }
   procedure OnTimer (Sender: TObject);
 public
   { Public declarations }

 end;

var
 matrix: Tmatrix;
   i : integer = 0;
   sorok: integer = 0;
   t: TTimer;
   l: array [1..2400] of TLabel;
   e: TEdit;

implementation

{$R *.dfm}

procedure Tmatrix.FormCreate(Sender: TObject);
var k: integer;
   kol: integer;

begin

   t := TTimer.Create(Application);
   t.Interval := 30;
   t.OnTimer := OnTimer;

      for kol:=1 to 2400 do begin
       l[kol] := TLabel.Create(Application);
       l[kol].Parent := matrix;
       l[kol].Visible := true;
       l[kol].Caption := IntToStr(i);
      end;

       for k:=1 to 40 do begin
           for kol:=1 to 60 do begin
               l[kol+sorok].Left := kol*20;
               l[kol+sorok].Top := 20*(k-1);
           end;
           sorok := sorok + 60;
       end;
end;

procedure Tmatrix.OnTimer (Sender: TObject);
var kol: integer;
begin
   i := i + 1;

   for kol :=1 to 2400 do
       l[kol].Caption := IntToStr(i);

end;

procedure Tmatrix.FormShow(Sender: TObject);
begin
   matrix.WindowState := wsMaximized;
end;

procedure Tmatrix.Button1Click(Sender: TObject);
var kol: integer;
begin
       for kol :=1 to 2400 do
       l[kol].free;
end;

end.

комп тупит нереально ;)


 
Сергей М. ©   (2007-03-05 12:32) [8]

Для начала избавь свой алгоритм от совершенно лишних и бестолковых вычислений:

procedure Tmatrix.OnTimer (Sender: TObject);
var kol: integer; s: string;
begin
  i := i + 1;
  s := IntToStr(i);
  for kol :=1 to 2400 do
      l[kol].Caption := s;
end;


 
Нуб   (2007-03-05 12:39) [9]

избавил :), тупит так же как и прежде , no effect


 
Сергей М. ©   (2007-03-05 12:43) [10]

Что есть "тупит" ?

"Тупит" обычно голова)


 
Нуб   (2007-03-05 12:47) [11]

скорость появления новых циферок на экране существенно ниже, чем при количестве TLabelов  в 2 раза меньшем, то есть 1200 :), и голова у меня сегодня тоже "тупит" днюха вчера была =)


 
Сергей М. ©   (2007-03-05 13:00) [12]

А зачем тебе "большая скорость" ?


 
Нуб   (2007-03-05 14:21) [13]

люблю скорость :)


 
Сергей М. ©   (2007-03-05 14:25) [14]

Лучше бы ты "любил" один любой списочный контрол вместо сотен лейблов.


 
novill ©   (2007-03-05 16:44) [15]

> [13] Нуб   (05.03.07 14:21)
> люблю скорость :)


Любишь скорость - слезай с черепахи ;-)

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
Tmatrix = class(TForm)
  procedure FormCreate(Sender: TObject);
  procedure FormShow(Sender: TObject);

private
  { Private declarations }
  procedure OnTimer (Sender: TObject);
public
  { Public declarations }

end;

var
matrix: Tmatrix;
  i : integer = 0;
  sorok: integer = 0;
  t: TTimer;

implementation

{$R *.dfm}

procedure Tmatrix.FormCreate(Sender: TObject);
begin
  t := TTimer.Create(Application);
  t.Interval := 30;
  t.OnTimer := OnTimer;
end;

procedure Tmatrix.OnTimer (Sender: TObject);
var k: integer;
  kol: integer;
begin
  i := i + 1;
      for k:=1 to 40 do begin
          for kol:=1 to 60 do
              Self.Canvas.TextOut(kol*20,20*(k-1),IntToStr(i));
          sorok := sorok + 60;
      end;
end;

procedure Tmatrix.FormShow(Sender: TObject);
begin
  matrix.WindowState := wsMaximized;
end;

end.


 
Нуб   (2007-03-05 16:53) [16]


> novill ©


:) красота все летает , сенкс за потраченное время на меня



Страницы: 1 вся ветка

Текущий архив: 2007.03.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.044 c
1-1169895678
Garacio
2007-01-27 14:01
2007.03.25
Запустить программу в режиме совместимости с ...


2-1172812629
Atanas
2007-03-02 08:17
2007.03.25
Закрытие формы


15-1172460416
Slider007
2007-02-26 06:26
2007.03.25
С днем рождения ! 25 февраля


15-1172903795
atruhin
2007-03-03 09:36
2007.03.25
Можно ли лицензировать пиратский Windows 2003 Server


2-1172907175
Astronom
2007-03-03 10:32
2007.03.25
Дата создания файла