purebasic.info

PureBasic forum
Текущее время: Пт дек 14, 2018 8:19 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: OpenWindow
СообщениеДобавлено: Пт окт 01, 2010 4:35 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Всё об окнах. Различные настройки, внешний вид, дополнительные возможности.

Список исходников ( будет пополнятся по мере наполнения)

Кнопка помощи в заголовке формы
Фиксация размеров формы
Изменение курсора формы
Форма с тенью
Мигающая форма
Прозрачное окно
Зеркальная форма
Форма без иконки
Заголовок справа
Тонкая рамка
Подсветка фокуса гаджета
Координаты курсора+определение гаджета под курсором
Прозрачный EditorGadget
EditorGadget с фоном в виде изображения
Реально передать фокус окну
Screenshot активного окна
Получаем сведения о гаджетах
Узнаем путь до собственного исполняемого файла
Активируем Драг энд Дроп
Узнаем скрыто окно или нет
Узнаем, есть ли у окна рамка
Позиция и размер окна. Сохранить и восстановить
Окно без рамок
Установить картинку фоном окна
Окно в стиле славных Win 95
Не пускаем курсор за пределы окна
Дезактивировать кнопку Maximize
Удалить кнопку Maximize
Добавить кнопку Maximize\Minimize
Узнаем PID своего процесса
Добавляем пункт в SystemMenu
Удаляем кнопку программы с панели задач
Из SystemMenu удаляем пункт "Выход"
Запрещаем таскать окно за заголовок
Восстановление иконки в трее после перезапуска explorer.exe
Отключить стиль XP для нужного гаджета (контрола)
MsgBox в заданном месте экрана
[b]ToolBar[/b], сборник
[b]ProgressBar[/b], сборник
[b]PanelGadget[/b], сборник


Последний раз редактировалось kvitaliy Чт авг 22, 2013 6:02 am, всего редактировалось 18 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Кнопка помощи в заголовке формы
СообщениеДобавлено: Пт окт 01, 2010 4:44 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Кнопка помощи в заголовке формы

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Procedure.l WindowCallback(Windowid,Message,wParam,lParam)
  Result = #PB_ProcessPureBasicEvents
  Select Message
    Case #WM_HELP
      *Helpinfo.HELPINFO = lParam
      Select *Helpinfo\iCtrlId
        Case 1
          MessageRequester("Помощь","Это тестовая кнопка",0)
      EndSelect
  EndSelect
  ProcedureReturn Result
EndProcedure
 
