powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сделать event-ы на своем классе в Lazarus
23 сообщений из 23, страница 1 из 1
Как сделать event-ы на своем классе в Lazarus
    #39576907
Здравствуйте! Мне нужна помощь!
Есть свой класс:

Код: 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
Как сделать event-ы на своем классе в Lazarus
    #39576914
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данил ЛиптугаВ Этом классе надо сделать event OnClick чтобы при клике bitmap элемента на который кликнули менялся.TBitmap - невизуальный класс. Поэтому по нему кликнуть невозможно
...
Рейтинг: 0 / 0
Как сделать event-ы на своем классе в Lazarus
    #39576915
_Vasilisk_, То есть мне все надо переделать под image?
...
Рейтинг: 0 / 0
Как сделать event-ы на своем классе в Lazarus
    #39576919
_Vasilisk_, Просто мы кликаем не на bitmap, а по объекту, у которого при клике на него применяется процедура setBitmap.
...
Рейтинг: 0 / 0
Как сделать event-ы на своем классе в Lazarus
    #39576934
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данил ЛиптугаТо есть мне все надо переделать под image?Я понятия не имею какая у Вас задача
Данил ЛиптугаПросто мы кликаем не на bitmap, а по объекту, у которого при клике на него применяется процедура setBitmap.По какому объекту? По Вашему TBase тоже кликнуть невозможно.

Опишите всю задачу
...
Рейтинг: 0 / 0
Как сделать event-ы на своем классе в Lazarus
    #39576949
_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
Как сделать event-ы на своем классе в Lazarus
    #39576952
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данил Липтуга,

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

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

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

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

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


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