Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2012, 12:59   #1
Timofeika
Новичок
Джуниор
 
Регистрация: 20.12.2012
Сообщений: 2
По умолчанию Идеальный газ в delphi

есть программа идеального газа...нужно добавить два label
чтобы в одном количество молекул указывалось
а в другом скорость молекул.причем в программе я могу скороть менять
Код HTML:
unit Unit1;

interface

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

type

  TForm1 = class(TForm)
    Timer1: TTimer;
    TrackBar1: TTrackBar;
    Button1: TButton;
    Button2: TButton;
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure Render;
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

    type TShar=record
   x,y:real;
   Vx,Vy:real;
   Color:Tcolor;
   end;

var
  Form1: TForm1;
    M:array of TShar;
   V:real;
   x1,x2,y1,y2,r,x0,y0:integer;

implementation

{$R *.dfm}

procedure TForm1.Render;
var i,x,y:integer;
BMP:TBitMap;
begin
 BMP:=TBitMap.Create;
 BMP.Width:=ClientWidth;
 BMP.Height:=ClientHeight;
  For i:=0 to length(m)-1 do begin
   BMP.Canvas.Brush.Color:=m[i].Color;
   x:=round(m[i].x-r);
   y:=round(m[i].y-r);
   BMP.Canvas.Ellipse(x,y,x+2*r,y+2*r);
  end;
form1.canvas.draw(0,0,BMP);
BMP.free;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
a:real;
begin
v:=5;
r:=10;
x1:=r;
y1:=panel1.Top+panel1.Height+r;
x2:=ClientWidth-r;
y2:=ClientHeight-r;
setlength(m,10);
 for i:=0 to length(m)-1 do begin
M[i].x:=(x2-x1)*random+x1;
M[i].y:=(y2-y1)*random+y1;
a:=random*2*pi;
m[i].Vx:=cos(a);
m[i].Vy:=sin(a);
m[i].Color:=cllime;
end;
 render;
end;


procedure TForm1.FormPaint(Sender: TObject);
begin
   render;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
begin
  For i:=0 to length(m)-1 do begin
  m[i].x:=m[i].x+m[i].Vx*V;
  m[i].y:=m[i].y+m[i].Vy*V;
   if m[i].x<=x1 then begin
   m[i].vx:=-m[i].Vx;
   m[i].x:=(2*x1-m[i].x);
   end;
   if m[i].x>=x2 then begin
   m[i].vx:=-m[i].Vx;
   m[i].x:=(2*x2-m[i].x);
   end;
      if m[i].y<=y1 then begin
   m[i].vy:=-m[i].Vy;
   m[i].y:=(2*y1-m[i].y);
   end;
     if m[i].y>=y2 then begin
   m[i].vy:=-m[i].Vy;
   m[i].y:=(2*y2-m[i].y);
   end;
   end;
   render;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
 v:=TrackBar1.Position*2;
end;

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
x0:=x;y0:=y;
panel1.BeginDrag(true);
end;

procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
panel1.Top:=panel1.Top+y-y0;
if panel1.Top<0 then  panel1.Top:=0;
if panel1.Top>clientheight-panel1.height then  panel1.Top:=clientheight-panel1.height;
y1:=panel1.Top+panel1.Height+r;
end;

procedure TForm1.Button1Click(Sender: TObject);
var a:real;
begin
setlength(M, length(m)+1);
M[length(M)-1].x:=ClientWidth-r;
M[length(M)-1].y:=ClientHeight-r;
a:=random*2*Pi;
m[length(M)-1].Vx:=cos(a);
m[length(M)-1].Vy:=sin(a);
m[length(M)-1].Color:=clred;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
x2:=ClientWidth-r;
y2:=ClientHeight-r;
end;

procedure TForm1.Button2Click(Sender: TObject);
var a: real;
begin
setlength(M, length(m)-1);
M[length(M)-1].x:=ClientWidth-r;
M[length(M)-1].y:=ClientHeight-r;
a:=random*2*Pi;
m[length(M)-1].Vx:=cos(a);
m[length(M)-1].Vy:=sin(a);
end;

end.
Timofeika вне форума Ответить с цитированием
Старый 20.12.2012, 15:14   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

и хде тут скорость и количество в коде? переменкам надо говорящие имена давать)
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 20.12.2012, 20:48   #3
Timofeika
Новичок
Джуниор
 
Регистрация: 20.12.2012
Сообщений: 2
По умолчанию

ну если на форму добавить два labela на одном должна показываться скорость на другом количество молекул.по идее а-это скорость в коде а length-количество.только как это вставить в прогу
Timofeika вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Идеальный вес radeon123 Общие вопросы Delphi 2 11.02.2012 09:37
Идеальный газ (delphi) clope Помощь студентам 2 09.10.2011 15:45
Идеальный народ mihali4 Свободное общение 28 03.11.2010 21:43
С 2012 года не установившие счетчики на газ и воду будут платить больше Alter Свободное общение 5 21.08.2010 10:37
Вопрос с долгом Украины за газ.... anton14 Свободное общение 8 02.01.2009 02:41