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

Вниз

Создать класс   Найти похожие ветки 

 
Reformator ©   (2011-06-01 15:51) [0]

Нужна реализовать какой нибудь класс к этой программе. Помогите плиз, или объясните какой класс проще сделать и как.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, math, Menus;

const
 dt=0.0001;//квант времени
type
 TForm1 = class(TForm)
   Anime: TImage;
   graf: TChart;
   start: TButton;
   stop: TButton;
   exit: TButton;
   Timer: TTimer;
   Chastota: TLabeledEdit;
   New_Ugol: TLabeledEdit;
   New_Speed: TLabeledEdit;
   Param_Zatuh: TLabeledEdit;
   Series1: TLineSeries;
   Series2: TLineSeries;
   Series3: TLineSeries;
   Vynuj_Sila: TLabeledEdit;
   Chasta_Vynuj_Sila: TLabeledEdit;
   MainMenu1: TMainMenu;
   N1: TMenuItem;
   N2: TMenuItem;
   N3: TMenuItem;
   N4: TMenuItem;
   N5: TMenuItem;
   N6: TMenuItem;
   N7: TMenuItem;
   N8: TMenuItem;
   PopupMenu1: TPopupMenu;
   N9: TMenuItem;
   N10: TMenuItem;
   N11: TMenuItem;
   N12: TMenuItem;
   procedure exitClick(Sender: TObject);
   procedure startClick(Sender: TObject);
   procedure TimerTimer(Sender: TObject);
   procedure stopClick(Sender: TObject);
   procedure N8Click(Sender: TObject);
   procedure FormShow(Sender: TObject);
   procedure N11Click(Sender: TObject);
 private
   { Private declarations }
   R,t,Phi,PhiDot,Phi2Dot,Omega,Delta,dphidot,f,chastF:extended;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

 procedure ShowLogo; external "Logo.dll"
 procedure ShowAbout; external "About.dll"

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
ShowLogo;
end;

procedure TForm1.N11Click(Sender: TObject);
begin
graf.SaveToBitmapFile( "c:\grafik.bmp" );
end;

procedure TForm1.N8Click(Sender: TObject);
begin
ShowAbout;
end;

procedure TForm1.startClick(Sender: TObject);
var i:integer;
begin
for i:=0 to 2 do //очистка (для нескольких испытаний)
 graf.Series[i].Clear;
t:=0;
Phi:=StrToFloatDef(New_Ugol.Text,90)/180*pi;//угол
phidot:=strtofloatdef(New_Speed.Text,5);//скорость
delta:=strtofloatdef(Param_Zatuh.Text,1)/5;//параметр затухания
omega:=strtofloatdef(Chastota.Text,5);//частота
f:=strtofloatdef(Vynuj_Sila.Text,0);//сила
chastF:=StrToFloatdef(Chasta_Vynuj_Sila.Text,6);//частота вынужд. силы
r:=min(Anime.Width,Anime.Height) div 3;//за радиус принимаем 1/3
timer.Enabled:=true;//включаем таймер
end;

procedure TForm1.stopClick(Sender: TObject);
begin
timer.Enabled:=false;
end;

procedure TForm1.TimerTimer(Sender: TObject);
var xx,yy,i:integer;
begin
for i:=1 to 100 do //зависит от точности кванта времени
begin
 dphidot:=-(2*delta*phidot+sqr(omega)*sin(phi)+f*sin(chastF*t)*cos(phi))*dt;
 phi2dot:=dphidot/dt;
 phi:=phi+(phidot+dphidot/2)*dt;
 phidot:=phidot+dphidot;
 t:=t+dt;//следующий момент времени
end;
{рисуем графики}
graf.Series[0].AddXY(t, phi);
graf.Series[1].AddXY(t, phi2dot);
graf.Series[2].AddXY(t, phidot);
with Anime do
begin
 canvas.Pen.color:=clGreen;//обводка
 canvas.Brush.Color:=$D8E9EC;//фоновый цвет
 canvas.Rectangle(0,0,Width,Height);//прямоуголник на всё поле
 canvas.Pen.color:=clBlack;//цвет нити
end;
xx:=Round(R*cos(3*pi/2+phi));//отступ по оси X
yy:=Round(R*sin(3*pi/2+phi));//отступ по оси Y
Anime.canvas.MoveTo((Anime.Height div 2),(Anime.Width div 2));//возвращаем значения в центр
Anime.canvas.LineTo((Anime.Height div 2)+xx,(Anime.Width div 2)-yy);//рисуем нить
Anime.canvas.Brush.Color:=clGreen;//цвет шарика
Anime.canvas.Ellipse(((Anime.Height div 2)+xx)+3,((Anime.Height div 2)-yy)+3,((Anime.Height div 2)+xx)-3,((Anime.Height div 2)-yy)-3);//рисуем шарик
end;

procedure TForm1.exitClick(Sender: TObject);
begin
close;
end;

end.


 
Virgo_Style ©   (2011-06-01 15:57) [1]

маленький секрет: если не заставлять людей разбираться в куче слегка отформатированного кода, а в трех словах рассказать о программе - вероятность ответа резко повысится.

если я правильно протелепатировал, то классом может стать сам грузик-на-веревочке


 
Юрий Зотов ©   (2011-06-01 15:58) [2]

Класс уже создан -  TForm1.


 
clickmaker ©   (2011-06-01 15:59) [3]

TFormWithGruzikNaVerevochke


 
Reformator ©   (2011-06-01 16:04) [4]

Программа анализа колебания математического маятника.
Реализована анимация движения маятника и выведение графика изменения скорости угла и т.п.


 
Reformator ©   (2011-06-01 16:05) [5]

Нужно написать свой класс, TForm1 не катит


 
clickmaker ©   (2011-06-01 16:07) [6]

> математического маятника.

TSimplePendulum


 
OW ©   (2011-06-01 16:13) [7]


> если Virgo_Style правильно протелепатировал,

и классом может стать сам грузик-на-веревочке
и интерпретация мной правильная, то

он должен иметь в полях
  Chastota: TLabeledEdit;
  New_Ugol: TLabeledEdit;
  New_Speed: TLabeledEdit;
  Param_Zatuh: TLabeledEdit;
и т.п.
типа, видимо, Integer;
и на чем рисоваться, видимо, PaintBox удобнее всего
таймер, если нужен

Ну чтоб юзать можно было

O: TGruzikNaVerevochke;
begin
 O := TGruzikNaVerevochke.Create(Form1);
 O.Chastota := 123;
 O.New_Speed := 321;
...
 O.Start;
end;


> New_Ugol

глаз режет. или NovyiUgol или NewAngle
да и вообще, форматировать надо


 
Reformator ©   (2011-06-01 16:16) [8]

Наверно интересно стебаться, а помощь?, а зачем, нам и так прикольно...


 
Reformator ©   (2011-06-01 16:18) [9]

Спасибо, буду пробовать


 
Anatoly Podgoretsky ©   (2011-06-01 16:25) [10]

> Reformator  (01.06.2011 15:51:00)  [0]

TObject очень простой класс


 
Anatoly Podgoretsky ©   (2011-06-01 16:27) [11]

> Reformator  (01.06.2011 16:05:05)  [5]

TForm1 это твой класс, а не Дельфи


 
OW ©   (2011-06-01 17:05) [12]

т.е. надо написать что-то вроде (1), что бы пользователь мог писать типа такого

 TForm1 = class(TForm)
   btn1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure FormPaint(Sender: TObject);
   procedure btn1Click(Sender: TObject);
 private      { Private declarations }
   FG: TMyFig;
 public       { Public declarations }
 end;

var
 Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 FG := TMyFig.Create(Form1);  // создал твой класс
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 FG.PaintAll; // пусть сам перерисовывается
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
 FG.Radius := 80; // пользователь увеличил радиус, у тебя он увеличился и тут же! перерисовался
end;


---------------1
Type
 TMyFig = class
 private
   FPlace: TPaintBox;
   FX, FY: Integer;
   FRadius: Integer;
   procedure SetRadius(const Value: Integer);
   function GetRadius: Integer;
   Procedure RePaintME;
 public
   constructor Create(AOwner: TWinControl);
   procedure PaintAll;
 property
   Radius: Integer read GetRadius write SetRadius;
 end;

implementation

constructor TMyFig.Create;
begin
 FPlace := TPaintBox.Create(nil); // ну, все примерно, неохота возиться
 FPlace.Parent :=  AOwner;
 FPlace.Align := alClient;
 FX := 100;
 FY := 100;
 FRadius := 50;
end;

function TMyFig.GetRadius: Integer;
begin
 Result := FRadius;
// кажется бессмысленно, но! вставь сюда showmessage и можно легко отслеживать когда обращение происходит.
end;

procedure TMyFig.SetRadius(const Value: Integer);
begin
 FRadius := Value; // тут еще сразу можно проверить на выход за границы!
 RePaintME; // и прорисовать.
end;

procedure TMyFig.RePaintME;
begin
// тут сами прорисоввываем
 FPlace.Canvas.Brush.Color := clBlack;
 FPlace.Canvas.Ellipse(FX, FY, FX + FRadius, FY + FRadius);
end;

procedure TMyFig.PaintAll;
begin
 RePaintME; // это открыть пользователю, чтоб он не мог вызывать реальную прорисовку, т.к тут можем проверить еще что-то, и просто не вызвать реальную отрисовку, если она не надо :)
end;
-------------


короче, идея такова, правда, ниче нового :)


 
Игорь Шевченко ©   (2011-06-01 17:57) [13]


>   New_Ugol: TLabeledEdit;
>   New_Speed: TLabeledEdit;


Расстрелять. Из крупнокалиберного пулемета.


 
ов (дом)   (2011-06-01 18:48) [14]


> и т.п.
> типа, видимо, Integer;

а может не надо?


 
Dennis I. Komarov ©   (2011-06-02 12:02) [15]


> Расстрелять. Из крупнокалиберного пулемета.

Собственно, а за что?


 
Anatoly Podgoretsky ©   (2011-06-02 12:54) [16]

> Dennis I. Komarov  (02.06.2011 12:02:15)  [15]

Было бы за что, так ядренную бонбу бы кинули.


 
clickmaker ©   (2011-06-02 12:55) [17]

> Собственно, а за что?

единообразия нет.
Надо либо New_Ugol и New_Skorost либо New_Angle и New_Speed


 
RWolf ©   (2011-06-02 12:59) [18]


> New_Skorost

Нью-Васюки?


 
Dennis I. Komarov ©   (2011-06-02 13:00) [19]


> clickmaker ©   (02.06.11 12:55) [17]

Блин, я подумал что-то криминльное в TLabeledEdit



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

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

Наверх




Память: 0.52 MB
Время: 0.007 c
15-1306480585
OW
2011-05-27 11:16
2011.09.18
Старая программка вылетает TProgressBar property out of range


2-1306920985
R_R
2011-06-01 13:36
2011.09.18
Печать в QuickRep


3-1264093758
SAN_i
2010-01-21 20:09
2011.09.18
Связать DataSource и Grid из разных dll


2-1306954237
Тимофей Ю.
2011-06-01 22:50
2011.09.18
про сортировку


2-1306677371
Justin
2011-05-29 17:56
2011.09.18
Как определить соотношение ширина/высота?