eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: NoRG, LinXP, stran34 (+5 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

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

Создано: 18 декабря 2015 11:24 New!
Цитата · Личное сообщение · #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


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

Ранг: 221.5 (наставник)
Статус: Участник

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

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

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


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

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

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

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

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

Ранг: 394.1 (мудрец)
Статус: Участник

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

SetWindowLong(..);

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

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

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

Ранг: 221.5 (наставник)
Статус: Участник

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

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

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

Ранг: 394.1 (мудрец)
Статус: Участник

Создано: 18 декабря 2015 13:41 · Поправил: 18 декабря 2015 13:50 dosprog New!
Цитата · Личное сообщение · #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 (гость)
Статус: Участник

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

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

Ранг: 394.1 (мудрец)
Статус: Участник

Создано: 18 декабря 2015 13:48 · Поправил: 18 декабря 2015 16:34 dosprog New!
Цитата · Личное сообщение · #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 (гость)
Статус: Участник

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

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

invoke SetWindowLong,hWin ??????


Ранг: 1975.0 (!!!!)
Статус: Модератор
retired

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

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

Ранг: 394.1 (мудрец)
Статус: Участник

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

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

Работающий EXE: { Атач доступен только для участников форума } - BTNHIDE.EXE

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

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

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

Ранг: 394.1 (мудрец)
Статус: Участник

Создано: 18 декабря 2015 16:36 · Поправил: 18 декабря 2015 16:45 dosprog New!
Цитата · Личное сообщение · #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 (гость)
Статус: Участник

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

Это на Delphi?

Ранг: 394.1 (мудрец)
Статус: Участник

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

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

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

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

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

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

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS