![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
перемещение обектов
Lenka © (2005-06-07 01:26:00)как можно создать в виде класса обект (например человеческая клетка), и обеспечить его перемещение?
Antol (2005-06-11 16:19:00) [1]ORMADA
а можна увидеть, то прикольное, что у тебя получилось?
ORMADA (2005-06-09 12:36:00) [2]2 -=XP=- реально прикольна получилось :)
TUser (2005-06-09 10:54:00) [3]> каким образом можно сохранить изображение на канве в jpeg-файл?
> Нарисовать всё тоже самое на TBitmap.Canvas
Можно в этот битмап скопировать - BitMap.Canvas.CopyRect, только перед этим битмапу Height и Width выставить.
ЮЮ (2005-06-09 06:00:00) [4]>каким образом можно сохранить изображение на канве в jpeg-файл?
Нарисовать всё тоже самое на TBitmap.Canvas
TJPEGImage.Assign(TBitmap)
TJPEGImage.SaveToFile
Lenka (2005-06-09 00:18:00) [5]
> MacroDenS
хм......
MacroDenS (2005-06-08 19:15:00) [6]Сори не посмотрел на ник, тогда таже фраза но с обращением к девушке (плз без обид)
MacroDenS (2005-06-08 19:13:00) [7]to Ega23 © (07.06.05 14:21) [15]
Рецепт-то прост: в течении семестра надо заниматься, а не балду гонять.
Так вот он по хлду и занимался етим вопросом весь семестр (в плане тепепатических догадок сперматозойд-яйцеклетка), а теперь вот модель нужно забацать... Еще погоди, месяцев церез 3-9 придется целую человеческую систему моделировать, учитывая при этом такие параметры, как: размер степендии, место жительство, одежка, еда и т.д и т.п.
Lenka (2005-06-08 19:00:00) [8]всем огромнейшее спасибо, мне ваши советы действительно очень помогли! остался вопрос, каким образом можно сохранить изображение на канве в jpeg-файл?
-=XP=- (2005-06-07 18:35:00) [9]Я бы делал все эти классы наследниками от TGraphicControl
И еще им "мир" нужен - от TWorld = class(TCustomControl) ;)
TUser (2005-06-07 18:30:00) [10]Проблема начинает проясняться. Я бы делал все эти классы наследниками от TGraphicControl. Ну а дальше - зависит от конкретной детализации задачи - что там должно двигаться как.
-=XP=- (2005-06-07 17:50:00) [11]Button1.Left := Button1.Left + 1;
Button1.Top := Button1.Top + 1;
Посмею предложить свой вариант ;)
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
Randomize;
for i := 0 to 20 do
CreateCellButton(Random(10) + 100, Random(10) + 100);
Timer1.Interval := 200;
end;
procedure TForm1.CreateCellButton(X, Y: integer);
begin
with TButton.Create(Self) do
begin
Parent := Self;
SetBounds(X, Y, 2, 2);
OnClick := OnButtonClick;
end;
end;
procedure TForm1.OnButtonClick(Sender: TObject);
var
Btn: TButton;
begin
if Sender is TButton then
begin
Btn := TButton(Sender);
CreateCellButton(Btn.Left, Btn.Top);
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i: integer;
Btn: TButton;
L: integer;
T: integer;
const
SexAge = 18;
DeathAge = 70;
StepsPerYear = 10;
ClimaxAge = 50;
const
Step: integer = 0;
function PartnerPresent(Btn: TButton): boolean;
var
i: integer;
C: TControl;
begin
Result := false;
for i := 0 to ControlCount - 1 do
begin
C := Controls[i];
Result := (C <> Btn) and (C is TButton) and
(C.Left = Btn.Left) and (C.Top = Btn.Top) and
(C.Width >= SexAge);
if Result then Exit;
end;
end;
begin
for i := ControlCount - 1 downto 0 do
if (Controls[i] is TButton) then
begin
Btn := TButton(Controls[i]);
L := Btn.Left + Random(7) - 3;
T := Btn.Top + Random(7) - 3;
if L < 0 then L := 0;
if L + Btn.Width > Width then
L := Width - Btn.Width;
if T < 0 then T := 0;
if T + Btn.Height > Height then
T := Height - Btn.Height;
if Step mod StepsPerYear = 1 then
Btn.SetBounds(L, T, Btn.Width + 1, Btn.Height + 1)
else
Btn.SetBounds(L, T, Btn.Width, Btn.Height);
if (Btn.Width >= SexAge) and (Btn.Width < ClimaxAge) and PartnerPresent(Btn) then
CreateCellButton(Btn.Left, Btn.Top);
if (Btn.Width + Random(20) > DeathAge) then
Btn.Free;
end;
integer((@Step)^) := Step + 1;
end;
Digitman (2005-06-07 17:05:00) [12]
> то есть если его рисовать на Canvas с помощью стандартных
> процедур, то проблем нет
ну и рисуй на канве !
зачем изобретать велосипед, если есть готовые инструменты ?
> в том-то и дело, что задать это все необходимо, используя
> классы
в разделе interface опиши класс
THumanCell=Class(TControl)
....
public
procedure Draw;
end;
в разделе implrmentation реализуй его методы
procedure THumanCell.Draw; //отрисовка "клетки"
begin
.. здесь на какой-либо канве отрисовываешь свою клетку ..
end;
Просто Джо (2005-06-07 17:03:00) [13]
> [22] Lenka © (07.06.05 16:47)
> то есть если его рисовать на Canvas с помощью стандартных
> процедур, то проблем нет. но в том-то и дело, что задать
> это все необходимо, используя классы
ну, так и сделай в этом классе метод Draw, который и будет рисовать объект "на канвасе". Например:
TCell = class
public
procedure Draw (ACanvas: TCanvas);
end;
implementation
procedure TCell.Draw (ACanvas: TCanvas);
begin
ACanvas.Ellipse (...);
// etc
end;
disider (2005-06-07 17:00:00) [14]Удалено модератором
Lenka (2005-06-07 16:47:00) [15]
> Digitman
проблема в том, каким способом можно задать в классе графический объект. то есть если его рисовать на Canvas с помощью стандартных процедур, то проблем нет. но в том-то и дело, что задать это все необходимо, используя классы
jack128 (2005-06-07 16:36:00) [16]Lenka © (07.06.05 16:14) [19]
а анализатор для восстановления таблицы истинности для 2-8 переменных для алебры Буля
А.. Приснопамятный калькулятор "Серолицего", только для логических выражений... Это и за один день можно наваять..
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Button1.Left := Button1.Left + 1;
Button1.Top := Button1.Top + 1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Caption := 'Клетка';
Button1.Top := 10;
Button1.Left := 10;
Timer1.Interval := 200;
end;
:-))
Digitman (2005-06-07 16:23:00) [17]
> Lenka © (07.06.05 16:14) [19]
> немного осталось
судя по "фундаментальности" твоего вопроса - да, немного : начать и кончить)
так в чем, собссно, проблема ?
Lenka (2005-06-07 16:14:00) [18]
> -=XP=-
нет, код не нужен :) анализатор почти готов :)
а "перемещение" - чтоб по экрану ползала :)
> Ega23
хех) в течении семестра?.. остальное уже готово!
> Digitman
та ну, прорвемся! немного осталось :)
> TUser
это кому как.....делфи было дано на самостоятельное изучение недели две назад, и сразу такие проэкты. о каком учебном задании может идти речь?..а анализатор для восстановления таблицы истинности для 2-8 переменных для алебры Буля. с этим проблем уже нет :)
TUser (2005-06-07 14:47:00) [19]От анализируемого языка зависит. Для очень простого языка (а в учебном задании он имеет права быть очень простым) анализатор писАть - два часа работы. А вот клетку смоделировать - это задача для реальных перцев.
Digitman (2005-06-07 14:29:00) [20]
> надо еще синтаксический анализатор за два дня написать
боюсь, банан в кондуит тебе светит со страшной силой)
imho, ООП со своими классами, объектами и прочими "глупостями" - это еще "цветочки" по сравнению с "синтаксическим анализатором" ..