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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перерисовка чужого окна 
:(
    Опции темы
RinOSpro
Дата 1.4.2008, 17:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В общем делаю нечто Spy++ когда наводишь на чужую форму или другой контрол она выделяет его.  Выделить получается но иногда остаются линии. Как можно подправить процедуру  чтобы после отпускания мышки никаких нарисованных мной линий на чужой форме не оставалось?

Код

procedure FrameWindow(Wnd: HWnd);
var
  Rect: TRect;
  DC: hDC;
  OldPen, Pen: hPen;
  OldBrush, Brush: hBrush;
  X2, Y2: Integer;
begin
  GetWindowRect(Wnd, Rect);
  DC := GetWindowDC(Wnd);
  SetROP2(DC, R2_NOT);
  Pen := CreatePen(PS_InsideFrame, 3, 0);
  OldPen := SelectObject(DC, Pen);
  Brush := GetStockObject(Null_Brush);
  OldBrush := SelectObject(DC, Brush);
  X2 := Rect.Right - Rect.Left;
  Y2 := Rect.Bottom - Rect.Top;
  Rectangle(DC, 0, 0, X2, Y2);
  SelectObject(DC, OldBrush);
  SelectObject(DC, OldPen);
  ReleaseDC(Wnd, DC);
  DeleteObject(Pen);
end;



Код

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  hNewWnd : HWnd;
begin
  hNewWnd := WindowFromPoint(Mouse.CursorPos);
  if GetParent(hNewWnd) <> Self.Handle then
  if hNewWnd <> Self.Handle then
  if hNewWnd <> hOldWnd then
begin
    if hOldWnd <> 0 then
      FrameWindow(hOldWnd);
    if hNewWnd <> 0 then
      FrameWindow(hNewWnd);
    hOldWnd := hNewWnd;
  end;
end;




  Вверх
Rrader
  Дата 2.4.2008, 04:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 29
Всего: 191



Код

InvalidateRect(0, NIL, False);



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
RinOSpro
Дата 3.4.2008, 14:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Rrader - Спасибо!

Есть еще один не большой вопросик задам сюда,

Spy++ выделяет все контролы также label-ы, заэнабленные buttin-ы, этаже процедурка этого не делает, есть функция ChildWindowFromPoint ее пробывал но так и не получилось выделить lablel-ы ожет не так пробывал.... Подскажите плиззз
  Вверх
ama_kid
Дата 3.4.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 19
Всего: 95



Цитата(RinOSpro @  3.4.2008,  14:31 Найти цитируемый пост)
ChildWindowFromPoint ее пробывал но так и не получилось
Цитата
Grandchildren, and deeper descendant windows are not searched
Вполне возможно, что lable-ы, которые ты пытался выделить, лежат не на самом окне, а на некоторых элементах, которые тоже в свою очередь лежат на главном окне. Мне думается, что тебе надо делать более глубокий поиск дочернего окна по point'y для уже выделенного элемента окна.



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
RinOSpro
Дата 3.4.2008, 15:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ama_kid - не поможете примерчиком smile
  Вверх
Snowy
Дата 3.4.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Label - не окно.
Это всего лишь надпись на паренте.
Она не выделяется, т.к. не является самостоятельным окном - это часть окна, на котором она нарисована.
Соответственно и хэндла не имеет.
Конечно, бывают и оконные лабелы. Но это, как правило, исключение.
PM MAIL   Вверх
MetalFan
Дата 3.4.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 16
Всего: 128



Цитата(Snowy @  3.4.2008,  15:04 Найти цитируемый пост)
Конечно, бывают и оконные лабелы. Но это, как правило, исключение. 

стандартный виндовый класс - Static и есть по идее окно-лабел.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
RinOSpro
Дата 3.4.2008, 15:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Snowy - согласен в delphi да но в с++ это смотря как захотеть smile.
Если скажем взять форму delphi c label то ни Spy++ их не видит ни моя прога все правильно.
В моем случае есть программа там есть label-ы spy++ выделяет и показывает их handle и имя класса а я чтото не могу.... 

  Вверх
ama_kid
Дата 3.4.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 19
Всего: 95



Цитата(RinOSpro @  3.4.2008,  15:00 Найти цитируемый пост)
ama_kid - не поможете примерчиком
Не помогу, ибо не было необходимости писать аналог Spy++ (он меня вполне устраивает), поэтому своего кода нет, а с нуля писать лениво. Но если ты выложишь работоспособную заготовку - думаю, общественность могла бы посмотреть её на предмет улучшения...  smile 



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
RinOSpro
Дата 3.4.2008, 15:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ama_kid так я не собираюсь переписывать Spy++ smile мне нужен небольшой функционал это проги для легкого обращения с чужими программами. А выделение как Spy++ мне понравилось и хочется чтоб такой же и в проге был.
  Вверх
RinOSpro
Дата 4.4.2008, 09:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Людиии ну хоть ссылочку подарите на подобную тему smile
  Вверх
RinOSpro
Дата 4.4.2008, 15:44 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(RinOSpro @  3.4.2008,  15:20 Найти цитируемый пост)
Snowy - согласен в delphi да но в с++ это смотря как захотеть .

Оказывается и delphi можно захотеть smile TStaticText - label c handle
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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