Форум: "Начинающим";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.347 c