Навигация
Поддержать материально
Steam Greenlight

Логотипы
Медальки
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Темы форума
193 - Bullet Heaven…
10.06.2026
 Kaps
.ruby
9.06.2026
 stom
193 - ?
29.05.2026
 Piroxyline
192 - Lords of the B…
10.05.2026
 Mefistofel
Архив Neuh
6.04.2026
 PapkaI_Igrodel
192 - ?
3.04.2026
 PapkaI_Igrodel
Видео пятнашки
14.03.2026
 appscoproration
191 - RPG XIII
7.03.2026
 Mefistofel
Насколько серьезно в…
19.02.2026
 VoroneTZ
191 - ?
14.02.2026
 PapkaI_Igrodel
Сейчас на сайте
Гостей: 3
На сайте нет зарегистрированных пользователей

Пользователей: 1,795
новичок: appscoproration
Обсуждение «Головоломка для любителей VCL и WinAPI»
Darthman
Древний организм
Avatar пользователя

Опубликовано 07.09.2006 17:46 (20 лет назад)    #
Я уже поломал голову над этой задачкой, теперь ваша очередь.

Есть в одном юните (для простоты) компонент (класс). Внутри класса создается средствами WinAPI окно. Внимание вопрос. Как изменить любое свойство или вызвать любой метод из класса при получении созданным окном сообщения (например WMKeyDown).
Bullet Heaven II:Не участвую.
beisik
Avatar пользователя

Опубликовано 07.09.2006 17:53 (20 лет назад)    #
while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
if msg = WMKeyDown then
begin
...
end;
Это???
Bullet Heaven II:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 07.09.2006 18:12 (20 лет назад)    #
Дополню задачу, чтобы понятно было. Класс еще не создан. В этом юните только описание класса идет, а переменных этого класса может быть сколько угодно.
Bullet Heaven II:Не участвую.
Piroxyline
Avatar пользователя

Опубликовано 08.09.2006 11:20 (20 лет назад)    #
Да пожалуйста - можно сделать динамический массив из записи следующего содержания:
Msg: Cardinal;
Event: Pointer;
При поступлении сообщения проверяются все элементы, где Msg совпал с сообщением - выполняется процедура Event
Bullet Heaven II:В разработке
 0%
Darthman
Древний организм
Avatar пользователя

Опубликовано 08.09.2006 13:50 (20 лет назад)    #
Не вижу тут решения.
Bullet Heaven II:Не участвую.
beisik
Avatar пользователя

Опубликовано 08.09.2006 19:59 (20 лет назад)    #
Не вижу задания! 8) Точнее не врубаю в него...
Bullet Heaven II:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 10.09.2006 20:38 (20 лет назад)    #
помоему я адекватно описал. Из класса надо создать окно. Элементов класса может быть много. При этом окно должно уметь управлять классом, который его создал.
Bullet Heaven II:Не участвую.
Piroxyline
Avatar пользователя

Опубликовано 13.09.2006 17:15 (20 лет назад)    #
Вот! Окну посылаются сообщения, оно смотрит список действий, если попадается какое-либо сообщение из присутствующих в этом списке, вызывается действие. Можно сделать практически все что угодно.
Bullet Heaven II:В разработке
 0%
Soulghai
Avatar пользователя

Опубликовано 14.09.2006 05:39 (20 лет назад)    #
Piroxyline ты думаешь Darthman этого не знал ;).
Суть его вопроса, на сколько я понял, это отвязаться от окна. Т.е. нужно сделать так, что какие окна не подавай в WndProc, а он всё-равно нормально работал. ( это один из вариантов. )
Вобщем суть в том, что нужно сделать нормальную обработку сообщений окна, не имея в наличии самого окна =).
Bullet Heaven II:Не участвую.
Piroxyline
Avatar пользователя

