Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1172428433
Cyrax
2007-02-25 21:33
2007.03.25
Священные войны по ЯП


2-1172746478
Mashenka_84
2007-03-01 13:54
2007.03.25
создание файла


15-1172574124
DrDe
2007-02-27 14:02
2007.03.25
Delphi7, компи.....


3-1167309164
evgen1
2006-12-28 15:32
2007.03.25
frReport1.Pages.Count=0?


2-1172735792
Стас
2007-03-01 10:56
2007.03.25
EControlC





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский