Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Претаскивание формы, мышкой... 
V
    Опции темы
Lеstat
Дата 3.9.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вобщем сделал форму.
Убрал у нее все кнопки (закрыть, свернуть и тд... те которые в правом верхнем углу)
Убрал все шапку... вобще сделал из нее серый прямоугольник
Потом натащил на нее красивую картинку с нарисованными кнопками
Натащил на нарисованные кнопки обычные кнопки
Сделал эти кнопки прозрачными и границу у них убрал
Теперь хочу сделать так, чтобы эту форму можно было перетаскивать мышью
Что для этого можно сделать?
И еще иногда когда на кнопку прозрачную наводишь мышь, нажимаешь, отводишь мышь в сторону, отпускаешь и переключаешься на какое-нибудь другое окно, то на форме виден контур кнопки... хотя я его на 0 поставил! как от этого можно избавиться?
PM MAIL ICQ   Вверх
mr.DUDA
Дата 3.9.2006, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Цитата(Lеstat @  3.9.2006,  19:54 Найти цитируемый пост)
Что для этого можно сделать?

Обрабатывать MouseMove, смещать форму при нажатой левой кнопке мыши. Смещение вычислять как разность между двумя Point-ами - тем, который был при предыдущем MouseMove, и текущим.


--------------------
user posted image
PM MAIL WWW   Вверх
Lеstat
Дата 3.9.2006, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо! Я с формами мало вожусь, поэтому сам сразу не догнал.
Решение довольно простое

Вобщем то что у меня получилось хочу оставить тут... может кому пригодится

Код


        private boolean mousedown = false;
        private int x;
        private int y;
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            mousedown = true;
            //вычисляем смещение места клика относительно позиции формы
            x = Form1.MousePosition.X - ((Form1)Application.OpenForms["Form1"]).Location.X; 
            y = Form1.MousePosition.Y - ((Form1)Application.OpenForms["Form1"]).Location.Y;

        }
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            //двигаем форму при движении мыши с учетом смещения
            if (mousedown == true) { ((Form1)Application.OpenForms["Form1"]).SetDesktopLocation(Form1.MousePosition.X - x, Form1.MousePosition.Y - y); }
 
        }
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            mousedown = false;
        }


у меня на форме есть элементы, которые при нажатии на них, тоже должны перемещать форму
в событиях этих элементов нужно просто выбрать из выпадающего списка соответствующие процедуры для формы
если мышь на них попадет, то форма все равно будет перемещаться 


Заметил побочный эффект! У меня форма без шапки и на ее фон повешена картинка...
вобщем такой эффект как у курсора бывает... двигаю форму, а за ней хвост =)
быстро пропадает, но заметен
От этого можно как-нибудь избавиться?
PM MAIL ICQ   Вверх
ivashkanet
Дата 4.9.2006, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Цитата(Lеstat @  3.9.2006,  21:54, рost842616)
   x = Form1.MousePosition.X - ((Form1)Application.OpenForms["Form1"]).Location.X;
y = Form1.MousePosition.Y - ((Form1)Application.OpenForms["Form1"]).Location.Y;

Lеstat, кривовато как-то  smile 
Ты ведь делаешь обработку в самой форме. Так и пользуйся этим  smile 
Код
this.Location.X

P.S. Я такой код уже приводил. Хотя он и 1:0,999999 с твоим smile


PM MAIL WWW ICQ   Вверх
$tatic
Дата 4.9.2006, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ivashkanet, это он приводит разные виды получения объекта формы smile
Lеstat, от хвоста ты наверное не избавишься, это GDI+ с виндой тормозят smile
А код можно упростить за счет того, что у структуры Point есть метод Subtract (в 2.0) и переопределен оператор "-".

Это сообщение отредактировал(а) $tatic - 4.9.2006, 10:04
PM MAIL   Вверх
ivashkanet
Дата 4.9.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Цитата($tatic @  4.9.2006,  10:02 Найти цитируемый пост)
ivashkanet, это он приводит разные виды получения объекта формы 

Не думаю  smile Я еще к тому, что 
Цитата(Lеstat @  3.9.2006,  21:54 Найти цитируемый пост)
((Form1)Application.OpenForms["Form1"]).Location.X

Тянет прилично ресурсов (нужно ведь найти форму, по имени  smile )
PM MAIL WWW ICQ   Вверх
Lеstat
Дата 4.9.2006, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ivashkanet @ 4.9.2006,  08:33)
Цитата(Lеstat @  3.9.2006,  21:54, рost842616)
   x = Form1.MousePosition.X - ((Form1)Application.OpenForms["Form1"]).Location.X;
y = Form1.MousePosition.Y - ((Form1)Application.OpenForms["Form1"]).Location.Y;

Lеstat, кривовато как-то  smile 
Ты ведь делаешь обработку в самой форме. Так и пользуйся этим  smile 
Код
this.Location.X

P.S. Я такой код уже приводил. Хотя он и 1:0,999999 с твоим smile

я почему-то не догнал сразу так попробовать... в C# недавно... 
пробовал Form1.Location... не получилось
поэтому еще долго искал как получить х и у пока не наткнулся на ((Form1)Application.OpenForms["Form1"])

кстати когда переписал через this, то хвост почти исчез... виден, но практически незаметен
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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