Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сделать event-ы на своем классе в Lazarus / 23 сообщений из 23, страница 1 из 1
27.12.2017, 15:22:09
    #39576907
Как сделать event-ы на своем классе в Lazarus
Здравствуйте! Мне нужна помощь!
Есть свой класс:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
unit func;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils,Graphics;
type
  TBase = class
  private
    x:integer;
    y:integer;
    bitmap:TBitmap;
  public

     Constructor Create (x0:integer;y0:integer;bitmap0:Tbitmap);
     procedure setX(x0:integer);
     procedure setY(y0:integer);
     procedure setBitmap(bitmap0:TBitmap);
     procedure CLick();
     function getX : integer;
     function getY : integer;
     function getBitmap : TBitmap;
     published


  end;
   TKletka = class(TBase)

   end;
   TRanenayaKletka = class(TBase)

   end;
   TUbitayaKletka = class(TBase)

   end;
   TKorabl = class(TBase)

   end;

implementation
  {TBase}
constructor TBase.Create(x0:integer;y0:integer;bitmap0:Tbitmap);
begin
  x := x0;
  y := x0;
  bitmap := bitmap0;
end;
procedure TBase.setX(x0:integer);
begin
  x := x0;
end;
 procedure TBase.setY(y0:integer);
begin
  y := y0;
end;
 procedure TBase.setBitmap(bitmap0:TBitmap);
 begin
   bitmap := bitmap0;
 end;
 function TBase.getX : integer;
 begin
   Result := x;
 end;
 function TBase.getY : integer;
 begin
   Result := y;
 end;
  function TBase.getBitmap : TBitmap;
 begin
   Result := bitmap;
 end;


end.


В Этом классе надо сделать event OnClick чтобы при клике bitmap элемента на который кликнули менялся.
Все объекты спавнятся динамически.
Вопрос:
Как это сделать?
...
Рейтинг: 0 / 0
27.12.2017, 15:25:28
    #39576914
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
Данил ЛиптугаВ Этом классе надо сделать event OnClick чтобы при клике bitmap элемента на который кликнули менялся.TBitmap - невизуальный класс. Поэтому по нему кликнуть невозможно
...
Рейтинг: 0 / 0
27.12.2017, 15:27:13
    #39576915
Как сделать event-ы на своем классе в Lazarus
_Vasilisk_, То есть мне все надо переделать под image?
...
Рейтинг: 0 / 0
27.12.2017, 15:32:29
    #39576919
Как сделать event-ы на своем классе в Lazarus
_Vasilisk_, Просто мы кликаем не на bitmap, а по объекту, у которого при клике на него применяется процедура setBitmap.
...
Рейтинг: 0 / 0
27.12.2017, 15:50:19
    #39576934
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
Данил ЛиптугаТо есть мне все надо переделать под image?Я понятия не имею какая у Вас задача
Данил ЛиптугаПросто мы кликаем не на bitmap, а по объекту, у которого при клике на него применяется процедура setBitmap.По какому объекту? По Вашему TBase тоже кликнуть невозможно.

Опишите всю задачу
...
Рейтинг: 0 / 0
27.12.2017, 16:02:18
    #39576949
Как сделать event-ы на своем классе в Lazarus
_Vasilisk_, Я делаю игру "морской бой". Код, который я скинул - это модуль, который позволяет контролировать расположение объекта на форме по осям x,y (задавать эти значения или брать их). Для их отображения я использую:
var
Form1: TForm1;
AKletka:array[1..100] of TKletka;
KletkaPic:TBitmap;
ARanenayaKletka:TRanenayaKletka;
AUbitayaKletka:TUbitayaKletka;
AKorabl:TKorabl;
Count : integer;

и


procedure TForm1.NewGame;
var i:integer;
begin
KletkaPic := TBitmap.Create;
KletkaPic.LoadFromFile('green.bmp');
for i := 1 to 100 do
AKletka[i] := TKletka.Create(random(Count)*25,random(Count)*25,KletkaPic);
end;


После рисуем их на форме:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Game;
Repaint;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Count := 20;
Width := Count * 25;
Height := Width;
NewGame;
end;
procedure TForm1.FormPaint(Sender: TObject);
var i:integer;
begin
for i := 1 to 100 do
Canvas.Draw(AKletka[i].getX,AKletka[i].getY,KletkaPic);
end;
Для клеток поля мне надо сделать проверку при клике:
1.Есть ли в этой клетке корабль
2.Если есть то менять bitmap клетки на другой(ранил).
3.Если нет то менять bitmap на третий(промазал).
P.S:Еще я не стал скидывать ужасный код который выводит на экран 100 клеток с разным расположением 10x10.
...
Рейтинг: 0 / 0
27.12.2017, 16:04:19
    #39576952
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
Данил Липтуга,

стоит начать с перекрытия метода Paint, например, у панели (TPanel), а нее и так уже есть соответствующие события.
...
Рейтинг: 0 / 0
27.12.2017, 16:06:13
    #39576953
Как сделать event-ы на своем классе в Lazarus
_Vasilisk_,
Вот результат:
...
Рейтинг: 0 / 0
27.12.2017, 16:24:13
    #39576974
Как сделать event-ы на своем классе в Lazarus
wadman, Мне хотелось бы понять, в чем отличие TImage и TBitmap? Почему и то и то может отображать картинку, но в TImage есть event-ы а в TBitmap нет. Возможно мой вопрос глупый, но lazarus я изучаю месяц и раньше с подобными проблемами не сталкивался при создании Snake или Doodle Jump.
...
Рейтинг: 0 / 0
27.12.2017, 17:29:54
    #39577033
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
Данил Липтугав чем отличие TImage и TBitmap?
Примерно в том же, в чём разница между фурой и контейнером. Второй умеет только хранить в себе что-то (картинку), а первый умеет взаимодействовать с пользователем и системой (отображать картинку, реагировать на нажатия мыши и прочее). TImage - это как бы "обёртка" над TBitmap (и не только) для его отображения и обработки кликов мышкой и прочего.
...
Рейтинг: 0 / 0
27.12.2017, 17:41:15
    #39577041
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
Данил ЛиптугаМне хотелось бы понять, в чем отличие TImage и TBitmap?
TBitmap это просто картинка (в памяти), а TImage - контрол, часть пользовательского интерфейса (как кнопка, бегунок и т.п.).
...
Рейтинг: 0 / 0
27.12.2017, 18:03:00
    #39577056
Как сделать event-ы на своем классе в Lazarus
wadman,alecsvp, Спасибо большое за ответ!
...
Рейтинг: 0 / 0
27.12.2017, 18:58:18
    #39577082
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
Данил Липтуга,

авторМне хотелось бы понять, в чем отличие TImage и TBitmap? Почему и то и то может отображать картинку, но в TImage есть event-ы а в TBitmap нет.

TBitmap не может отображать картинку, его нигде и никогда не видно, соответственно, и кликать не по чем.
...
Рейтинг: 0 / 0
27.12.2017, 23:50:46
    #39577170
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
У вас форма рисует набор данных.
А нужно сделать:
1. Объект ПОЛЕ - имеет данные о размерности поля, умеет рисовать себя, имеет список объектов, расположенных на нём
2. Объект Клетка - имеет разные состояния (пусто/корабль/ранен/подбит) и умеет их отрисовывать

Все объекты от TCustomControl с перекрытым методом Paint
...
Рейтинг: 0 / 0
28.12.2017, 02:38:15
    #39577185
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
DimaBrУ вас форма рисует набор данных.
А нужно сделать:
1. Объект ПОЛЕ - имеет данные о размерности поля, умеет рисовать себя, имеет список объектов, расположенных на нём
2. Объект Клетка - имеет разные состояния (пусто/корабль/ранен/подбит) и умеет их отрисовывать

Все объекты от TCustomControl с перекрытым методом Paintну ты ща насоветуешь! Тс же и поверить может. Не стоит для игр все элементы окнами делать. У нас на вступительном тесте предлагалось написать минера, тому, кто заполнял поле кучей TButton - говорили досвидание
...
Рейтинг: 0 / 0
28.12.2017, 08:24:53
    #39577236
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
Хорошая идея с Батонами, только лучше со СпидБатонами
ИМХО, так телодвижений меньше
...
Рейтинг: 0 / 0
28.12.2017, 09:49:44
    #39577274
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
DimaBrтолько лучше со СпидБатонами
только хотел пошутить. Обломил
...
Рейтинг: 0 / 0
28.12.2017, 09:52:24
    #39577276
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
DimaBrХорошая идея с Батонами, только лучше со СпидБатонами
ИМХО, так телодвижений меньше
В новых версиях есть TButtonGroup, с кастомной отрисовкой, ИМХО, из них можно и минера сделать и морской бой и неведому зверушку, при желании
...
Рейтинг: 0 / 0
28.12.2017, 11:07:13
    #39577311
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
Преимущество Батонов в том что они уже имеют эффект нажатия. Зачем изобретать велосипед ?
...
Рейтинг: 0 / 0
28.12.2017, 13:25:12
    #39577391
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
может ему важно проверить навыки испытуемого, а не рационализм мышления? Тогда правильным ответом может быть и TCustomPanel :)
...
Рейтинг: 0 / 0
28.12.2017, 15:41:51
    #39577448
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
white_niggerНе стоит для игр все элементы окнами делать......тому, кто заполнял поле кучей TButton - говорили досвидание
DimaBrПреимущество Батонов в том что они уже имеют эффект нажатия. Зачем изобретать велосипед ?По идее можно использовать TToolButton. И хендла окна нет и нажимается
...
Рейтинг: 0 / 0
28.12.2017, 15:42:15
    #39577449
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
ДокТогда правильным ответом может быть и TCustomPanel :)А вот это - окно :)
...
Рейтинг: 0 / 0
29.12.2017, 11:22:06
    #39577774
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать event-ы на своем классе в Lazarus
эх, первая моя прога на зачёт :-)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сделать event-ы на своем классе в Lazarus / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]