![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
matrix
Нуб © (2007-03-05 11:10:00)как можно этот код упростить чтобы самому не писать 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.
Нуб (2007-03-05 16:53:00) [1]
> novill ©
:) красота все летает , сенкс за потраченное время на меня
novill (2007-03-05 16:44:00) [2]> [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 14:25:00) [3]Лучше бы ты "любил" один любой списочный контрол вместо сотен лейблов.
Нуб (2007-03-05 14:21:00) [4]люблю скорость :)
Сергей М. (2007-03-05 13:00:00) [5]А зачем тебе "большая скорость" ?
Нуб (2007-03-05 12:47:00) [6]скорость появления новых циферок на экране существенно ниже, чем при количестве TLabelов в 2 раза меньшем, то есть 1200 :), и голова у меня сегодня тоже "тупит" днюха вчера была =)
Сергей М. (2007-03-05 12:43:00) [7]Что есть "тупит" ?
"Тупит" обычно голова)
Нуб (2007-03-05 12:39:00) [8]избавил :), тупит так же как и прежде , no effect
Сергей М. (2007-03-05 12:32:00) [9]Для начала избавь свой алгоритм от совершенно лишних и бестолковых вычислений:
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:19:00) [10]:) красиво !!!, но для меня это еще рано, я новичок строк побольше написал намного :) вообщем кто хочет увидеть матрицу и проверить свой проц на способность может следующий код заюзать , у меня тачка потуплевать начала после запуска следующего кода
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.
комп тупит нереально ;)
novill (2007-03-05 11:57:00) [11]> [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 11:31:00) [12]грид не хочу юзать, сенкс за инфу
Нуб (2007-03-05 11:25:00) [13]Сенкс за инфу, прогу пишу для себя, на работе нефиг делать вот и решил что-то написать
ЮЮ (2007-03-05 11:25:00) [14]Для вывода данныз в "сетке" используются TStringGrid или TDrawGrid (а не 1000 TLabel). Тогда и таймером извращения не потребуются
MBo (2007-03-05 11:19:00) [15]два вложенных цикла, первый до 12, второй до 40
А вообще на каких маньяков рассчитана программа с полутысячей надписей?
Desdechado (2007-03-05 11:18:00) [16]Судя по всему, вычисления могут быть представлены в виде формулы от переменной kol. Тогда ветвления излишни.