Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.05.2014, 12:03
NaN43 NaN43 вне форума
Прохожий
 
Регистрация: 15.05.2014
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Рисование в цикле

Здравствуйте.
Подскажите как правильно организовать цикл, чтобы в компоненте TImage был нарисован такой рисунок, и все квадраты были пронумерованы как указанно на рисунке.
Изображения
Тип файла: jpg rectangle.jpg (10.9 Кбайт, 20 просмотров)
Ответить с цитированием
  #2  
Старый 24.05.2014, 15:22
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от NaN43
Подскажите как правильно организовать цикл, чтобы в компоненте TImage был нарисован такой рисунок, и все квадраты были пронумерованы как указанно на рисунке.
Код:
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
procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
  can: TCanvas;
  i, X, Y: Integer;
  R: TRect;
  s: String;
begin
  bmp := Image1.Picture.Bitmap;
  bmp.Width := 357;
  bmp.Height := 61;
  can := bmp.Canvas;
  can.Brush.Color := clWhite;
  can.FillRect(Rect(0, 0, bmp.Width, bmp.Height));
 
  can.Pen.Color := clGreen;
  for i := 0 to 19 do
  begin
    X := 3 + 30 * (i mod 2) + 76 * (i div 4) - 3 * (i div 8);
    Y := 4 + 30 * ((i div 2) mod 2);
    R := Rect(X, Y, X + 20, Y + 20);
    can.Brush.Color := $339900;
    can.Brush.Style := bsSolid;
    can.Rectangle(R);
    s := IntToStr(i + 1);
    Inc(X, (20 - can.TextWidth(s)) div 2);
    Inc(Y, (20 - can.TextHeight(s)) div 2);
    can.Brush.Style := bsClear;   
    can.TextRect(R, X, Y, s);
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
NaN43 (24.05.2014)
  #3  
Старый 24.05.2014, 19:29
NaN43 NaN43 вне форума
Прохожий
 
Регистрация: 15.05.2014
Сообщения: 4
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Большое спасибо.
Имеется еще один вопросик: возможно ли при таком построении получить, в переменную, цифру из квадрата, при клике ЛКМ по нему и если возможно то с помощью каких процедур или событий?

Последний раз редактировалось NaN43, 24.05.2014 в 19:34.
Ответить с цитированием
  #4  
Старый 25.05.2014, 02:32
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от NaN43
Имеется еще один вопросик: возможно ли при таком построении получить, в переменную, цифру из квадрата, при клике ЛКМ по нему и если возможно то с помощью каких процедур или событий?
Да, возможно. У TImage есть событие OnMouseDown срабатывающее на нажатие кнопки мышки и событие OnMouseUp срабатывающее на отпускание кнопки мышки - просто вешаешь на нужное событие нужный обработчик события.

В примере обрабатывается событие OnMouseUp (отпускание кнопки мышки):
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  i: Integer;
  R: TRect;
  Pt: TPoint;
begin
  if Button = mbLeft then
  begin
    Pt := Point(X, Y);
    for i := 0 to 19 do
    begin
      X := 3 + 30 * (i mod 2) + 76 * (i div 4) - 3 * (i div 8);
      Y := 4 + 30 * ((i div 2) mod 2);
      R := Rect(X, Y, X + 20, Y + 20);
      if PtInRect(R, Pt) then
      begin
        ShowMessageFmt('Кликнули по числу %d', [i + 1]);
        Exit;
      end;
    end;
  end;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
NaN43 (25.05.2014)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:44.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025