Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аналог Enable Button 
:(
    Опции темы
Delvish
  Дата 11.7.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

Репутация: 2
Всего: 4



Доброго времени суток!

Облазил весь Инет и форум в том числе, но ответа на свои вопросы не нашел... Просьба рассказать (а лучше дать пример) или дать ссылку где было бы понятно рассказано все что мне необходимо... Итак: хочется сделать аналог известной программы Enable Button, но еще более продвинутую. Сейчас загвоздка состоит в том, что не могу корректно отловить хэндлы дочерних окон. Испробовал кучу разных процедур и функций - толку ноль. А точнее - провожу над формой курсором (на форме TPanel, на ней TButton неактивный, к примеру) - мне показывает хэндл и класс панели, но не кнопки. Пробовал колдовать с EnumChildWindow, но что-то все равно кнопка не активизируется ни по EnableWindow(wnd, true), ни по SendMessage(wnd, WM_ENABLE, 0, 0).

ОГРОМНАЯ просьба направить на путь истинный и рассказать как же все-таки сделать так чтобы в форме под курсором активировались все элементы, да так, чтобы кроме ...Enable := true еще и ...ReadOnly := false - т.е. полная активация всех элементов формы
PM MAIL   Вверх
Delvish
Дата 13.7.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

Репутация: 2
Всего: 4



эммм... что-то ответов не многовато  smile 
ну да ладно, с первой проблемой разобрался. кнопочки становятся активными. вот код если кому-то будет интересно:

Код

function EnumProc(wwnd:HWND; lParam:integer) : Boolean; stdcall;
begin
  EnableWindow(wwnd, True);
  Result := True;
end;

===============

wnd := WindowFromPoint(Mouse.CursorPos);
EnumChildWindows(wnd, @EnumProc, 0);



Но осталась проблема такого характера: непонятно как заставить какой-нить TLabel или TMemo свойство ReadOnly изменить на false. Кто-нибудь в курсе? Может быть как-то через SetProp(...)?
PM MAIL   Вверх
Amphiluke
Дата 14.7.2010, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: нет
Всего: 112



Код

procedure EnableWndFromPoint(Pt: TPoint);
var
  Wnd: HWND;
begin
  Wnd := WindowFromPoint(Pt);
  if Wnd = 0 then Exit;
  Windows.ScreenToClient(Wnd, Pt);
  Wnd := ChildWindowFromPoint(Wnd, Pt);
  EnableWindow(Wnd, True);
  if GetWindowLong(Wnd, GWL_STYLE) and ES_READONLY = ES_READONLY then
    SendMessage(Wnd, EM_SETREADONLY, 0, 0);
end;


Добавлено через 1 минуту и 15 секунд
TLabel — это вообще не окно. Свойства ReadOnly у него не припомню.  smile 
PM   Вверх
Delvish
Дата 14.7.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

Репутация: 2
Всего: 4



сорри, хотел написать не TLabel, а TEdit  smile насчет лэйбла понятно  smile 

так вот, этот код сделает свойство ReadOnly поля в true или false? судя по:
Код

SendMessage(Wnd, EM_SETREADONLY, 0, 0);


 не могу пока проверить, на работе...
PM MAIL   Вверх
Amphiluke
Дата 14.7.2010, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: нет
Всего: 112



Цитата(Delvish @  14.7.2010,  23:08 Найти цитируемый пост)
так вот, этот код сделает свойство ReadOnly поля в true или false?

Ну, очевидно, wParam = False = 0.
PM   Вверх
Delvish
Дата 15.7.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


oO
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 13.12.2006

Репутация: 2
Всего: 4



премного благодарен!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.