Автор | Сообщение |
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 06.12.06 09:37. Заголовок: MiniGUI Прозрачная форма
Может кому надо! Пример формирования прозрачной формы. Работает в Windows 2000 и выше. В Windows 98 обычная форма. Сделано на основе статьи http://ufps.chukotka.ru/~jm/gamedev.chat.ru/articles/a0036.html #include "minigui.ch" Function Main() nTra:=100 DEFINE WINDOW WinTr AT 0,0 WIDTH 300 HEIGHT 300 TITLE 'Прозрачное окно' ; MAIN NOSIZE NOMAXIMIZE @ 200,100 BUTTON But1 CAPTION "Нажми" HEIGHT 35 WIDTH 100; ACTION (IIF(nTra=100,nTra:=255,ntra:=100) , SetTransparent(hWnd,nTra) ) END WINDOW WinTR.Center hWnd=GetFormHandle('WinTR') SetTransparent(hWnd,nTra) ACTIVATE WINDOW WinTR RETURN #pragma BEGINDUMP #define _WIN32_IE 0x0500 #define HB_OS_WIN_32_USED #define _WIN32_WINNT 0x0400 #define WS_EX_LAYERED 0x80000 #define LWA_ALPHA 0x02 #define GWL_EXSTYLE (-20) #include <windows.h> #include "hbapi.h" #include<stdio.h> #include<string.h> #include<shellapi.h> HB_FUNC( SETTRANSPARENT) { typedef BOOL (__stdcall *PFN_SETLAYEREDWINDOWATTRIBUTES)(HWND,COLORREF,BYTE,DWORD); PFN_SETLAYEREDWINDOWATTRIBUTES pfnSetLayeredWindowAttributes = NULL; HINSTANCE hLib = LoadLibrary("user32.dll"); if (hLib != NULL) { pfnSetLayeredWindowAttributes = (PFN_SETLAYEREDWINDOWATTRIBUTES)GetProcAddress(hLib,"SetLayeredWindowAttributes"); } if (pfnSetLayeredWindowAttributes) { SetWindowLong((HWND) hb_parnl (1),GWL_EXSTYLE,GetWindowLong((HWND) hb_parnl (1),GWL_EXSTYLE) | WS_EX_LAYERED); pfnSetLayeredWindowAttributes((HWND) hb_parnl (1), 0, hb_parni (2), LWA_ALPHA); } if (!hLib) { FreeLibrary(hLib); } } #pragma ENDDUMP
|
|
|
Ответов - 26
, стр:
1
2
All
[только новые]
|
|
|
| модератор
|
Пост N: 364
Зарегистрирован: 25.05.05
|
|
Отправлено: 06.12.06 11:49. Заголовок: Re:
SerLog пишет: Большое спасибо! Обратите внимание на новый пример (из поставки build 28) в папке Advanced\Transparency, имеющий подобную функциональность
|
|
|
|
| |
Пост N: 502
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.12.06 18:32. Заголовок: Re:
|
|
|
|
| постоянный участник
|
Пост N: 195
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.12.06 17:29. Заголовок: Re:
Подскажите пожалуйста как реализовать следующую вещь: Запустить логотип программы (как у всех по центру экрана) и в ней сделать бегунок загрузки. Желательно на чистом Харборе. Смотрел в котнрах GTWVW но он делает стандартное Windows-окно. Заранее спасибо за помощь.
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 27.12.06 10:42. Заголовок: Re:
Dima пишет: цитата: | Интерестно а можно ли сделать прозрачные кнопки ? Выглядит очень даже ни чего ;) Скажем как вот тут |
| Элементарно .. Дима :))) Только не знаю , как здесь, но в FWH ..:)) Вот только надо набор кнопочек. И чтоб в трех лицах :)) Т.е. одна , когда ее никто не трогает, вторая когда наводишь на нее курсор и , наконец , :)) Когда ее тискаешь :)) У тебя нет такой коллекции? :))
|
|
|
|
| |
Пост N: 566
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.12.06 11:08. Заголовок: Re:
ММК пишет: цитата: | У тебя нет такой коллекции? :)) |
| Где то была но идею не совсем понял..... Ты имеешь в виду что нужно просто иметь готовые "прозрачные" BMP ? Примерчик могешь состряпать с прозрачной кнопкой как на http://www.viaopen.com/ ?
|
|
|
|
| |
Пост N: 127
Зарегистрирован: 08.11.05
|
|
Отправлено: 27.12.06 11:31. Заголовок: Re:
М-да, выглягит очень даже ничего
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 27.12.06 15:26. Заголовок: Re:
Dima пишет: цитата: | Где то была но идею не совсем понял..... Ты имеешь в виду что нужно просто иметь готовые "прозрачные" BMP ? Примерчик могешь состряпать с прозрачной кнопкой как на http://www.viaopen.com/ ? |
| Идею ты понял правильно :))Пришли мне "кнопку" , т.е. три ( можешь две) вмпэшки. Первая , когда она ( кнопка) прозрачная, а вторая когда на нее н"нажимаешь" Так же делается и меню. Тебе пример на мыло?
|
|
|
|
| |
Пост N: 567
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.12.06 15:40. Заголовок: Re:
ММК пишет: Ищу такие кнопки уже час........пока не вижу Иконок как га#на а кнопок нет ;)
|
|
|
|
| |
Пост N: 568
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.12.06 15:50. Заголовок: Re:
ММК Вообщем я пошел другим путем ;) Слил демку с http://www.viaopen.com/ и вытащил от туда кнопки , которые тебе и отправил. Жду примера или тут или на мыло ;)
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 28.12.06 12:41. Заголовок: Re:
Dima пишет: цитата: | вытащил от туда кнопки , которые тебе и отправил. Жду примера или тут или на мыло ;) |
| Ну какие вытащил , такие я тебе и приделал. На всякий случай добавил круглую и пару мелких. Ну и картинку ... Короче выслал на мыло
|
|
|
|
| |
Пост N: 572
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.12.06 12:54. Заголовок: Re:
Получил но они не фига не прозрачные...................
|
|
|
|
|
| |
Пост N: 573
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.12.06 13:14. Заголовок: Re:
Скрины , разница очевидна ;) Из viaopen [реклама вместо картинки] Твой пример [реклама вместо картинки]
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 28.12.06 15:24. Заголовок: Re:
Dima пишет: цитата: | Скрины , разница очевидна ;) |
| Точно , а у меня на мониторе не видать :(
|
|
|
|
| moderator
|
Пост N: 18
Зарегистрирован: 06.07.06
|
|
Отправлено: 29.12.06 09:46. Заголовок: Re:
|
|
|
|
| постоянный участник
|
Пост N: 82
Зарегистрирован: 09.10.06
|
|
Отправлено: 04.01.07 22:00. Заголовок: Re:
gfilatov пишет: цитата: | Обратите внимание на новый пример (из поставки build 28) в папке Advanced\Transparency, имеющий подобную функциональность |
| Что-то подобное есть и в Advanced\Circle. А поскольку SetLayeredWindowAttributes с LWA_ALPHA уже фигурирует в 3 примерах, я подумал что LWA_COLORKEY тоже заслуживает внимания #include "minigui.ch" PROCEDURE Main DEFINE WINDOW Form_1 ; AT 230, 335 ; WIDTH 450 ; HEIGHT 350 ; TITLE 'Transparency Sample #2' ; MAIN DEFINE LISTBOX ListBox_1 ROW 0 COL 1 WIDTH 440 HEIGHT 160 ITEMS { ' - 01 -' , ' - 02 -' , ' - 03 -' } BACKCOLOR {0,0,0} FONTCOLOR {0,255,0} FONTBOLD .T. VALUE 2 END LISTBOX DEFINE BUTTON Button_1 ROW 220 COL 170 WIDTH 250 HEIGHT 28 CAPTION "Set Black color transparency ON" ACTION SetColorTransparency (_HMG_MainHandle, 0) FLAT .T. END BUTTON DEFINE BUTTON Button_2 ROW 260 COL 170 WIDTH 250 HEIGHT 28 CAPTION "Set Black Color Transparency OFF" ACTION SetTransparency (_HMG_MainHandle, 255) FLAT .T. END BUTTON END WINDOW CENTER WINDOW Form_1 ACTIVATE WINDOW Form_1 Return #define GWL_EXSTYLE (-20) #define WS_EX_LAYERED 524288 #define LWA_COLORKEY 1 #define LWA_ALPHA 2 /* */ FUNCTION SetTransparency( hWnd, nAlpha ) LOCAL nRet, lRet := .F. IF nAlpha < 0 nAlpha := 0 ELSEIF nAlpha > 255 nAlpha := 255 ENDIF SetWindowLong( hWnd, GWL_EXSTYLE, C_OR( GetWindowLong( hWnd, GWL_EXSTYLE ), WS_EX_LAYERED ) ) nRet := SetLayeredWindowAttributes( hWnd, 0, nAlpha, LWA_ALPHA ) IF VALTYPE(nRet) == 'N' lRet := ( nRet > 0 ) ENDIF /* */ FUNCTION SetColorTransparency( hWnd, nColor ) LOCAL nRet, lRet := .F. SetWindowLong( hWnd, GWL_EXSTYLE, C_OR( GetWindowLong( hWnd, GWL_EXSTYLE ), WS_EX_LAYERED ) ) nRet := SetLayeredWindowAttributes( hWnd, nColor, 0, LWA_COLORKEY ) IF VALTYPE(nRet) == 'N' lRet := ( nRet > 0 ) ENDIF RETURN( lRet ) /* SetLayeredWindowAttributes WRAPPER. The SetLayeredWindowAttributes function sets the opacity and transparency color key of a layered window. Parameters: - hwnd Handle to the layered window. - crKey Pointer to a COLORREF value that specifies the transparency color key to be used. (When making a certain color transparent...). - bAlpha Alpha value used to describe the opacity of the layered window. 0 = Invisible, 255 = Fully visible - dwFlags Specifies an action to take. This parameter can be LWA_COLORKEY (When making a certain color transparent...) or LWA_ALPHA. */ DECLARE DLL_TYPE_BOOL SetLayeredWindowAttributes( ; DLL_TYPE_LONG hWnd, DLL_TYPE_INT crKey, DLL_TYPE_UINT bAlpha, DLL_TYPE_DWORD dwFlags ) ; IN USER32.DLL #pragma BEGINDUMP #define HB_OS_WIN_32_USED #define _WIN32_WINNT 0x0400 #include <windows.h> #include "hbapi.h" #include "hbapiitm.h" HB_FUNC ( SETWINDOWLONG ) { hb_retnl( SetWindowLong( (HWND) hb_parnl(1), hb_parni(2), hb_parnl(3) ) ); } HB_FUNC( C_AND ) { hb_retnl( hb_parnl(1) & hb_parnl(2) ) ; } HB_FUNC( C_OR ) { hb_retnl( hb_parnl(1) | hb_parnl(2) ) ; } HB_FUNC( C_NOT ) { hb_retnl( ~hb_parnl(1) ) ; } #pragma ENDDUMP
|
|
|
|
| модератор
|
Пост N: 401
Зарегистрирован: 25.05.05
|
|
Отправлено: 05.01.07 00:02. Заголовок: Re:
Петр Большое спасибо! Обязательно использую этот пример в следующем релизе. Как Вас представить в истории изменений?
|
|
|
|
| постоянный участник
|
Пост N: 83
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.01.07 09:39. Заголовок: Re:
Petr Chornyj <myorg63@mail.ru>
|
|
|
|
| |
Пост N: 576
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.01.07 14:13. Заголовок: Re:
Пробнул в FW сделать прозрачную форму и не получилось.... Покажите на примере , как. Сиба ;)
|
|
|
|
| постоянный участник
|
Пост N: 84
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.01.07 14:40. Заголовок: Re:
C FW не работал - ничего определенного не скажу. Но функция HB_FUNC( SETTRANSPARENT) из примера SerLog должна работать ( в Win2000 and later конечно). Т.е. есть форма, на форме - кнопка. В обработчике кнопки пишем, к примеру, выполнить SetTransparent (hWnd, 125), где hWnd хендл окна, если не знаем hWnd заменяем pfnSetLayeredWindowAttributes((HWND) hb_parnl (1), 0, hb_parni (2), LWA_ALPHA); на pfnSetLayeredWindowAttributes( GetActiveWindow(), 0, hb_parni (2), LWA_ALPHA); Но наверное в FW доступ к хэндлам окон все таки как то организован.
|
|
|
|
| |
Пост N: 577
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.01.07 15:14. Заголовок: Re:
Вот собственно пример......не работает прозрачность..... #include "FiveWin.ch" static oWnd,hdc function Main() local oDlg, lExit := .f., oBtn,obtn1 DEFINE dialog oDlg FROM 5, 15 TO 20, 50 TITLE "TEST" @ 3, 4 BUTTON oBtn1 PROMPT "TEST" OF oDlg SIZE 40, 12 ; ACTION ( hdc:=odlg:getdc(),SETTRANSPARENT(hdc,255)) @ 3, 12 BUTTON oBtn PROMPT "Cancel" OF oDlg SIZE 40, 12 ; ACTION (lExit := .t., oDlg:End()) ACTIVATE dialog oDlg CENTERED VALID lExit return nil //----------------------------------------------------------------------------// #pragma BEGINDUMP #define _WIN32_IE 0x0500 #define HB_OS_WIN_32_USED #define _WIN32_WINNT 0x0400 #define WS_EX_LAYERED 0x80000 #define LWA_ALPHA 0x02 #define GWL_EXSTYLE (-20) #include <windows.h> #include "hbapi.h" #include<stdio.h> #include<string.h> #include<shellapi.h> HB_FUNC( SETTRANSPARENT) { typedef BOOL (__stdcall *PFN_SETLAYEREDWINDOWATTRIBUTES)(HWND,COLORREF,BYTE,DWORD); PFN_SETLAYEREDWINDOWATTRIBUTES pfnSetLayeredWindowAttributes = NULL; HINSTANCE hLib = LoadLibrary("user32.dll"); if (hLib != NULL) { pfnSetLayeredWindowAttributes = (PFN_SETLAYEREDWINDOWATTRIBUTES)GetProcAddress(hLib,"SetLayeredWindowAttributes"); } if (pfnSetLayeredWindowAttributes) { SetWindowLong((HWND) hb_parnl (1),GWL_EXSTYLE,GetWindowLong((HWND) hb_parnl (1),GWL_EXSTYLE) | WS_EX_LAYERED); pfnSetLayeredWindowAttributes((HWND) hb_parnl (1), 0, hb_parni (2), LWA_ALPHA); } if (!hLib) { FreeLibrary(hLib); } } #pragma ENDDUMP
|
|
|
|
| постоянный участник
|
Пост N: 85
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.01.07 15:24. Заголовок: Re:
Dima пишет: цитата: | @ 3, 4 BUTTON oBtn1 PROMPT "TEST" OF oDlg SIZE 40, 12 ; ACTION ( hdc:=odlg:getdc(),SETTRANSPARENT(hdc,255)) |
| Почему getdc(), это наверное возвращает контекст устройства, а не хэндл окна
|
|
|
|
|
| |
Пост N: 30
Зарегистрирован: 27.04.06
|
|
Отправлено: 05.01.07 15:25. Заголовок: Re:
ACTION ( hdc:=odlg:getdc(),SETTRANSPARENT(hdc,255)) : hdc заменяем oDlg
|
|
|
|
| |
Пост N: 31
Зарегистрирован: 27.04.06
|
|
Отправлено: 05.01.07 15:28. Заголовок: Re:
то есть oDlg:hWnd
|
|
|
|
| постоянный участник
|
Пост N: 86
Зарегистрирован: 09.10.06
|
|
Отправлено: 05.01.07 15:29. Заголовок: Re:
И еще SETTRANSPARENT(hdc,255) - при значении Alpha :=255 тяжело будет увидеть прозрачность
|
|
|
|
| |
Пост N: 578
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.01.07 15:35. Заголовок: Re:
Виноват, все работает. Переделал кусок @ 3, 4 BUTTON oBtn1 PROMPT "TEST" OF oDlg SIZE 40, 12 ; ACTION ( chdc:=GetActiveWindow(),SETTRANSPARENT(chdc,125))
|
|
|
|
| |
Пост N: 579
Зарегистрирован: 17.05.05
|
|
Отправлено: 05.01.07 15:46. Заголовок: Re:
По ходу еще вопрос ;) Прозрачным становистя все что внутри этого окна в том числе и элементы управления (в моем случае кнопки) Можно ли сделать так что бы прозрачность не затрагивала кнопки или скажем затрагивала только кнопки ? ЗЫ Прошу извинить за возможно тупые вопросы .......на FW не писал , просто пока "балуюсь"
|
|
|
Ответов - 26
, стр:
1
2
All
[только новые]
|
|