purebasic.info

PureBasic forum
Текущее время: Вт ноя 19, 2019 2:17 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Нестандартное окно или скин
СообщениеДобавлено: Пт июн 06, 2008 9:27 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Чт июн 05, 2008 11:29 am
Сообщений: 48
Откуда: из Воронежа
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Помогите, пожалуйста,как сделать нестандартное окно или скин окна(типа круглого и т.д.) в PureBasic v4.0 исли можно с подробными коментариеми! :D

_________________
Помоги ближнему в беде!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Нестандартное окно или скин
СообщениеДобавлено: Пт июн 06, 2008 9:31 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс май 04, 2008 12:18 am
Сообщений: 434
Откуда: PointOfPresence.Ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Андрей писал(а):
Помогите, пожалуйста,как сделать нестандартное окно или скин окна(типа круглого и т.д.) в PureBasic v4.0 исли можно с подробными коментариеми! :D

Вот мой вариант кода - http://tport.astalavista.ms/forum/index ... owtopic=31

_________________
Изображение Точка.Присутствия - каждому по потребностям!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 06, 2008 10:06 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11541
Благодарил (а): 4 раз.
Поблагодарили: 475 раз.
Цитата:
как сделать нестандартное окно
По этому вопросу на форуме есть несколько тем.
Вот те, что пока удалось найти
http://pbasic.spb.ru/phpBB2/viewtopic.php?t=29&sid=4fa9d07a58cd965440ceae3d8055c3c0
http://pbasic.spb.ru/phpBB2/viewtopic.php?t=141&sid=4fa9d07a58cd965440ceae3d8055c3c0


А вообще в библиотеке PBOSL в разделе SkinWin есть нужные для этого функции.
Подробнее об этой библиотеке можно прочитеть здесь
http://pbasic.spb.ru/phpBB2/viewtopic.php?t=56

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 19, 2008 7:04 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб авг 18, 2007 6:26 pm
Сообщений: 605
Откуда: Северодвинск/Питер
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Вообще Форма окна задаётся "RGN"ами, это окончание имеют все функции WinAPI, которые изменяют форму окна :)

Ну, вот моя код: прикол, делающий "дырки" в окнах.
Код:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
Global Mouse.Point
Global CurrentRGN.l
Global AdditiveRGN.l
Global CurrentWindow.l
 
Macro CreateHole(hWnd,Radius)
    P.RECT
    GetWindowRect_(hWnd,P);Пишем во временную переменную P габаритные размеры окна.
   
    X=Mouse\X - P\left;Переводим координаты из абсолютных(относительно рабочего стола) в локальные, оконные.
    Y=Mouse\Y - P\top; -//-
   
    CurrentRGN=CreateRectRgn_(0,0,0,0);Создаём прямоугольный RGN, совершенно пустой. Это как бы сброс, но при этом CurrentRGN получает корректное значение, если она равна 0 - вылезет ошибка!
    GetWindowRgn_(hWnd,CurrentRGN);Пишем в КОРРЕКТНО(см выше) заполненную пустую  CurrentRGN текущую форму окна.
    AdditiveRGN=CreateEllipticRgn_(X-Radius,Y-Radius,X+Radius,Y+Radius);Создаём "дыру"
    CombineRgn_(CurrentRGN,CurrentRGN,AdditiveRGN,4);Добавляем дыру к текуюему РЖНу окна. Тип операции - 4, то есть "вырезание второго из первого"
    SetWindowRgn_(hWnd,CurrentRGN,1);Устанавливаем измененный RGN.
EndMacro
 
 
 
ClassNameString.s=Space(50);В строку будет записываться имя класса окна.
Repeat
 
  GetCursorPos_(Mouse);Пишем в переменную Mouse координаты грызуна.
 
  Mouse\X+(1000-Random(2000))/50;Зашумляем, это для "разброса"
  Mouse\Y+(1000-Random(2000))/50;то же самое...
 
  CurrentWindow=WindowFromPoint_(Mouse\X, Mouse\Y);Получаем хэндл окна под указателем.
 
  ;Окно - это не только "окно",но и кнопки, текстовые поля и тп.
  ;Если попытаться изменить RGN некоторых элементов управления - они могут перестать отображаться.
  ;Вроде бы кнопки рассчитаны на нестандартную форму, но некоторые объекты - не любят.
 
  Parent=1
  While Parent<>0;В этом цикле мы переходим к окну верхнего уровня - то есть к главному окну.
    Parent=GetParent_(CurrentWindow)
    If Parent<>0:CurrentWindow=Parent:EndIf
  Wend
 
 
  Size=10+Random(20);Размер дырки
 
  GetClassName_(CurrentWindow,ClassNameString,50);Проверяем, не является ли наше окно рабочим столом или панелью задач - они закрываются при попытке изменить RGN.
  If ClassNameString<>"Shell_TrayWnd" And ClassNameString<>"Progman"
    CreateHole(CurrentWindow,Size);И используем макрос...
  EndIf
 
  Delay(10);Чтобы не сильно завешивать систему...
Until GetAsyncKeyState_(#VK_ESCAPE)<>0;Выходим из цикла при нажатии Escape
 



ЗЫ: после отрубания проги сверните или измените размер "пострадавших", всё пройдёт :roll:

_________________
http://www.youtube.com/watch?v=XHosLhPEN3k


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 19, 2008 8:51 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 934
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
:) смотреть сквозь окна

а как программно восстановить "пострадавшего"?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 19, 2008 10:20 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Чт июн 05, 2008 11:29 am
Сообщений: 48
Откуда: из Воронежа
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
прикольно, но надо скин или тему что типо этого.
Чтобы картинке например в формате PNG удрать один цвет (прозрачность сделать как гифе), все гаджеты работали и окно можно было перемещать. Такое вообще реально сделать :?:

_________________
Помоги ближнему в беде!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июн 22, 2008 4:35 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб авг 18, 2007 6:26 pm
Сообщений: 605
Откуда: Северодвинск/Питер
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Реально, на сколько я знаю, даже попиксельную прозрачность делать... :shock: Конкретно конвертация картинки делается способом. аналогичным тому, который в моём приколе: есть квадратное окно. Изменяем его размер до размеров картинки(если надо ,ставим картинку на фон.) Затем попиксельно проходим по картинке. Всё то, что имеет ключевой цвет - убирается.
То есть сначала GetWindowRGN_, потом - создать RGN в виде квадратика заданного размера(шаг в циклах =1 - рамер тоже 1 и тд.), и скомбинировать с окном. В итоге вырежутся из него все ненужные части.

В принципе, можно сделать гораздо более сложную, но не тормозящую Винду систему(много РЖНов притормаживают)-чтобы прога умудрялась аппроксимировать форму. Но это очень сложно. :roll:

_________________
http://www.youtube.com/watch?v=XHosLhPEN3k


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 23, 2008 9:50 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс май 04, 2008 12:18 am
Сообщений: 434
Откуда: PointOfPresence.Ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Андрей писал(а):
прикольно, но надо скин или тему что типо этого.
Чтобы картинке например в формате PNG удрать один цвет (прозрачность сделать как гифе), все гаджеты работали и окно можно было перемещать. Такое вообще реально сделать :?:

хей, Джо, ты посты вообще читаешь, которые тебе пишут? я тебе в первом же ответе готовый код дал если чо :lol:

_________________
Изображение Точка.Присутствия - каждому по потребностям!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 23, 2008 10:04 am 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Тема про окно нестандартной формы зесь
http://pbasic.spb.ru/phpBB2/viewtopic.p ... sc&start=0


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 24, 2008 8:45 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс май 04, 2008 12:18 am
Сообщений: 434
Откуда: PointOfPresence.Ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
алё гараж!
там все равно нет реализации с альфа-каналом
единственный мне известный вариант - код который я приводил (облегченная модификация кода нетмаэстро)

_________________
Изображение Точка.Присутствия - каждому по потребностям!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 24, 2008 9:00 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
SofTie писал(а):
кода нетмаэстро)

Ты видел что этот тип творит... чудеса. 280 кБ
http://www.greatlakescode.com/resize.exe


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 24, 2008 9:26 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс май 04, 2008 12:18 am
Сообщений: 434
Откуда: PointOfPresence.Ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
я вот подумываю оф форум сохранить и написать вылиралку исходников...

_________________
Изображение Точка.Присутствия - каждому по потребностям!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 24, 2008 9:38 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11541
Благодарил (а): 4 раз.
Поблагодарили: 475 раз.
Fdisk писал(а):
Ты видел что этот тип творит... чудеса
А исходник есть?

Запустил я прогу и могу сказать со 99% увереностью что настоящими гнутыми и перекошеными окнами там даже и не "пахнет". :shock:
Fdisk, Квитали где-то по твоей просьбе делал окошко в виде симпатичной девушки, седящей на стуле.
Прога resize.exeработает по тому же принципу. :?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 24, 2008 9:42 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр, исходники полностью все есть на этого типа, который бродит по экрану. Полностью тема здесь. Симпатичную девушку Квиталли переделывал, а сочинял этот же НетМаестро, что и тут.
http://www.purebasic.fr/english/viewtopic.php?t=32949

_________________
ПОДПИСЬ____________ Fdisk, (пренеприятнейшая личность(С) ХроноСиндромо)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 24, 2008 9:55 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11541
Благодарил (а): 4 раз.
Поблагодарили: 475 раз.
Fdisk писал(а):
Симпатичную девушку Квиталли переделывал, а сочинял этот же НетМаестро
Помнится мне (могу и ошибаться) что изначально там был довольно путанный код и девушку нельзя было двигать по экрану.
Квиталли же значительно упростил код и вдобавок предусмотрел возможность перемещеть её по экрану.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


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

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB