Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1307097736
unknown2
2011-06-03 14:42
2011.09.18
бинаризация изображения


15-1306320156
clickmaker
2011-05-25 14:42
2011.09.18
Как в ICQ 7.5 отключить открытие по Ctrl+Shift+I


2-1306835974
.dzmitry
2011-05-31 13:59
2011.09.18
use MODI Library


2-1306609152
Cramol
2011-05-28 22:59
2011.09.18
Представить файл в HEX-виде


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский