Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2008, 00:50   #1
Никки
Форумчанин Подтвердите свой е-майл
 
Аватар для Никки
 
Регистрация: 20.11.2007
Сообщений: 500
По умолчанию Изменение свойств кнопки через WinAPI

Я создал форму на WinAPI и кнопу на ней! Но как теперь мне изменить свойства этой кнопки? Мне надо сделать её недоступной и изменить текст!!
Никки вне форума Ответить с цитированием
Старый 25.04.2008, 01:04   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

sendmessage + BN_ENABLE
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 25.04.2008, 01:48   #3
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
sendmessage + BN_ENABLE
Поправлю. Слова BN_ENABLE не существует вообще. Есть BN_DISABLE, но это уведомление, которое получает родительское окно кнопки, когда она становится выключеной. Кнопка же выключается обычным для всех окон образом:
Код:
EnableWindow(Button123.Handle, FALSE);
Текст устанавливается SetWindowText или WM_SETTEXT, свойства кнопки можно менять сообщениями BM_SETSTYLE или через SetWindowLong, а текущее состояние, в зависимости от стиля, - BM_SETCHECK, BM_SETSTATE.
B_N вне форума Ответить с цитированием
Старый 26.01.2009, 20:49   #4
kiloz
Пользователь
 
Регистрация: 07.01.2009
Сообщений: 42
Вопрос

А можно примерчик, как изменить стиль конопки?
Мне вообще нужно изменить стиль edit-а, но они вроди оба окна)))
И если можно, не подскажите как сделать окно без заголовка вообще?
kiloz вне форума Ответить с цитированием
Старый 26.01.2009, 22:19   #5
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Цитата:
Сообщение от kiloz Посмотреть сообщение
И если можно, не подскажите как сделать окно без заголовка вообще?
WS_DLGFRAME наверное
Д'якон вне форума Ответить с цитированием
Старый 27.01.2009, 09:15   #6
kiloz
Пользователь
 
Регистрация: 07.01.2009
Сообщений: 42
Вопрос

Если окно создать так:

Код:
function AboutMainWndProc(hWindow: HWND; Msg: UINT; wParam: wParam; lParam: lParam): LRESULT; stdcall;
var
  ps: TPaintStruct;
begin
  Result := 0;
  case Msg of
    WM_PAINT: begin
                BeginPaint(hWindow, ps);
                SetBkMode(ps.hdc, TRANSPARENT);
                TextOut(ps.hdc, 10, 10, 'Hello, World!', 13);
                EndPaint(hWindow, ps);
              end;
    WM_DESTROY: PostQuitMessage(0);
    else begin
           Result := DefWindowProc(hWindow, Msg, wParam, lParam);
           Exit;
         end;
  end;
end;

procedure About;
var wc: TWndClass; hWindow: HWND; Msg: TMsg;
begin
  wc.lpszClassName := 'YourAppClass';
  wc.lpfnWndProc   := @AboutMainWndProc;
  wc.Style         := CS_VREDRAW or CS_HREDRAW;
  wc.hInstance     := hInstance;
  wc.hIcon         := LoadIcon(HInstance, 'MAINICON');
  wc.hCursor       := LoadCursor(0, IDC_ARROW);
  wc.hbrBackground := COLOR_BTNSHADOW;
  wc.lpszMenuName  := nil;
  wc.cbClsExtra    := 0;
  wc.cbWndExtra    := 0;

  RegisterClass(wc);

  hWindow := CreateWindowEx({WS_EX_CONTROLPARENT or WS_EX_WINDOWEDGE} WS_DLGFRAME,
     'YourAppClass',
     MyProgs,
     WS_VISIBLE or WS_CLIPSIBLINGS or
     WS_CLIPCHILDREN or WS_OVERLAPPEDWINDOW,
     CW_USEDEFAULT, 0,
     400, 300,
     mainwnd,
     0,
     hInstance,
     nil);

  ShowWindow(hWindow, CmdShow);
  UpDateWindow(hWindow);

  while GetMessage(Msg, 0, 0, 0) do begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
end;
А конкретно я имею введу это строку
Код:
hWindow := CreateWindowEx(WS_DLGFRAME,
     'YourAppClass',
     MyProgs,
     WS_VISIBLE or WS_CLIPSIBLINGS or
     WS_CLIPCHILDREN or WS_OVERLAPPEDWINDOW,
     CW_USEDEFAULT, 0,
     400, 300,
     mainwnd,
     0,
     hInstance,
     nil);
топоручаем обычное окно с перевернутым полем заголовка: 1.png

А если создавать так:
Код:
hWindow := CreateWindowEx(WS_EX_CONTROLPARENT or WS_EX_WINDOWEDGE,
     'YourAppClass',
     MyProgs,
     WS_DLGFRAME,
     CW_USEDEFAULT, 0,
     400, 300,
     mainwnd,
     0,
     hInstance,
     nil);
то получаем простое окно без кнопок, но со значком и caption...

Так как же создать окно без заголовка, что в VCL делается простым:
Код:
Form1.BorderStyle := bsNone;
И как изменить столь уже после создания, например сделать не объемным (Ctl3D False), но уже когда объект существует?

Последний раз редактировалось rpy3uH; 28.01.2009 в 12:59.
kiloz вне форума Ответить с цитированием
Старый 27.01.2009, 18:41   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от kiloz Посмотреть сообщение
И как изменить столь уже после создания, например сделать не объемным (Ctl3D False), но уже когда объект существует?
См. SetWindowLong
Somebody вне форума Ответить с цитированием
Старый 27.01.2009, 23:46   #8
kiloz
Пользователь
 
Регистрация: 07.01.2009
Сообщений: 42
По умолчанию

Смотрел, только не разобрался с праметрами ((
Можите какой-ниудь пример привести, хоть одной строчкой

Последний раз редактировалось kiloz; 27.01.2009 в 23:50.
kiloz вне форума Ответить с цитированием
Старый 28.01.2009, 08:30   #9
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

result:=SetWindowLong(hWnd,GWL_STYL E,WS_BORDER or WS_DLGFRAME or ...)
Д'якон вне форума Ответить с цитированием
Старый 28.01.2009, 12:52   #10
kiloz
Пользователь
 
Регистрация: 07.01.2009
Сообщений: 42
Хорошо

спасибо, помогли
kiloz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как возможно сделать изменение кнопки xGroupers Общие вопросы Delphi 4 25.04.2008 00:07
Как мне программно открыть окно свойств како-го нить файла? Altera Компоненты Delphi 2 13.04.2008 16:07
можно ли подсвечивать в Strindrid заданую ячейку через нажатие кнопки. koldun Помощь студентам 1 08.12.2007 12:11
Как программно назначить привилегию или писать в реестр через WinApi ? UnD)eaD)Snake Win Api 16 27.09.2007 20:20
Изменение параметров ListView через ShowMessage Romanbl4 Компоненты Delphi 5 29.06.2007 15:46