Опубликовано 14.09.2006 12:40 (20 лет назад)    #
Ааа! Дык ведь в WndProc подается хэндл окна, нужно сравнить его с имеющимися. Что-то типа такого:
var
CurrWnd: PWindow;
i: Integer;
...
CurrWindow := nil;
for i := 0 to Length(AllWindows) - 1 do begin
if h_Wnd = AllWindows[i].Handle then begin
CurrWnd := @AllWindows[i];
Break;
end;
end;
if CurrWnd = nil then begin
Result := <чего-то-там, скорее всего по дефолту>
Exit;
end;
а далее идет обработка этого сообщения для CurrWindow^
Bullet Heaven II:В разработке
 0%
Feo
Avatar пользователя

Опубликовано 14.09.2006 16:26 (20 лет назад)    #
сообщения обрабатываются внутри класса? или внешне? по сути, класс это указатель, может этим пользоваться? или изменять свойства, етк тоже нужно внутри класса?

редакция от Feo, 14.09.2006 16:27

Bullet Heaven II:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 15.09.2006 09:39 (20 лет назад)    #
Соул прав. Меня в данном вопросе лечить смысла не имеет. Задачка просто не тривиальная, и если есть желание - решите хотябы частично. Я Свою задачу выполнил скрестил ВЦЛ и ВинАПИ. В моем случае это было необходимо для создания DropDown компонента, аля комбобокс, только без возможности ввода текста. :)
Bullet Heaven II:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 15.09.2006 09:41 (20 лет назад)    #
И надо сказать получилось очень даже здорово! Кто видел - уже оценили.
Bullet Heaven II:Не участвую.
Shirson
Avatar пользователя

Опубликовано 15.09.2006 09:54 (20 лет назад)    #
Двропдаун без вывода текста? Повидимому экшин-меню ;)
Bullet Heaven II:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 15.09.2006 15:18 (20 лет назад)    #
не надо только вод подколок, все серьезно сделано ;) И для серьезных целей.
Bullet Heaven II:Не участвую.
Shirson
Avatar пользователя

Опубликовано 18.09.2006 07:35 (20 лет назад)    #
Да какие тут подколки... Просто догадки :)
Bullet Heaven II:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 18.09.2006 21:52 (20 лет назад)    #
покажу если интересно.
Bullet Heaven II:Не участвую.
Shirson
Avatar пользователя

Опубликовано 19.09.2006 06:56 (20 лет назад)    #
Конечно интересно!
Bullet Heaven II:Не участвую.
Darthman
Древний организм
Avatar пользователя

Опубликовано 22.09.2006 11:41 (20 лет назад)    #
http://darthman.com/temp/be3u.rar ( 300Kb )

редакция от Darthman, 22.09.2006 11:42

Bullet Heaven II:Не участвую.
capkoh
Avatar пользователя

Опубликовано 23.09.2006 16:56 (20 лет назад)    #
Я тут сбоку, но у меня, как у потенциального юзера есть несколько замечаний:
1. Fade-эффект слишком медленный. Либо убрать его вовсе.
2. Для этого DropDown создается отдельное окно в панеди задач. Этого быть не должно.
3. Повторный клик по исходному окну при открытом DropDown должно свернуть DropDown.
4. Ну и управление с клавиатуры сделать не мешает.
Bullet Heaven II:Не участвую.
Перейти на форум:
Конкурсы
Открытые конкурсы:
Bullet Heaven II

Старт: 30 мая 2026г.
Финиш: 15 июня 2026г.

Участники: 4
Недавние конкурсы:
 192 - Lords of the Board
 191 - RPG XIIII
 190 - Horror
 189 - Race V
 188 - RPG XIII
 Все конкурсы
Случайная игра
Мини-чат
Вам необходимо залогиниться.

Архив чата

28,576,034 уникальных посетителей

Создано на базе русской версии PHP-Fusion copyright © 2003-2006 by Nick Jones.
Released as free software under the terms of the GNU/GPL license.