If OpenWindow(0,0,0,500,250,"Окно",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(1,10,10,100,20,"Кнопка",0)
 
  SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,#WS_EX_CONTEXTHELP)
  SendMessage_(WindowID(0),#WM_NCPAINT,1,0)
  SetWindowCallback(@WindowCallback())
 
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf



Вариант с ToolTip:
Код:
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
;\  Взято из Droopy's lib
;\  Переделано, чтобы установить время показа ToolTip. По умолчанию в Droopy время ~ 5 сек. Если подсказка большая, прочитать не успеть
;\  А для коротких подсказок, вполне можно использовать Droopy's lib
Enumeration
  #Button_0 = 0        ; Необходимо что бы номера гаджетов совпадали с индексами LinkedList
  #String_0 = 1
  #ComboBox = 2        ; Для этого контрола нет ToolTip
EndEnumeration
Global NewList ToolTip.s()
  AddElement(ToolTip()) : ToolTip() = "Это тестовая кнопка"+#CR$+"Кнопку можно нажать"+#CR$+"а можно не нажимать !"
  AddElement(ToolTip()) : ToolTip() = "Это StringGadget"+#CR$+"Здесь можно ввести текст"+#CR$+"а можно не вводить!"
 
 Global ctrl.l, ToolTip.l
 
Procedure ToolTipAddEx(Type,MaxWidth,WindowID, Gadget, Text$ , Title$, Icon,TextColor,BKColor,Font.s,FontSize, Time)
  If Type=0 ;/ Ballon
    Type=#WS_POPUP | #TTS_NOPREFIX | #TTS_BALLOON
  Else      ;/ Or Square
    Type=#WS_POPUP | #TTS_NOPREFIX
  EndIf
  If Time=0 : Time = 30000 : EndIf
  If TextColor=0 : TextColor=GetSysColor_(#COLOR_INFOTEXT) : EndIf
  If BKColor=0 : BKColor=GetSysColor_(#COLOR_INFOBK) : EndIf
  ToolTip=CreateWindowEx_(0,"ToolTips_Class32","",Type,0,0,0,0,WindowID(WindowID),0,GetModuleHandle_(0),0)
  SendMessage_(ToolTip,#TTM_SETTIPTEXTCOLOR,TextColor,0)
  SendMessage_(ToolTip,#TTM_SETTIPBKCOLOR,BKColor,0)
  SendMessage_(ToolTip,#TTM_SETMAXTIPWIDTH,0,MaxWidth)
  SendMessage_(ToolTip,#TTM_SETDELAYTIME,#TTDT_AUTOPOP,Time)  ; Устанавливаем время жизни ToolTip
  SendMessage_(ToolTip,#TTM_SETDELAYTIME,#TTDT_INITIAL,200)   ; Задаем интервал между моментом остановки курсора мыши и появлением подсказки
   
  Balloon.TOOLINFO\cbSize=SizeOf(TOOLINFO)
  Balloon\uFlags= #TTF_IDISHWND | #TTF_SUBCLASS
  Balloon\hWnd=WindowID(WindowID)
  Balloon\uId=GadgetID(Gadget)
  Balloon\lpszText=@Text$
  ;/ Fonts
  If Font>""
    LoadFont(1, Font, FontSize)
    SendMessage_(ToolTip, #WM_SETFONT, FontID(1), #True)
  EndIf
  SendMessage_(ToolTip, #TTM_ADDTOOL, 0, Balloon)
  If Title$ > ""
    SendMessage_(ToolTip, #TTM_SETTITLE, Icon, @Title$)
  EndIf
EndProcedure
 
Procedure ToolTipRemoveEx(Gadget.l)
  ttRemove.TOOLINFO\cbSize = SizeOf(TOOLINFO)
  ttRemove\hWnd = WindowID(0)
  ttRemove\uId = GadgetID(Gadget)
  SendMessage_(ToolTip, #TTM_DELTOOL, 0, ttRemove)
  ToolTip = 0
EndProcedure
 
Procedure.l WindowCallback(Windowid,Message,wParam,lParam)
  Result = #PB_ProcessPureBasicEvents
  Select Message
    Case #WM_HELP
      *Helpinfo.HELPINFO = lParam
      ctrl = *Helpinfo\iCtrlId                                     ; Номер гаджета
        If SelectElement(ToolTip(), *Helpinfo\iCtrlId)
         ToolTipAddEx(0,300,0,*Helpinfo\iCtrlId,ToolTip(),"",0,0,0,"Arial",8, 20000) ; Создаем ToolTip
        EndIf
    Case #WM_MOUSEMOVE
       If ToolTip
        ToolTipRemoveEx(ctrl)                                                        ; Удаляем ToolTip
       EndIf
  EndSelect
  ProcedureReturn Result
EndProcedure
 
If OpenWindow(0,0,0,500,250,"Окно",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(#Button_0,10,10,100,20,"Кнопка",0)
  StringGadget(#String_0,10,40,100,20,"")
  ComboBoxGadget(#ComboBox, 10, 70,100,20)
  SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,#WS_EX_CONTEXTHELP)
  SendMessage_(WindowID(0),#WM_NCPAINT,1,0)
  SetWindowCallback(@WindowCallback())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


_________________
read-only ¯\_(ツ)_/¯


Последний раз редактировалось kvitaliy Сб окт 02, 2010 2:44 pm, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Фиксация размеров формы
СообщениеДобавлено: Пт окт 01, 2010 4:51 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Фиксация размеров формы
Измените размер формы. После нажатия на кнопку изменение не возможно.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Define EventID
 
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
  ButtonGadget(1,10,10,180,20,"Зафиксировать размер формы",0)
 
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_Gadget
  Select EventGadget()
    Case 1
      SetWindowLongPtr_(WindowID(0),#GWL_STYLE,GetWindowLongPtr_(WindowID(0),#GWL_STYLE)&~#WS_THICKFRAME)
  EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Изменение курсора формы
СообщениеДобавлено: Пт окт 01, 2010 5:01 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Изменение курсора формы

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetClassLongPtr_(WindowID(0),#GCL_HCURSOR,LoadCursor_(0,#IDC_UPARROW))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
 
;       Идентификатор      Применение
;       #IDC_ARROW      Стандартный курсор в виде стрелки
;       #IDC_IBEAM      Текстовый курсор
;       #IDC_WAIT       Курсор в виде песочных часов. Используется при выполнении длительных операций
;       #IDC_CROSS      Курсор в виде перекрестия
;       #IDC_UPARROW    Курсор в виде вертикальной стрелки
;       #IDC_SIZE       Индикация изменения размера
;       #IDC_ICON       Пустая пиктограмма
;       #IDC_SIZENWSE   Индикация изменения размера
;       #IDC_SIZENESW   Индикация изменения размера
;       #IDC_SIZEWE     Индикация изменения размера
;       #IDC_SIZENS     Индикация изменения размера
;
 


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Форма с тенью
СообщениеДобавлено: Пт окт 01, 2010 5:03 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Форма с тенью
Код:
1
2
3
4
5
6
 
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
  SetClassLongPtr_(WindowID(0),#GCL_STYLE,$00020000)
  HideWindow(0,0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Мигающая форма
СообщениеДобавлено: Пт окт 01, 2010 8:10 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Мигающая форма
Используется для привлечения внимания.
Управляемый код:
Код:
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
 
#FLASHW_STOP = 0 ;Стоп миганию. Система возвращает окно в исходное состояние.
#FLASHW_CAPTION = 1 ;Мигает окно
#FLASHW_TRAY = 2 ;Мигает кнопка на панели задач
#FLASHW_ALL = (#FLASHW_CAPTION | #FLASHW_TRAY) ;Окно+кнопка на панели задач
#FLASHW_TIMER = 4 ;Мигание продолжается, пока не установлен флаг #FLASHW_STOP
#FLASHW_TIMERNOFG = $C ;Мигает до тех пор, пока окно не в фокусе
 
Structure FLASHWINFO
    cbSize.l
    hwnd.l
    dwFlags.l
    uCount.l
    dwTimeout.l
 EndStructure
 
  FlashInfo.FLASHWINFO
  #Window_0=0
 
 
 If  OpenWindow(#Window_0, 450, 200, 400, 166, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
 
 
     FlashInfo\cbSize = 20;Len(FlashInfo)
     FlashInfo\dwFlags = (#FLASHW_ALL|#FLASHW_TIMER)
     FlashInfo\dwTimeout = 200 ; частота мигания. если 0 то по умолчанию
     FlashInfo\hwnd = (WindowID(#Window_0)) ; Хендл (hwnd) окна
     FlashInfo\uCount = 0 ; кол-во миганий, если 0 то до флага
     
     FlashWindowEx_(FlashInfo)
   
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
 



Не управляемый код:
Код:
1
2
3
4
5
6
7
 
If OpenWindow(0,0,0,500,250,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  FlashWindow_(WindowID(0),1)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
 



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

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Прозрачное окно
Код:
1
2
3
4
5
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,GetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE) | #WS_EX_LAYERED)
  SetLayeredWindowAttributes_(WindowID(0), 0, (255 * 50) / 100, #LWA_ALPHA)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Зеркальная форма
СообщениеДобавлено: Вт окт 05, 2010 7:12 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Зеркальная форма ( для левши?)
К стати, в Qip кнопка закрытия тоже слева...
Код:
1
2
3
4
5
6
 
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,#WS_EX_LAYOUTRTL)
  SendMessage_(WindowID(0),#WM_NCPAINT,1,0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Форма без иконки
СообщениеДобавлено: Вт окт 05, 2010 7:15 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Форма без иконки

Код:
1
2
3
4
5
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
  SetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE, GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE) | #WS_EX_DLGMODALFRAME)
  HideWindow(0, 0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Заголовок справа
СообщениеДобавлено: Вт окт 05, 2010 7:18 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Заголовок справа
Код:
1
2
3
4
5
6
 
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,#WS_EX_RIGHT)
  SendMessage_(WindowID(0),#WM_NCPAINT,1,0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Тонкая рамка
СообщениеДобавлено: Вт окт 05, 2010 7:21 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Тонкая рамка

Код:
1
2
3
4
5
6
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible)
  SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE,$2000)
  HideWindow(0,0)
 
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Подсветка фокуса гаджета
СообщениеДобавлено: Ср окт 06, 2010 12:14 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Подсветка фокуса гаджета

Итак есть два варианта:
1) вставить только "SendMessage_(WindowID(НомерОкна), #WM_UPDATEUISTATE, $30002,0)"
Код:
1
2
3
4
5
6
7
8
9
10
11
 
 
If OpenWindow(0, 0, 0, 400,150,  "Focus Test", #PB_Window_ScreenCentered |#PB_Window_SystemMenu)
   ButtonGadget(0, 100, 100, 80, 25, "Button &1")
   ButtonGadget(1, 200, 100, 80, 25, "Button &2")
   SetActiveGadget(0)
   SendMessage_(WindowID(0), #WM_UPDATEUISTATE, $30002,0)
   Repeat
   Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
 



2) вставить процедуру SetUIState и её вызов:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
 
Procedure SetUIState (hwnd.i, LoWord.w, HiWord.w)
   SendMessage_(hwnd, #WM_UPDATEUISTATE, (HiWord<<16) | (LoWord & $FFFF), 0)
EndProcedure
 
#UIS_CLEAR = 2
#UISF_HIDEFOCUS = 1
#UISF_HIDEACCEL = 2
 
;-- Demo
If OpenWindow(0, 0, 0, 400,150,  "Focus Test", #PB_Window_ScreenCentered |#PB_Window_SystemMenu)
   ButtonGadget(0, 100, 100, 80, 25, "Button &1")
   ButtonGadget(1, 200, 100, 80, 25, "Button &2")
   SetActiveGadget(0)
 
   SetUIState(WindowID(0), #UIS_CLEAR, #UISF_HIDEFOCUS|#UISF_HIDEACCEL)
 
   Repeat
   Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт апр 26, 2011 10:46 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Координаты курсора+определение гаджета под курсором

Код:
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
54
55
56
57
58
59
60
61
62
63
64
Enumeration
  #Window_0
EndEnumeration
Enumeration
  #Text_0
  #Text_1
  #Text_2
  #Text_3
  #Text_4
  #Button_1
EndEnumeration
 
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
  P.POINT : hTemp.l
  lpClassName.s = Space(256)
   Select uMsg
      Case #WM_SETCURSOR
        GetCursorPos_(P)  
        ; Функция ScreenToClient преобразует экранные координаты указанной точки на экране в координаты рабочей области.
        ScreenToClient_(WindowID(#Window_0), P)
        SetGadgetText(#Text_1, "X:Y = " + Str(p\x) + " : " + Str(p\y))    ; Координаты курсора, относительно окна
        hTemp = ChildWindowFromPoint_(WindowID(#Window_0), p\x | p\y<<32) ; определяем, на какой гаджет наведен курсор
        NameClass.l=GetClassName_(hTemp, lpClassName,256)
       
          Select hTemp
             Case GadgetID(#Text_0)   : SetGadgetText(#Text_0,  "Label 0 ->"+Left(lpClassName,NameClass))
             Case GadgetID(#Text_1)   : SetGadgetText(#Text_0,  "Label 1->"+Left(lpClassName,NameClass))
             Case GadgetID(#Text_2)   : SetGadgetText(#Text_0,  "Label 2->"+Left(lpClassName,NameClass))
             Case GadgetID(#Text_3)   : SetGadgetText(#Text_0,  "Label 3->"+Left(lpClassName,NameClass))
             Case GadgetID(#Text_4)   : SetGadgetText(#Text_0,  "Label 4->"+Left(lpClassName,NameClass))
             Case GadgetID(#Button_1) : SetGadgetText(#Text_0,  "Button_1->"+Left(lpClassName,NameClass))
             Case WindowID(#Window_0) : SetGadgetText(#Text_0,  "Main Window->"+Left(lpClassName,NameClass))
             Default                  : SetGadgetText(#Text_0,  "No gadget")
          EndSelect
         ; Функция ClientToScreen преобразует координаты заданной точки рабочей области в экранные координаты.
         ClientToScreen_(WindowID(#Window_0), P)                          ; Координаты курсора, относительно экрана
         SetGadgetText(#Text_2,  "X:Y = " + Str(P\x) + ":" + Str(P\y))
       Case #WM_TIMER
         GetCursorPos_(P)  
         SetGadgetText(#Text_3,  "X:Y " + Str(P\x) + ":" + Str(P\y))
       Case #WM_COMMAND
         If lParam = GadgetID(#Button_1) And (wParam >> 16) & $FFFF = #BN_CLICKED  ; Если жмякнули кнопку
            x.l = 200 : y.l = 200
            SetCursorPos_(x, y)                                           ; Устанавливаем новые координаты курсора
         EndIf
   EndSelect    
    ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
 
Procedure OpenWindow_Window_0()
    OpenWindow(#Window_0, 459, 124, 251, 185, "Window_0", #PB_Window_MinimizeGadget)
    TextGadget(#Text_0, 35, 20, 180, 20, "", #PB_Text_Border|#PB_Text_Center)
    TextGadget(#Text_1, 35, 45, 180, 20, "", #PB_Text_Border|#PB_Text_Center)
    TextGadget(#Text_2, 35, 70, 180, 20, "", #PB_Text_Border|#PB_Text_Center)
    TextGadget(#Text_3, 35, 95, 180, 20, "", #PB_Text_Border|#PB_Text_Center)
    TextGadget(#Text_4, 35, 120, 180, 20, "", #PB_Text_Border|#PB_Text_Center)
    ButtonGadget(#Button_1, 35, 150, 180, 20, "Button_1")
EndProcedure
 
 OpenWindow_Window_0()
 SetTimer_(WindowID(#Window_0), 200, 50, 0)        ; создаем таймер  200ms
 SetWindowCallback(@WinCallback(),#Window_0)       ; активируем callback функцию
 
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Прозрачный EditorGadget
СообщениеДобавлено: Ср май 18, 2011 5:17 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Прозрачный EditorGadget


Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
If OpenWindow(0, 0, 0, 400, 300, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
        HideWindow(0,1)
        OpenWindow(1, 0, 0,395, 200, "Transparent",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget |#PB_Window_ScreenCentered)
        SetParent_(WindowID(0),WindowID(1))
         
        EditorGadget(0, 10, 10, 375, 120)
        For a = 0 To 5
        AddGadgetItem(0, a, "Line "+Str(a))
        Next
        SetGadgetColor(0, #PB_Gadget_BackColor,$FFFFFE)
         
        SetWindowLong_(WindowID(1),#GWL_EXSTYLE,GetWindowLong_(WindowID(1),#GWL_EXSTYLE)|#WS_EX_LAYERED)
        SetLayeredWindowAttributes_(WindowID(1),$FFFFFE,0,#LWA_COLORKEY)
         
        SetActiveWindow(1)
        SetActiveGadget(0)
         
        Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
        EndIf
         
       



С фоном в виде изображения
Код:
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
 
Result = LoadImage(0, "pict.bmp")
        hBrush = CreatePatternBrush_(ImageID(0))
         
        Global HwndEditText
         
        Procedure.i WinProc(hwnd, msg, wparam, lparam)
        Select msg
         
        Case #WM_CTLCOLOREDIT
        SetBkMode_(wparam,#TRANSPARENT)
        SetTextColor_(wparam,#Black)
        SetClassLong_(WindowID(0),#GCL_HBRBACKGROUND,hBrush)      
        ProcedureReturn hBrush
         
         
        EndSelect
         
        ProcedureReturn #PB_ProcessPureBasicEvents
         
        EndProcedure
         
        OpenWindow(0,0,0,300,200,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
        SetClassLong_(WindowID(0),#GCL_HBRBACKGROUND,hBrush)
        InvalidateRect_(WindowID(0),0,1)
         
        SetWindowCallback(@WinProc(),0)
        hInstance = GetModuleHandle_(0)  
        HwndEditText  = CreateWindowEx_(#WS_EX_STATICEDGE,"EDIT","", #WS_VISIBLE | #WS_CHILDWINDOW |  #ES_MULTILINE | #ES_WANTRETURN |#ES_NOHIDESEL, 10,10,280,120,WindowID(0),200,hInstance,0)
        SendMessage_(HwndEditText,#EM_REPLACESEL,0,"Hello")
         
        Repeat
         
        Until WaitWindowEvent()=#WM_CLOSE  
         
       


_________________
read-only ¯\_(ツ)_/¯


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Реально передать фокус окну
СообщениеДобавлено: Сб июн 11, 2011 2:19 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6413
Благодарил (а): 21 раз.
Поблагодарили: 201 раз.
Пункты репутации: 52
Реально передать фокус окну:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Procedure SetForegroundWindow(hWnd) 
                 
        If GetWindowLong_(hWnd, #GWL_STYLE) & #WS_MINIMIZE
        ShowWindow_(hWnd, #SW_MAXIMIZE)
        UpdateWindow_(hWnd)
        EndIf
        foregroundThreadID = GetWindowThreadProcessId_(GetForegroundWindow_(), 0)
        ourThreadID = GetCurrentThreadId_()
         
        If (foregroundThreadID <> ourThreadID)
        AttachThreadInput_(foregroundThreadID, ourThreadID, #True);
        EndIf
               
        SetForegroundWindow_(hWnd)
       
        If (foregroundThreadID <> ourThreadID)
        AttachThreadInput_(foregroundThreadID, ourThreadID, #False)
        EndIf  
         
        InvalidateRect_(hWnd, #Null, #True)
EndProcedure  
 
 SetForegroundWindow(hWnd); передать фокус


_________________
read-only ¯\_(ツ)_/¯


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

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


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

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


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

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