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