Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Движение Image, Builder C++ 
:(
    Опции темы
mr.Anderson
Дата 24.11.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



586, работает, только вопрос: как ограничить перемещение объекта так, чтобы его нельзя было "вынести" за пределы формы?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
586
Дата 24.11.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(sim7 @  24.11.2006,  19:51 Найти цитируемый пост)
как ограничить перемещение объекта так, чтобы его нельзя было "вынести" за пределы формы?

В комментариях этот код есть. Смотри внимательно!
PM   Вверх
mr.Anderson
Дата 24.11.2006, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


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

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



я его вроде включал...

Добавлено @ 20:31 
Нету там этого кода. Весь код раскомментировал, все это приводит только к тому, что панель можно передвигать только в пределах где-то 150 пикселов от границ панели, а за пределы формы ее все равно можно вынести.
Вот что у меня:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int x,y;
TRect r;
bool bMove = false;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Panel1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 bMove=true;
 ::SetCapture(Panel1->Handle);    // áëîêèðîâêà ôîêóñà
 // îãðàíè÷åíèå ïîäâèæíîñòè êóðñîðà
 RECT r;
 GetWindowRect(Panel1->Handle, &r);
 ClipCursor(&r);
 x=X; y=Y;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Panel1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
 if(!bMove) return;
 r=Panel1->BoundsRect;
 r.Left+=X-x;  r.Right+=X-x;
 r.Top+=Y-y;   r.Bottom+=Y-y;
 Panel1->BoundsRect=r;        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
 bMove=false;
 ::ReleaseCapture();     // îñâîáîæäåíèå ôîêóñà
 // îñâîáîæäåíèå ïîäâèæíîñòè êóðñîðà
 ClipCursor(0);
}
//---------------------------------------------------------------------------



--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
586
Дата 24.11.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(sim7 @  24.11.2006,  21:27 Найти цитируемый пост)
GetWindowRect(Panel1->Handle, &r);

GetWindowRect(ScrollBox1->Handle, &r);
Мы ведь ограничиваем передещение курсора в пределах ScrollBox1, не так-ли?

Здесь вообще идёт речь не об окне,  а об ScrollBox'е.

Для формы, которая имеет заголовок будет примерно так:
Код
int x,y;
TRect r;
bool bMove = false;

void __fastcall TForm1::Panel1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 bMove=true;
 ::SetCapture(Panel1->Handle);    // aeiee?iaea oieona
 RECT r;
 GetWindowRect(Handle, &r);
 r.left+=GetSystemMetrics(SM_CYDLGFRAME)+1;
 r.right-=GetSystemMetrics(SM_CYDLGFRAME)+1;
 r.top+=GetSystemMetrics(SM_CYCAPTION)+GetSystemMetrics(SM_CXDLGFRAME)+1;
 r.bottom-=GetSystemMetrics(SM_CXDLGFRAME)+1;
 ClipCursor(&r);
 x=X; y=Y;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Panel1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
 if(!bMove) return;
 // исправляю ляп Архангельского
 Panel1->Left+=X-x;
 Panel1->Top+=Y-y;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Panel1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
 bMove=false;
 ::ReleaseCapture();
 ClipCursor(0);
}


Это сообщение отредактировал(а) 586 - 24.11.2006, 21:57
PM   Вверх
Evgesha
Дата 25.11.2006, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо ОПЫТНОМУ отдельная благодарность за рабочий код, но есть еще один ньюанс
когда скажем движем Панель или вверх или влево скролбары не показываються вообще
вниз и вправо работает отлично, попробую сам разобраться, но если у кого есть идее буду благодарен  smile 
--------------------
Все это хорошо, а как дальше жить!!!
PM MAIL   Вверх
Evgesha
Дата 28.11.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну вот опять загруз
Что никто ни сталкивался что ли  smile 
--------------------
Все это хорошо, а как дальше жить!!!
PM MAIL   Вверх
Evgesha
Дата 1.12.2006, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Повторюсь Помогите с проблемой  smile  smile  smile 
--------------------
Все это хорошо, а как дальше жить!!!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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