Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поле для фишек. Что посоветуете. 
:(
    Опции темы
JAnty
  Дата 9.4.2007, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 6.12.2004
Где: Москва

Репутация: 1
Всего: 2



Есть поле 10х10
Клетки поля чорные и белые разумеется.
Из чего мне делать это самое поле?
Может из компонентов Panel на котором будет Image c рисунком фишки, соответственно при нажатии игроком на Image если там рисунок с фишкой - фиксируется, и потом при нажатии на пустую клетку - фишка нарисуется там, а в бывшем Image->Picture=NULL;

Как вам моя идея? Или может как подругому?

Это сообщение отредактировал(а) JAnty - 9.4.2007, 15:31


--------------------
Русский справочник по WinAPI

Возможно всё, что возможно вообразить! Это и значит быть гением как я!
PM MAIL   Вверх
HappyLife
Дата 9.4.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: 4
Всего: 8



лучше имхо заюзать TDrawGrid
PM MAIL   Вверх
Klin
Дата 10.4.2007, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



В принципе, сие через Canvas реализовать можно...


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Snowy
Дата 10.4.2007, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 1
Всего: 484



TSpeedButton

Добавлено через 55 секунд
На неё и рисунок ложится и нажатие с фиксацией она поддерживает.
PM MAIL   Вверх
pandrew
Дата 11.4.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



Цитата(Klin)
В принципе, сие через Canvas реализовать можно... 

Или TPaintBox->Canvas. 
Если использовать 100 компонентов на форме, будет тормозить при перерисовке и мерцать. Придется с этим отдельно бороться.
PM MAIL   Вверх
Klin
Дата 11.4.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(pandrew @  11.4.2007,  10:21 Найти цитируемый пост)
Если использовать 100 компонентов на форме

Зачем же так жестоко smile Создается только один компонент, а не нем идет прорисовка. Причем каждое изображение идет не поверх другого, а вместо и поэтому память, при этом не теряется.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Dem_max
Дата 12.4.2007, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 14
Всего: 39



Я решил таким образом (создал графический редактор с рисованием на поле NxM)

Все рисуется на PaintBox;

Код

// Функция отрисовки ячейки поля ввода
void TMain::DrawCell(int Cols, int Rows)
{
  TCanvas *pCanvas = PaintBox->Canvas;
  ColsDraw = Cols*SizeRecC - Cols + 23;  // Высчитываем начальную координату X ячейки поля ввода
  RowsDraw = Rows*SizeRecR - Rows + 18;  // Высчитываем начальную координату Y ячейки поля ввода
  //pCanvas->Pen->Width = 2;
  pCanvas->Pen->Style = psSolid;

  if(Changed[Cols][Rows]) // Если ячейка помечена то рисуем черным цветом
  {
    pCanvas->Brush->Color = TColor(clBlack); // Если ячейка помечена то рисуем черным цветом
  }
  else
  {
    pCanvas->Brush->Color = TColor(clWhite); // Если ячейка не помечена то стираем ячейку
  }

  pCanvas->Pen->Color = clSilver;  // Границы ячейки имеют серый цвет
  pCanvas->Rectangle(ColsDraw, RowsDraw, ColsDraw + SizeRecC, RowsDraw + SizeRecR); // Рисуем ячейку поля ввода
}


void TMain::CreateField(int ColsF, int RowsF)
{
  TCanvas *pCanvas = PaintBox->Canvas; //Image->Canvas;
  ColsDraw = ColsGl*SizeRecC - ColsGl + Xoffs;  // Высчитываем начальную координату X ячейки поля ввода
  RowsDraw = RowsGl*SizeRecR - RowsGl + Yoffs;  // Высчитываем начальную координату Y ячейки поля ввода
  PaintBox->Width  = ColsDraw + 23;           // Ширина прямоугольника
  PaintBox->Height = RowsDraw + 18;           // Высота прямоугольника
  pCanvas->Brush->Color = TColor(clWhite);
  pCanvas->Pen->Width = 1;
  pCanvas->Pen->Color = clBlack;
  pCanvas->Pen->Style = psSolid;
  pCanvas->Rectangle(0, 0, PaintBox->Width, PaintBox->Height);


  for(int i = 0; i <  ColsF; i++)  // Массив ячеек i на j
  {
    for(int j = 0; j < RowsF; j++)
    {
      DrawCell(i,j); // Рисуем ячейки поля ввода
    }
  }

  for(int k = 0; k < ColsF; k++)  // Рисуем горизонтальную нумерацию
  {
    DrawTextNum(k, "Hor");               // Рисуем горизонтальную цифру нумерации
  }

  for(int k = 0; k < RowsF; k++)  // Рисуем вертикальную нумерацию
  {
    DrawTextNum(k, "Ver");               // Рисуем вертикальную цифру нумерации
  }
}


// Функция закрашивания или стирания поля ввода пр нажатии кнопок мыши
void __fastcall TMain::PaintBoxMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  int Cols = 0;
  int Rows = 0;

  int ColsDraw = ColsGl*SizeRecC - ColsGl + 23;  // Высчитываем начальную координату X ячейки поля ввода
  int RowsDraw = RowsGl*SizeRecR - RowsGl + 18;  // Высчитываем начальную координату Y ячейки поля ввода
  Cols = (X - 23)/(SizeRecC-1);  // По положению курсора высчитываем номер ячейки в столбцах
  Rows = (Y - 18)/(SizeRecR-1);  // По положению курсора высчитываем номер ячейки в рядах

  if(Button==mbLeft&&X>23 && Y>18 && X<ColsDraw && Y<RowsDraw) // Проверяем нажаты ли кнопки мыши и курсор находиться в поле ввода
  {

    ColsDraw = Cols*SizeRecC - Cols + 23; // Высчитываем начальную координату X ячейки
    RowsDraw = Rows*SizeRecR - Rows + 18; // Высчитываем начальную координату Y ячейки
    if(!BtnUnPaint->Down)  // Проверяем будем мы стирать или рисовать ячецку
    {
      pCanvas->Brush->Color = TColor(clWhite); // Стираем ячейку
      Changed[Cols][Rows] = false;    // Отмечаем номер ячейки как незакрашенной
    }
    else
    {
      pCanvas->Brush->Color = TColor(clBlack); // Рисуем ячейку черным цветом
      Changed[Cols][Rows] = true;     // Отмечаем номер ячейки как закрашенной
    }

    pCanvas->Rectangle(ColsDraw, RowsDraw, ColsDraw + SizeRecC, RowsDraw + SizeRecR); // Рисуем ячейку поля ввода


}




Это сообщение отредактировал(а) Dem_max - 12.4.2007, 11:11


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1027 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.