Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

перемещение обектов


Страницы:   1 2

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, ООП со своими классами, объектами и прочими "глупостями" - это еще "цветочки" по сравнению с "синтаксическим анализатором" ..


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо