Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

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

Ответ
 
Опции темы
Старый 18.01.2012, 14:36   #1
bro
Пользователь
 
Аватар для bro
 
Регистрация: 02.12.2010
Адрес: Россия
Сообщений: 29
Репутация: 10

icq: 371250184
По умолчанию Проблемы с WS_EX_NOACTIVATE

Здравствуйте.

У меня следующая проблема. Есть окно с флагом WS_EX_NOACTIVATE (не становится активным от нажатий). Нужно сделать так, чтобы при перетаскивании мышкой было видно всю траекторию перетаскивания, а не только конечный результат.

Решение проблемы на c++ есть тут:

http://forum.vingrad.ru/forum/s/fc84...1749903/0.html

и тут:

http://www.codeproject.com/KB/system...framework.aspx

На дельфи я перевёл так:
Код:

procedure TSmallWnd.WMNCLButtonDown(var Msg : TWMNCLButtonDown);
begin
  inherited;
  // store current foreground window
  PreviousWnd := GetForegroundWindow;
  // temporarily make this dialog an activatable window
  SetWindowLong(SmallWnd.Handle, GWL_EXSTYLE, GetWindowLong(SmallWnd.Handle, GWL_EXSTYLE)
         or not(WS_EX_NOACTIVATE));
  // make this dialog foreground
  SetForegroundWindow(SmallWnd.Handle);
end;

procedure TSmallWnd.WMMove(var Msg: TWMMove);
begin
  inherited;
  // make the previous foreground window active
  SetForegroundWindow(PreviousWnd);
  // make this dialog non-activating
  SetWindowLong(SmallWnd.Handle, GWL_EXSTYLE, GetWindowLong(SmallWnd.Handle, GWL_EXSTYLE)
         or (WS_EX_NOACTIVATE));
  // set it to NULL to mark that we do not need to do this again
  PreviousWnd := 0;
end;

Только почему-то это не избавило от проблемы. Что я сделал неверно?

P.S.: поторопился. Их пример некорректно работает - фокус не возвращает.

Последний раз редактировалось bro; 18.01.2012 в 14:59.
bro вне форума   Ответить с цитированием
Старый 18.01.2012, 17:39   #2
bro
Пользователь
 
Аватар для bro
 
Регистрация: 02.12.2010
Адрес: Россия
Сообщений: 29
Репутация: 10

icq: 371250184
По умолчанию

Решил свою проблему. Пользуйтесь, няши.

Код:

  private
    procedure CreateParams(var Params: TCreateParams); override;
    procedure WMMoving(var Msg: TMessage); message WM_MOVING;
    procedure WMSizing(var Msg: TMessage); message WM_SIZING;
  protected
    //
  public
    //
  end;

var
  SmallWnd: TSmallWnd;

implementation

{$R *.dfm}

procedure TSmallWnd.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE;
end;

procedure TSmallWnd.WMMoving(var Msg: TMessage);
var
  Rect: ^TRect;
begin
  Rect := Pointer(Msg.LParam);
  SetWindowPos(SmallWnd.Handle, HWND_TOPMOST, Rect^.left, Rect^.top,
    Rect^.right - Rect^.left, Rect^.bottom - Rect^.top, 0);
end;

procedure TSmallWnd.WMSizing(var Msg: TMessage);
var
  Rect: ^TRect;
begin
  Rect := Pointer(Msg.LParam);
  SetWindowPos(SmallWnd.Handle, HWND_TOPMOST, Rect^.left, Rect^.top,
    Rect^.right - Rect^.left, Rect^.bottom - Rect^.top, 0);
end;

bro вне форума   Ответить с цитированием
Старый 23.10.2018, 21:04   #3
YoraG
Пользователь
 
Регистрация: 06.11.2008
Адрес: Украина, Херсонская обл., Каховка
Сообщений: 10
Репутация: 32

icq: 462226422
По умолчанию

Undeclared identifier: 'TSmallWnd' - откуда? откуда ноги растут?
YoraG вне форума   Ответить с цитированием
Старый 23.10.2018, 21:33   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,797
Репутация: 2143
По умолчанию

Класс формы же видно по коду.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблемы с IE Tradua HTML и CSS 1 05.08.2011 06:54
Проблемы с БД Verwolf C/C++ Базы данных 2 22.05.2011 09:52
Проблемы с С# PDV199003 Помощь студентам 0 04.06.2010 14:38
проблемы с if Vergil Общие вопросы C/C++ 8 21.04.2010 21:43
проблемы с IE xakzona Помощь студентам 1 16.12.2008 22:53


22:14.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru