Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите переделать! Canvas 
:(
    Опции темы
OutlawZ
  Дата 27.7.2010, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



Приветствую, есть код который рисует на форме клетку с определенной шириной и высотой клетки. Взято из книги Культина про игру сапер. 

Код

#define LEFT 0 // по X
#define TOP 1  // по Y
#define W 40 // ширина клетки поля
#define H 40 // высота клетки поля

void fastcall TMain::FormPaint(TObject *Sender)
{
 ShowPole(status);
}

// Показывает поле
void fastcall TMain::ShowPole( int status)
{
 for ( int row = 1; row <= MR; row++ )
  for ( int col = 1; col <= MC; col++ )
    Kletka(row, col, status);
}

// рисует на экране клетку
void fastcall TMain::Kletka(int row, int col, int status)
{
 int X = LEFT + (col-1)* W; .
 int у = TOP + (row-1)* H;

  // клетка - серый квадрат
  Canvas->Brush->Color = clBtnFace;
  Canvas->Rectangle(x-1,y-1,x+W,y+H);
  return;
}


Помогите сделать так когда я нажимаю левой кнопкой мыши по любому квадрату в клетке внутри нажатого квадрата рисовалась линия. Я уже повеситься готов, пробовал по разному но линия рисуется во всех  квадратах.  Помогите пожалуйста.  smile  smile 


--------------------
user posted image
user posted image
PM MAIL   Вверх
586
Дата 27.7.2010, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код
#define LEFT 100 // по X
#define TOP 101  // по Y
#define W 40 // ширина клетки поля
#define H 40 // высота клетки поля

#define MR 10
#define MC 10

TPoint selPos(0, 0);
bool bSelect = false;

void __fastcall TForm1::FormPaint(TObject *Sender)
{
    ShowPole(0);
}
//---------------------------------------------------------------------------

// Показывает поле
void __fastcall TForm1::ShowPole(int status)
{
 for ( int row = 0; row < MR; row++ )
  for ( int col = 0; col < MC; col++ )
    Kletka(row, col, status);
}
// рисует на экране клетку
void __fastcall TForm1::Kletka(int row, int col, int status)
{
 int x = LEFT + col* W;
 int y = TOP + row* H;
  // клетка - серый квадрат
  Canvas->Brush->Color = clBtnFace;
  Canvas->Rectangle(x-1,y-1,x+W,y+H);
  if(bSelect && selPos.x == col && selPos.y == row)
  {
    Canvas->MoveTo(x, y);
    Canvas->LineTo(x+W, y+H);
    Canvas->MoveTo(x+W, y);
    Canvas->LineTo(x, y+H);
  }
  return;
}

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    if(Button == mbLeft)
    {
        int posX = (X-LEFT) / W, posY = (Y-TOP) / H;

        if(X < LEFT || posX >= MR || Y < TOP || posY >= MC)
        {
            bSelect = false;
        }
        else
        {
            bSelect = true;
            selPos.x = posX;
            selPos.y = posY;
        }
        Paint();
    }
}


Это сообщение отредактировал(а) 586 - 28.7.2010, 02:08
PM   Вверх
OutlawZ
Дата 28.7.2010, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



Спасибо все работает!


--------------------
user posted image
user posted image
PM MAIL   Вверх
OutlawZ
Дата 13.8.2010, 03:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



Вопрос по этой же теме только в другом суть, при рисовании клетки она может иметь размер больше чем размер формы, включал ScrollBar но он не работает точнее не показывает оставшейся часть клетки. Помогите правильно скроилить нарисованную клетку. 
user posted image
Результат, скролинг не работает!


--------------------
user posted image
user posted image
PM MAIL   Вверх
Platov
Дата 23.8.2010, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Масштабируй при рисовании. 
Посчитай какого размера должны быть клетки чтобы вписаться в форму и всё.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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