Сейчас на форуме: jinoweb (+5 невидимых)

 eXeL@B —› Программирование —› Как спрятать кнопку
Посл.ответ Сообщение

Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 декабря 2015 11:24
· Личное сообщение · #1

Всем привет! Пишу следующий код:

Code:
  1. .elseif uMsg == WM_TIMER    
  2. .if flag==0
  3. invoke BmpButton,hWin,1,1,1,1,1
  4. .else
  5. invoke BmpButton,hWin,2,2,2,2,2
  6. .endif


Вопрос в том, как мне перед вызовом другой кнопки спрятать предыдущую и наоборот?!



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 18 декабря 2015 12:40
· Личное сообщение · #2

Что такое BmpButton мы угадать должны?
Если кнопка обычная то ShowWindow.

| Сообщение посчитали полезным: dosprog

Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 декабря 2015 12:56 · Поправил: Andrello_88
· Личное сообщение · #3

Code:
  1. invoke BmpButton,hWin,1,2,3,4,5

1 - позиция x
2 - позиция y
3 - рисунок пока не нажата
4 - рисунок при нажатии
5 - какое действие выполнять

таймер отслеживает все отлично, но просто кнопка рисуется на кнопке, как скрыть предыдущюю??



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 18 декабря 2015 13:26 · Поправил: dosprog
· Личное сообщение · #4

SetWindowLong(..);



Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 декабря 2015 13:29
· Личное сообщение · #5

Можно пример..



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 18 декабря 2015 13:39
· Личное сообщение · #6

Какой пример?
ShowWindow(hWnd, SW_HIDE), ShowWindow(hWnd, SW_SHOW)

Зачем мне параметры твоей функции?
Я спрашивал что BmpButton делает, как кнопку отображает.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 18 декабря 2015 13:41 · Поправил: dosprog
· Личное сообщение · #7

Andrello_88 пишет:
Можно пример..


Пример в руководстве по Windows API.

Code:
  1. The SetWindowLong function changes an attribute of the specified window. 
  2. The function also sets a 32-bit (long) value at the specified offset into the 
  3. extra window memory of a window. 
  4.  
  5. LONG SetWindowLong(
  6.  
  7.     HWND hWnd,    // handle of window
  8.     int nIndex,   // offset of value to set
  9.     LONG dwNewLong         // new value
  10.    );
  11.  
  12.  
  13. Parameters
  14.  
  15. hWnd
  16.  
  17. Identifies the window and, indirectly, the class to which the window belongs. 
  18.  
  19. nIndex
  20.  
  21. Specifies the zero-based offset to the value to be set. 
  22. Valid values are in the range zero through the number of bytes of extra window memory, minus 4;
  23. for example, if you specified 12 or more bytes of extra memory, a value of 8 would be an index 
  24. to the third 32-bit integer. To set any other value, specify one of the following values: 
  25.  
  26. Value    Action
  27. GWL_EXSTYLE       Sets a new extended window style.
  28. GWL_STYLE         Sets a new window style.         <----- STYLE OF WINDOW
  29. .....
  30. ...







Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 декабря 2015 13:46
· Личное сообщение · #8

Мне окно прятать не нужно - мне нужно только спрятать кнопку!



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 18 декабря 2015 13:48 · Поправил: dosprog
· Личное сообщение · #9

Andrello_88 пишет:
Мне окно прятать не нужно - мне нужно только спрятать кнопку!


) Издеваться не нужно, да? Кнопка это тоже окно. Бери и прячь его.


Code:
  1. set_unvisible( HWND hDlgItem)
  2. {
  3. SetWindowLong( hDlgItem, GWL_STYLE, GetWindowLong( hDlgItem,GWL_STYLE ) & (~WS_VISIBLE ) );
  4. UpdateWindow( hDlgItem );
  5. }



--Добавлено--
Можно и с ShowWindow(..), как написали ранее.
А заморачиваться так приходилось я уже не помню, почему. Но там была не кнопка.





Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 декабря 2015 13:59 · Поправил: Andrello_88
· Личное сообщение · #10

dosprog, помоги, как быть конкретно в моем случае??
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;

invoke SetWindowLong,hWin ??????




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 18 декабря 2015 16:01
· Личное сообщение · #11

Читайте основы, потом приходите.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 18 декабря 2015 16:23 · Поправил: dosprog
· Личное сообщение · #12

В общем, в обычном случае нормально работает
ShowWindow(hWnd, SW_HIDE); UpdateWindow(hWnd);
- как написал cppasm
Так что наверное да, не надо заморачиваться.

Работающий EXE: efb5_18.12.2015_EXELAB.rU.tgz - BTNHIDE.EXE



Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 декабря 2015 16:33
· Личное сообщение · #13

Исходный код можно "BTNHIDE.EXE"



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 18 декабря 2015 16:36 · Поправил: dosprog
· Личное сообщение · #14

Вот он исходный код на Cи:

//Hide button:
ShowWindow(hWnd, SW_HIDE); UpdateWindow(hWnd); //hWnd - хэндл кнопки
//Un-Hide button:
ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); //hWnd - хэндл кнопки

| Сообщение посчитали полезным: Andrello_88

Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 декабря 2015 16:42
· Личное сообщение · #15

Это на Delphi?



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 18 декабря 2015 16:49
· Личное сообщение · #16

Безразлично.



Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 декабря 2015 17:18
· Личное сообщение · #17

А на ассемблере как?

Добавлено спустя 11 минут
Всем спасибо, разобрался!


 eXeL@B —› Программирование —› Как спрятать кнопку
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати